主頁 > 資料庫 > openEuler22+GreatSQL+dbops玩轉MGR

openEuler22+GreatSQL+dbops玩轉MGR

2023-06-10 08:44:10 資料庫

芬達,《芬達的資料庫學習筆記》公眾號作者,開源愛好者,擅長 MySQL、ansible,

背景

openEuler 是什么

openEuler22.03 LTS 是 openEuler 社區于 2022 年 3 月發布的開源作業系統(從系統版本的命名不難發現吧),openEuler 社區的運營由華為為主導,社區以全球開源貢獻者的合作,構建了這個高效、穩定和安全的作業系統,基于 Linux 內核的 openEuler 作業系統,支持 Kunpeng 以及其他處理器,旨在充分發揮計算芯片的潛力,它適用于資料庫、大資料、云計算和人工智能等場景,通過社區合作,openEuler 構建了一個創新平臺,創建了一個支持多處理器架構的統一開放作業系統,并推動了軟體和硬體應用生態系統的繁榮,

openEuler22.03 LTS 帶來了一系列關鍵功能,包括基于 Linux Kernel 5.10 的深度優化、新型媒體檔案系統、分層記憶體擴展、用戶模式協議堆疊、云原生調度增強、QEMU 熱補丁、KubeOS、增強的輕量級安全容器、增強的 iSulad、雙平面部署、邊緣計算支持、嵌入式鏡像,以及 secPaver 等,

openEuler22.03 LTS 可以被視為國產作業系統創新專案的首選系統版本之一,

GreatSQL 是什么

GreatSQL,作為 MySQL 分支 Percona 的延伸,立志成為中國廣泛受歡迎的開源資料庫,其上一版本基于 Percona Server 8.0.25 構建,而這次的新版本則使用 Percona Server 8.0.32 作為基礎,引入了許多重要特性,新發布的 GreatSQL 8.0.32-24 版本增加了并行 load data、邏輯和 CLONE 備份加密、MGR 讀寫節點可動態系結 VIP、SQL 兼容擴展、審計日志增強等重大特性,

GreatSQL 8.0.32-24 可以被視為國產開源資料庫信創專案,并且解決 MySQL5.7 EOL 問題的重要替代方案之一,

關于 MySQL5.7 EOL 問題,可以翻閱我之前寫的文章《陰謀論: MySQL 將死,國產資料庫的春天?》

dbops 是什么

dbops 是一款提供生產級別 MySQL 部署的 playbook 工具,由芬達個人開發,

地址: https://gitee.com/fanderchan/dbops/

GreatSQL 官方并未提供專門針對 openEuler 的編譯安裝包,而我發現部署 GreatSQL、GreatSQL MGR、GreatSQL HA 等都有許多細節需要注意,本文主要講述我如何思考并開發 dbops 的新功能,以在 openEuler22 上成功部署 GreatSQL,并運行其"MGR 讀寫節點可動態系結 VIP"功能(以下簡稱"GreatSQL HA 功能"),

dbops 如何支持 GreatSQL

dbops 本來就支持 MySQL 和 Percona,所以對 GreatSQL 的支持并不需要大規模的改動,以下大部分是一些針對部署 GreatSQL 與 MySQL 或 Percona 的不同之處的調整,

1. 只對 Linux - Generic 包的支持

由于 dbops 的目標是支持大量的國產作業系統,與 MySQL 一樣,GreatSQL 提供了針對各種作業系統的預編譯二進制包,但有一個是通用的,那就是 Linux - Generic 包,在 dbops 為 MySQL 提供支持以及在實際生產中,都在使用這個包,

同時,為了支持更多的 Linux 系統,我選擇了基于 glibc2.17 的包,而非 glibc2.28 的包,前者意味著包是在 glibc 公共庫版本為 2.17 的系統下編譯出來的,因此,它不會包含大于 2.17 的庫函式,兼容性會更強,

我選擇支持的是 minimal 包,這個版本剔除了與除錯相關的二進制檔案和除錯符號,體積非常小,僅為常規包的三分之一,我認為非 minimal 包并無優勢,

目前,dbops 僅支持 GreatSQL-8.0.32-24-Linux-glibc2.17-x86_64.tar.xz 的部署,

2. dbops 的 mysql_ansible 的組態檔 common_config.yml 的調整

