1. 程式人生 > 其它 >【MySQL】MGR高可用搭建

【MySQL】MGR高可用搭建

 

 

部署過程中各種問題可參考的解決方案

我遇見的搭建問題,解決方案參考下面諸多博主的帖子

 

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