【MySQL】MGR高可用搭建
阿新 • • 發佈:2022-03-09
部署過程中各種問題可參考的解決方案
我遇見的搭建問題,解決方案參考下面諸多博主的帖子
1、MGR部署後如何測試單點故障情況
https://www.cnblogs.com/diantong/p/11048767.html
2、找不到Group組埠如何解決
https://www.cnblogs.com/naocanzhishen/p/13540861.html
服務日誌描述:
2022-03-08T16:22:11.029417Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error testing to the local group communication engine instance.' 2022-03-08T16:22:11.089494Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33061'
3、使用已經安裝MYSQL的克隆虛擬機器,導致例項ID一致問題
https://blog.csdn.net/fly43108622/article/details/86089449
服務日誌描述:
'There is already a member with server_uuid a655ee5b-9ee6-11ec-b685-000c290bdef1. The member will now exit the group.'
4、節點Recovering狀態如何解決
https://blog.csdn.net/heroicpoem/article/details/106340155
MGR搭建流程
叢集的機器需要配置區分的主機名,並且在Host配置對應的對映
1、配置主機名
# 一號機器 echo centos7-1 > /etc/hostname # 二號機器 echo centos7-2 > /etc/hostname # 三號機器 echo centos7-3 > /etc/hostname
2、配置域名對映(所有機器配置)
vim /etc/hosts # 根據自己的機器IP進行設定 192.168.177.11 centos7-1 192.168.177.12 centos7-2 192.168.177.13 centos7-3
上述步驟完成後,使用ping命令測試一下是否能夠ping通
以此檢查網路狀態和配置是否生效
確認主從關係
centos7-1 | 主庫 - A |
centos7-2 | 從庫 - B |
centos7-3 | 從庫 - C |
然後以此配置各自的MYSQL配置檔案(my.cnf)
1、主庫配置追加這些配置項
MGR需要一個組群埠,所以這裡使用的是33061埠
下面一項是加上了從庫的地址和埠一起配置
# - - - - - - - - -[ 主庫追加配置 ] - - - - - - - - - - - # server_id=1 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE transaction_write_set_extraction=XXHASH64 default_authentication_plugin=mysql_native_password plugin_dir=/usr/lib64/mysql/plugin loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address="192.168.177.11:33061" loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" loose-group_replication_bootstrap_group=OFF
2、從庫1的配置項
# - - - - - - - - -[ 從庫1追加配置 ] - - - - - - - - - - - # server_id=2 plugin_dir=/usr/lib64/mysql/plugin default_authentication_plugin=mysql_native_password gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE loose-group_replication_recovery_get_public_key=ON loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address="192.168.177.12:33061" loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" loose-group_replication_bootstrap_group=OFF
3、從庫2的配置項
# - - - - - - - - -[ 從庫2追加配置 ] - - - - - - - - - - - # # 設定唯一的伺服器編號 server_id=3 plugin_dir=/usr/lib64/mysql/plugin default_authentication_plugin=mysql_native_password gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE # 這個引數決定primary節點到secondary節點的請求是否為基於 RSA 金鑰對的密碼交換所需的公鑰 loose-group_replication_recovery_get_public_key=ON loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856" loose-group_replication_start_on_boot=OFF # 設定本機地址 loose-group_replication_local_address="192.168.177.13:33061" loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" loose-group_replication_bootstrap_group=OFF
各個配置引數說明:
# 使用mysql_native_password密碼策略,防止navicat連不上mysql8 default_authentication_plugin=mysql_native_password # 設定MySQL外掛所在目錄,因為MGR基於外掛,所以必須設定外掛路徑 plugin_dir=/usr/lib64/mysql/plugin # 伺服器編號,Master=1 server_id=1 # 開啟binlog的GTID模式 gtid_mode=ON # 開啟後MySQL只允許能夠保障事務安全,並且能夠被日誌記錄的SQL語句被執行 enforce_gtid_consistency=ON # 關閉binlog校驗 binlog_checksum=NONE # 定義用於事務期間雜湊寫入提取的演算法,組複製模式下必須設定為 XXHASH64。 17 transaction_write_set_extraction=XXHASH64 # 確定組複製恢復時是否應該應用 SSL,通常設定為“開”,但預設設定為“關”。 loose‐group_replication_recovery_use_ssl=ON # 該伺服器的例項所在複製組的名稱,必須是有效的 UUID,所有節點必須相同。 loose‐group_replication_group_name="bbbbbbbb‐bbbb‐cccc‐dddd‐eeeeeeeeeeee" # 確定伺服器是否應該在伺服器啟動期間啟動組複製。 loose‐group_replication_start_on_boot=OFF 2425 # 大坑2: # 為複製組中其他的成員提供的網路地址,指定為“主機:埠”的格式化字串。 # 很多人想當然認為埠應該是3306,起始不然,MGR需要開啟新埠24901同步交換 # 所以這裡不要寫錯,同時,前面我們配置了hosts檔案做了主機名與IP的對映,這裡直接寫主機名即可 loose‐group_replication_local_address="n0:24901" # 用於建立新成員到組的連線組成員列表。 # 這個列表指定為由分隔號間隔的組成員網路地址列表,類似 host1:port1、host2:port2 的格式。 # 同樣採用n0~n2的主機名替代 loose‐group_replication_group_seeds="n0:24901,n1:24901,n2:24901" # 配置此伺服器為引導組,這個選項必須僅在一臺伺服器上設定, # 並且僅當第一次啟動組或者重新啟動整個組時。成功引導組啟動後,將此選項設定為關閉。 loose‐group_replication_bootstrap_group=OFF
配置完成後重啟各自的服務
# 所有配置完成後重啟服務
systemctl restart mysqld
關閉Linux安全服務(全部機器執行)
# 關閉SELinux setenforce 0
# 重啟
reboot
安裝此依賴,並開發宣告的33061埠(全部機器執行)
yum install -y policycoreutils-python semanage port -a -t mysqld_port_t -p tcp 33061
登入每一個庫例項,執行下列SQL
-- 建立副本賬號 CREATE USER 'REPL'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; -- 賦予所有庫的主從同步副本許可權 GRANT REPLICATION SLAVE ON *.* TO 'REPL'@'%'; -- 清空BIN日誌 RESET MASTER; -- 安裝MGR外掛 INSTALL PLUGIN group_replication SONAME 'group_replication.so'; -- 檢查是否安裝成功 SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'group_replication'; +-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+ | PLUGIN_NAME | PLUGIN_VERSION | PLUGIN_STATUS | PLUGIN_TYPE | PLUGIN_TYPE_VERSION | PLUGIN_LIBRARY | PLUGIN_LIBRARY_VERSION | PLUGIN_AUTHOR | PLUGIN_DESCRIPTION | PLUGIN_LICENSE | LOAD_OPTION | +-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+ | group_replication | 1.1 | ACTIVE | GROUP REPLICATION | 1.4 | group_replication.so | 1.10 | Oracle Corporation | Group Replication (1.1.0) | GPL | ON | +-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+ 1 row in set (0.02 sec)
進行組網資料同步
首先主庫開始進行副本組初始化
# - - - - - - - - -[ 主庫操作 ] - - - - - - - - - - - # # 我們在 primary.cnf 配置檔案中 # 把 group_replication_bootstrap_group 引數設定成 OFF, # 在 primary 伺服器啟動時並不會直接啟動複製組, # 通過下面的命令動態的開啟複製組是我們的叢集更安全。 -- 開啟複製組 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
注意開啟組副本SQL後的返回資訊
檢查服務是否報錯
-- 檢查日誌 tail ‐f /var/log/mysqld.log
然後從庫開始加入到 主庫初始化的副本中
# - - - - - - - - -[ 從庫1 & 從庫2 操作 ] - - - - - - - - - - - # #指定主從賬戶與指定通訊頻道 CHANGE MASTER TO MASTER_USER="REPL", MASTER_PASSWORD="123456" FOR CHANNEL 'group_replication_recovery'; #開啟組網資料同步 START GROUP_REPLICATION;
檢查組副本的狀態:
# 驗證是否加入, 當所有節點為ONLINE狀態時,才算成功 SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ | group_replication_applier | a655ee5b-9ee6-11ec-b685-000c290bdef1 | centos7 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom | | group_replication_applier | b1ae5b39-9efd-11ec-b67d-000c29dd2622 | centos7 | 3306 | RECOVERING | SECONDARY | 8.0.27 | XCom | | group_replication_applier | b552f59c-9efd-11ec-b52d-000c29eb138a | centos7 | 3306 | RECOVERING | SECONDARY | 8.0.27 | XCom | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ 3 rows in set (0.02 sec)
所有節點成員均為ONLINE狀態才表示MGR部署成功
像上面的RECOVERING狀態,需要翻看該節點的服務日誌,檢查錯誤原因
-- 檢查日誌 tail ‐f /var/log/mysqld.log