dbops 可以很方便的配置執行 playbook 的變數,變數設定非常集中,一般只需要修改兩個檔案,一個是全域引陣列態檔 common_config.yml,另外一個是當前需要執行的 playbook yaml 檔案,

  • 新增了 db_type 引數,用于判斷待部署的資料庫型別,可選值為 MySQL、Percona、GreatSQL,根據 db_type 的不同,部署流程將有所區別,
  • 將 mysql_base_dir 引數和 mysql_data_dir_base 引數設定為根據 db_type 自動生成,這樣可以得到不同的目錄路徑,我希望避免將 MySQL 和 GreatSQL 放置在同一目錄下,以便于區分,
  • 對于 mysql_package 引數,即安裝包的名稱,如果是 MySQL,會根據 {{ mysql_version }} 自動生成;如果是 GreatSQL,將讀取 greatsql_package 的設定,
  • 新增了 fcs_use_greatsql_ha 開關引數,其默認值為 1,即如果部署的是 GreatSQL 并且采用 MGR 架構(執行的 playbook==mgr.yml),那么默認會部署"MGR 讀寫節點可動態系結 VIP"的功能插件,
## DB TYPE,suport mysql,percona,greatsql
+ db_type: greatsql

#Directory of MySQL installation package
mysql_packages_dir: ../downloads/ 

+ greatsql_package: GreatSQL-8.0.32-24-Linux-glibc2.17-x86_64-minimal.tar.xz
+ percona_package: Percona-Server-8.0.29-21-Linux.x86_64.glibc2.17.tar.gz

## do not modify
- mysql_package: "{{ 'mysql-' + mysql_version + '-linux-' + ('glibc2.12' if mysql_version.startswith('5.') else 'glibc2.17') + '-x86_64' + ('.tar.gz' if mysql_version.startswith('5.') else '-minimal.tar.xz') }}"
+ mysql_package: "{% if db_type == 'mysql' %}{{ 'mysql-' + mysql_version + '-linux-' + ('glibc2.12' if mysql_version.startswith('5.') else 'glibc2.17') + '-x86_64' + ('.tar.gz' if mysql_version.startswith('5.') else '-minimal.tar.xz') }}{% elif db_type == 'percona' %}{{ percona_package }}{% elif db_type == 'greatsql' %}{{ greatsql_package }}{% endif %}"

## linux mysql run user name
mysql_user: mysql
mysql_group: mysql
mysql_user_password: Dbops@9999

## mysql install directory
- mysql_base_dir: /database/mysql/base/{{ mysql_version }}
+ mysql_base_dir: /database/{{ db_type }}/base/{{ mysql_version }}

## mysql_data_dir_base define mysql datadir base, real datadir= mysql_data_dir_base + /port
- mysql_data_dir_base: /database/mysql
+ mysql_data_dir_base: /database/{{ db_type }}

+ fcs_use_greatsql_ha: 1

3. 新增 GreatSQL 專屬 my.cnf 模板,并對 GreatSQL HA 的新引數支持

在 mgr.yml 這個 playbook 里新增三個與 GreatSQL HA 相關的引數設定

+ greatsql_vip: 192.168.199.174
+ greatsql_net_work_interface: "ens33"
+ greatsql_netmast: "255.255.255.255"

新增了 mysql_ansible/roles/mysql_server/templates/8.0/greatsql-my.cnf.j2 模板,此模板是從 percona-my.cnf.j2 模板克隆而來,為了支持 GreatSQL HA 的相關引數設定,我使用 jinja2 語法設定了判斷邏輯,只有滿足以下三個條件,才會添加這些引數:

  • 資料庫型別為 'greatsql' (在 common_config.yml 中設定)
  • 設定了 fcs_use_greatsql_ha: 1 開關,要求部署 GreatSQL HA 功能(在 common_config.yml 中設定)
  • 在安裝 MGR 時(運行 ansible-playbook mgr.yml 時)
+ {% if db_type == 'greatsql' and fcs_use_greatsql_ha == 1 and make_mgr_role_included is defined and make_mgr_role_included %}
+ #GreatSQL MGR vip
+ plugin-load-add=greatdb_ha.so
+ loose-greatdb_ha_enable_mgr_vip=1
+ loose-greatdb_ha_mgr_vip_ip={{ greatsql_vip }}
+ loose-greatdb_ha_mgr_vip_mask={{ greatsql_netmast }}
+ loose-greatdb_ha_mgr_vip_nic={{ greatsql_net_work_interface }}
+ 
+ #single-primary mode
+ loose-group_replication_single_primary_mode=1
+ loose-group_replication_enforce_update_everywhere_checks=0
+ {% endif %}

前面設定的三個引數值,greatsql_vip、greatsql_netmast、greatsql_net_work_interface 會對應傳入到 my.cnf 里,

4. 支持自動下載 GreatSQL 安裝包

+ - name: Download GreatSQL binary tarball if not found locally and auto download is enabled(local)
+   ansible.builtin.get_url:
+     url: "https://product.greatdb.com/{{ mysql_package[0:18] }}/{{ mysql_package }}"
+     dest: "{{ mysql_packages_dir }}/{{ mysql_package }}"
+     mode: '0644'
+     timeout: 30
+     headers:
+       User-Agent: "Wget/1.21.1"
+   when: not mysql_server__package_file.stat.exists and fcs_auto_download_mysql == 1 and db_type == 'greatsql'
+   delegate_to: 127.0.0.1

在正常情況下,您應該手動上傳 GreatSQL 的包到 downloads/ 檔案夾中,如果在 downloads/ 檔案夾中沒有找到對應的包,且在 common_config.yml 檔案中設定了 fcs_auto_download_mysql == 1(允許從互聯網下載安裝包),并且 db_type == 'greatsql',那么將會自動從互聯網下載安裝包,

dbops 本身就支持下載 MySQL 安裝包的功能,但由于 GreatSQL 的安裝包下載路徑不同,因此我額外添加了一個下載鏈接,以實作相同的下載功能,

5. 修改 GreatSQL 啟動服務

為了讓 GreatSQL HA 支持 mysqld 執行通常需要較高權限才能操作的掛載和卸載 VIP 操作,我們需要進行一些特殊設定,官方原先提供了兩個方案,但我提出了新的解決方案,

在服務設定中,我們加入以下代碼:

[Service]
+ {% if db_type == 'greatsql' and fcs_use_greatsql_ha == 1 and make_mgr_role_included is defined and make_mgr_role_included %}
+ AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW
+ {% endif %}

只有當滿足條件(需要部署 GreatSQL HA)時,系統會自動在啟動服務中配置 "CAP_NET_ADMIN CAP_NET_RAW" 的權限,

![圖片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

我設計的這種方法也得到了官方的采納,成為首選推薦方法,

6. fix 部署 GreatSQL 有可能報錯的問題

GreatSQL 在部署后可能在使用 mysqld 初始化時,或者初始化后使用 mysql 登錄時,報告 libcrypto.so 或 libssl.so 找不到,

[root@192-168-199-171 ~]# /usr/local/mysql/bin/mysqld --defaults-file=/database/mysql/etc/3306/my.cnf --initialize-insecure
/usr/local/mysql/bin/mysqld: error while loading shared libraries: libcrypto.so: cannot open shared object file: No such file or directory

[root@192-168-199-171 lib]# mysql -uroot -p -S /database/mysql/data/3307/mysql.sock
mysql: error while loading shared libraries: libssl.so: cannot open shared object file: No such file or directory

針對此問題,我們有兩種解決方案,第一種方法是使用 yum install openssl-devel 安裝,之后系統庫就會包含這兩個 so 庫:

/usr/lib64/libcrypto.so
/usr/lib64/libssl.so

然而,我們也有第二種解決方法,GreatSQL 的 Generic 包其實已經編譯了這兩個庫,只是它們被命名為 libcrypto.so.10 和 libssl.so.10,而非 libcrypto.so 和 libssl.so,我們只需在 /usr/local/mysql/lib/private/ 檔案夾內為這兩個庫創建軟鏈接即可,

并且,我認為采用第二種方法,使用官方包內的 libcrypto.so 和 libssl.so,是最佳的解決方案,

改動代碼如下:

mysql_ansible/roles/mysql_server/tasks/fix_greatsql_install.yml

+ - name: Create symbolic links for libssl.so and libcrypto.so
+   file:
+     src: "/usr/local/mysql/lib/private/{{ link.src }}"
+     dest: "/usr/local/mysql/lib/private/{{ link.dest }}"
+     state: link
+     owner: "{{ mysql_user }}"
+     group: "{{ mysql_group }}"
+   loop:
+     - { src: 'libssl.so.10', dest: 'libssl.so' }
+     - { src: 'libcrypto.so.10', dest: 'libcrypto.so' }
+   loop_control:
+     loop_var: link

mysql_ansible/roles/mysql_server/tasks/main.yml

  - name: Install mysql to /usr/local/mysql
    ansible.builtin.import_tasks: install_mysql.yml

+ - name: Fix libcrypto.so and libssl.so not find by create link if db_type is greatsql
+   ansible.builtin.import_tasks: fix_greatsql_install.yml
+   when: db_type == 'greatsql'

  - name: Init mysql datadir
    ansible.builtin.import_tasks: initialize_mysql_datadir.yml

7. 檢查網卡是否一致

在設定了 VIP 漂移的三臺機器中,與 MHA 架構相同,我們可能會遇到一種狀況:在一開始設定網卡系結時,主機管理員可能會沒注意,發生以下情況:

192.168.199.171  網卡名 bond1
192.168.199.172  網卡名 bond1
192.168.199.173  網卡名 bond0

你可能已經發現了,第三臺機器的網卡名與前兩臺不一致,因此,如果發生高可用漂移,MHA 或 MGR 在選擇主機時,如果選擇了第三臺作為主機,那么根據 greatsql_net_work_interface: "bond1" 的設定,漂移操作可能會失敗,雖然我還沒有進行過測驗,但這個問題在 MHA 架構中肯定會發生,而且在 GreatSQL HA 架構中也有很大可能發生!

因此,在運行 ansible-playbook 部署 mgr.yml 時,我已在第一步的 pre_check_and_set(檢查和設定系統引數)中,加入了檢查網卡名是否一致的步驟,如果網卡名不一致,playbook 將報錯并終止運行,給出提示,代碼如下:

- name: Add network interface alias to a temporary file
  ansible.builtin.lineinfile:
    path: "/tmp/net_aliases.txt"
    line: "{{ ansible_default_ipv4.alias }}"
    create: true
    mode: '0644'

- name: Fetch copy
  ansible.builtin.fetch:
    src: /tmp/net_aliases.txt
    dest: /tmp/ssh

- name: Append file /tmp/net_aliases.txt (delegate to 127.0.0.1)
  ansible.builtin.shell: set -o pipefail && find /tmp/ssh/ -name "*.txt" -type f -exec sh -c 'cat {}' \; | sort | uniq | wc -l
  register: pre_check_and_set__shell_output
  changed_when: false
  run_once: true
  delegate_to: 127.0.0.1

- name: Check if shell output is 1
  ansible.builtin.assert:
    that: pre_check_and_set__shell_output.stdout | int == 1
    fail_msg: "Network card names are different!"
  run_once: true
  delegate_to: 127.0.0.1

- name: Delete /tmp/net_aliases.txt
  ansible.builtin.file:
    path: /tmp/net_aliases.txt
    state: absent

- name: Delete /tmp/ssh/ (delegate to 127.0.0.1)
  ansible.builtin.file:
    path: /tmp/ssh/
    state: absent
  run_once: true
  delegate_to: 127.0.0.1

8. 支持使用 jemalloc 記憶體分配器

GreatSQL 和 Percona 官方都推薦使用 jemalloc 替代默認的 malloc,我至今沒有發現 MySQL 官方的類似建議,然而,在實踐中,我曾經通過替換 malloc 為 jemalloc 記憶體管理器來解決記憶體泄露問題,盡管根本原因仍不清楚,因此,我之前已經在我的 dbops 工具中加入了在部署時選擇使用 jemalloc 記憶體分配器的功能,它是在 systemd 服務中實作的,

以下是涉及的代碼:

mysql_ansible/playbooks/common_config.yml

# 組態檔中提供一個開關,決定是否使用 jemalloc 記憶體分配器,其默認值為 0,即不修改記憶體分配器
fcs_mysql_use_jemalloc: 1

mysql_ansible/roles/mysql_server/tasks/install_mysql_dependents.yml

- name: Install libaio and numactl
  ansible.builtin.yum:
    name: "{{ package.name }}"
    state: present
  loop:
    - { name: 'libaio' }
    - { name: 'numactl' }
  loop_control:
    loop_var: package
  tags:
    - dependents

- name: Install jemalloc
  when: fcs_mysql_use_jemalloc == 1
  tags:
    - dependents
  block:
    - name: Install jemalloc using yum
      ansible.builtin.yum:
        name: jemalloc
        state: present
      register: mysql_server__jemalloc_install_result
      ignore_errors: true

    - name: Set jemalloc rpm file name based on OS
      ansible.builtin.set_fact:
        mysql_server__jemalloc_rpm_file: "{{ 'jemalloc-3.6.0-1.el8.x86_64.rpm' if os_type in ['openEuler22', 'openEuler20', 'CentOS8', 'BigCloud8', 'Anolis OS8'] else 'jemalloc-3.6.0-1.el7.x86_64.rpm' }}"

    - name: Copy jemalloc rpm to target server
      ansible.builtin.copy:
        src: "../files/{{ mysql_server__jemalloc_rpm_file }}"
        dest: "/tmp/{{ mysql_server__jemalloc_rpm_file }}"
        mode: '0755'
      when: mysql_server__jemalloc_install_result.failed

    - name: Install jemalloc from local file
      ansible.builtin.yum:
        name: "/tmp/{{ mysql_server__jemalloc_rpm_file }}"
        state: present
        disable_gpg_check: true
      register: mysql_server__jemalloc_local_install_result
      when: mysql_server__jemalloc_install_result.failed
      ignore_errors: true

    - name: Check if jemalloc installation failed
      ansible.builtin.fail:
        msg: "Failed to install jemalloc"
      when: mysql_server__jemalloc_install_result.failed and mysql_server__jemalloc_local_install_result.failed

這段代碼主要是用于安裝 mysql_server 的依賴包,如果你在配置中設定了 fcs_mysql_use_jemalloc: 1,那么將會安裝 jemalloc,默認情況下,它會嘗試使用 yum 來安裝,如果 yum 安裝失敗,那么它會嘗試使用 dbops 自帶的 jemalloc 包,

原因是,預備的 jemalloc 包只有兩個版本:一個是針對 EL7,一個是針對 EL8,并沒有專門為國產作業系統準備的專用包,在國產作業系統上,你應該優先使用 yum 來安裝適合該系統的包,如果使用 yum 安裝失敗,你可以考慮使用 EL7 或者 EL8 的 jemalloc 包來進行兼容性安裝,

mysql_ansible/roles/mysql_server/templates/mysql.service.j2

[Service]
...
{% if fcs_mysql_use_jemalloc == 1 %}
{% if os_type in ['openEuler22','openEuler20'] %}
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.2"
{% else %}
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.1"
{% endif %}
{% endif %}

根據 yum 或者 rpm 包方式安裝 libjemalloc 后,不同作業系統的 libjemalloc.so 路徑可能會不同,我在服務配置里會做判斷和正確加載,

結語與反饋征集

如果你對 dbops 感興趣,歡迎你使用,并提出寶貴的建議或問題,如果在使用程序中遇到任何問題,或有任何改進的建議,歡迎在 dbops 的 gitee 專案頁面上提交 issue,你的反饋將幫助我不斷改進,使其更好地服務于所有開源資料庫用戶,

我會認真處理每一個提交的 issue,力求在第一時間給出解答或解決方案,同時,我們也歡迎你為 dbops 的開發做出貢獻,無論是提交代碼,還是參與討論,我都非常歡迎,感謝你的支持!


Enjoy GreatSQL ??

關于 GreatSQL

GreatSQL是由萬里資料庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本,

相關鏈接: GreatSQL社區 Gitee GitHub Bilibili

GreatSQL社區:

社區博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技術交流群:

微信:掃碼添加GreatSQL社區助手微信好友,發送驗證資訊加群

image-20221030163217640

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554835.html

標籤:其他

上一篇:es索引資料復制并增加條件和修改目標資料值

下一篇:返回列表

標籤雲
其他(160739) Python(38219) JavaScript(25491) Java(18216) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7245) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4589) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2435) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) 功能(1967) HtmlCss(1957) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1880) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • openEuler22+GreatSQL+dbops玩轉MGR

    > 芬達,《芬達的資料庫學習筆記》公眾號作者,開源愛好者,擅長 MySQL、ansible。 ## 背景 ### openEuler 是什么 openEuler22.03 LTS 是 openEuler 社區于 2022 年 3 月發布的開源作業系統(從系統版本的命名不難發現吧)。openEuler ......

    uj5u.com 2023-06-10 08:44:10 more
  • es索引資料復制并增加條件和修改目標資料值

    es操作同一個索引里資料的復制語法 復制資料: POST _reindex { "source": { "index": "source_index" }, "dest": { "index": "destination_index" } } 欄位值修改: POST source_index/_up ......

    uj5u.com 2023-06-10 08:44:03 more
  • 華為云新一代分布式資料庫GaussDB,給世界一個更優選擇

    摘要:與伙伴一起,共建繁榮開放的GaussDB資料庫新生態。 本文分享自華為云社區《華為云新一代分布式資料庫GaussDB,給世界一個更優選擇》,作者:華為云頭條。 6月7日,在華為全球智慧金融峰會2023上,華為常務董事、華為云CEO張平安以“一切皆服務,做好金融數字化云底座和使能器”為主題發表演 ......

    uj5u.com 2023-06-10 08:43:26 more
  • oracle 之存盤程序 begin ...... ; ...... end

    點擊查看代碼 ``` begin merge into ly_yjs_hxsj.T_XSGL_XSXX_CZRZ rz using ( select a.XS_ID xsid, xh, xm, '02' as bglx,'修改學生:'||xm||':學位操作撤銷學位證書號,原學位證書號:'|| BJ ......

    uj5u.com 2023-06-10 08:42:17 more
  • 【后端面經-資料庫】MySQL的存盤引擎簡介

    [TOC](【后端面經-資料庫】MySQL的存盤引擎簡介) # MySQL的存盤引擎 mysql主要有四類存盤引擎,目前主要使用InnoDB作為存盤引擎。 ## 0. 存盤引擎的查看和修改 - 查看當前資料庫的默認存盤引擎 ```sql show variables like 'default_st ......

    uj5u.com 2023-06-10 08:41:56 more
  • 資料庫事務隔離級別

    標準隔離級別 讀未提交、讀已提交、可重復讀、串行化 串行化 對事務中所有讀寫的資料加上讀鎖、寫鎖、范圍鎖。所以沖突的事務必須同步執行。 //console1 start transaction ; select * from transaction_test where `key`=1; updat ......

    uj5u.com 2023-06-10 08:41:52 more
  • 分布式資料庫 Join 查詢設計與實作淺析

    本文記錄 Mysql 分庫分表 和 Elasticsearch Join 查詢的實作思路,了解分布式場景資料處理的設計方案。文章從常用的關系型資料庫 MySQL 的分庫分表Join 分析,再到非關系型 ElasticSearch 來分析 Join 實作策略。逐步深入Join 的實作機制。 ......

    uj5u.com 2023-06-10 08:41:47 more
  • openEuler22+GreatSQL+dbops玩轉MGR

    > 芬達,《芬達的資料庫學習筆記》公眾號作者,開源愛好者,擅長 MySQL、ansible。 ## 背景 ### openEuler 是什么 openEuler22.03 LTS 是 openEuler 社區于 2022 年 3 月發布的開源作業系統(從系統版本的命名不難發現吧)。openEuler ......

    uj5u.com 2023-06-10 08:41:40 more
  • Hive執行計劃之什么是hiveSQL向量化模式及優化詳解

    Hive開啟向量化模式也是hiveSQL優化方法中的一種,可以提升hive查詢速率,也叫hive矢量化。 問題1:那么什么是hive向量化模式呢? 問題2:hive向量化什么情況下可以被使用,或者說它有哪些使用場景呢? 問題3:如何查看hive向量化使用的相關資訊? ## 1.什么是hive向量化模 ......

    uj5u.com 2023-06-10 08:41:25 more
  • Kafka關鍵原理

    # 日志分段切分條件 日志分段檔案切分包含以下4個條件,滿足其一即可: 1. 當前日志分段檔案的大小超過了broker端引數 `log.segment.bytes` 配置的值。`log.segment.bytes`引數的默認值為 `1073741824`,即1GB 2. 當前日志分段中訊息的最小時間 ......

    uj5u.com 2023-06-10 08:41:16 more