1. 程式人生 > 其它 >MGR 單主模式組內滾動升級

MGR 單主模式組內滾動升級

MySQL 從 5.7 開始支援 MGR ,並不斷地進行改進與完善,比如從 8.0.14 新增了 group_replication_consistency 引數用於配置叢集一致性;從 8.0.16 新增 group_replication_consistency 引數來支援 auto-rejoin 功能,從 8.0.17 開始支援 clone 外掛並用於 MGR 的分散式恢復。本文將介紹如何從 MySQL 5.7.25 單主模式的 MGR 組內滾動升級到 MySQL 8.0.26 。

MGR 可以離線升級,也可以線上升級,我們通常都會選擇線上升級。而線上升級官方提供了3種方式:組內滾動升級、滾動遷移升級、滾動重複升級。我們這裡使用最簡單快速的組內滾動升級方式。

組內滾動升級的方式就是在一個 MGR 組內,其中的每個例項都依次從組中刪除、升級,然後重新加入組中。這種方式比較適合單主模式。而對於多主模式下的組,由於在組內滾動升級期間主節點的數量會減少,從而會導致寫可用性降低,這是因為如果一個成員加入一個組時,它執行的 MySQL 伺服器版本高於現有組成員執行的最低版本,它會自動保持只讀模式( super_read_only=ON ),從 MySQL 8.0.17 開始,當所有成員都升級到相同的版本時,它們都會自動更改回讀寫模式;而對於之前的版本,則需要在每個成員上手動設定 super_read_only=OFF 來將例項改回讀寫模式。

以下將大致介紹升級的步驟:

一. 確定MGR模式和版本

1. 確認MGR模式

show variables like '%group_replication_single_primary_mode%';

2. 確認主節點

select * from performance_schema.replication_group_members;

SHOW STATUS LIKE 'group_replication_primary_member';

3. 確認節點資料庫版本

#MySQL 5.7需要每個單獨確認

select @@version;

注意:前面的1. 2. 3. 步驟在 MySQL 8 裡面可只通過一條語句確認:

select * from performance_schema.replication_group_members;

二. 備份資料庫

升級之前必須要對資料庫進行全備,以便用於升級失敗後的回退。

三. 升級第一個從節點

1. 安裝mysql shell

##下載地址:https://dev.mysql.com/downloads/repo/yum/
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-shell

2. 檢查相容性並修復不相容的地方

mysqlsh -- util check-for-server-upgrade { --user=root --socket=/opt/mysql/data/3307/mysqld.sock } --target-version=8.0.26 --output-format=JSON --config-path=/opt/mysql/etc/3307/my.cnf

3. 停止組複製

stop group_replication;

4. 關閉資料庫

SET GLOBAL innodb_fast_shutdown=0;
systemctl stop mysqld_3306

5. 安裝新版本 MySQL

tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz -C /opt/mysql/base/

刪除原 base 路徑目錄或軟連線:

rm -rf /opt/mysql/base/5.7.25/

ln -s mysql-8.0.26-linux-glibc2.12-x86_64/ /opt/mysql/base/5.7.25

6. 使用 –upgrade=auto 啟動資料庫進行升級

/opt/mysql/base/5.7.25/bin/mysqld --defaults-file=/opt/mysql/etc/3306/my.cnf --daemonize --pid-file=/opt/mysql/data/3306/mysqld.pid --user=actiontech-mysql --socket=/opt/mysql/data/3306/mysqld.sock --port=3306 --upgrade=auto

注意:

升級完成後不用再進行重啟

升級完成之後,以後再啟動不需要再使用 –upgrade=auto 引數

7.節點手動加入叢集並開啟組複製

RESET SLAVE ALL;

set global group_replication_group_name="964fe9c5-03e4-11ec-8aa2-02000aba4034";

SET GLOBAL group_replication_local_address = "10.186.64.71:33061";

SET GLOBAL group_replication_group_seeds = "10.186.64.52:33061";

SET GLOBAL group_replication_bootstrap_group = OFF;

CHANGE MASTER TO MASTER_USER="repl",MASTER_PASSWORD="repl" FOR CHANNEL "group_replication_recovery";

START GROUP_REPLICATION;

select * from performance_schema.replication_group_members;

四. 以上述方式升級

五. 升級主節點

升級方式同升級從節點,

需要注意的是執行”stop group_replication;”之後,主節點會自動進行切換,要確認新的主節點的位置

注意修改:

SET GLOBAL group_replication_local_address = "10.186.64.71:33061";

SET GLOBAL group_replication_group_seeds = "10.186.64.52:33061";

六. 修改主節點主機

如果要將主節點修改回原主節點地址:

指定原主的server uuid(MEMBER ID)並切換

SELECT group_replication_set_as_primary('ab8900ff-03e4-11ec-b68a-02000aba4034');

七. 升級通訊協議

MGR 升級之後,通訊協議依舊是老版本的通訊協議,不會自動升級

1. 確認當前的老版本通訊協議版本

SELECT group_replication_get_communication_protocol();

2. 升級到目前 MGR 新版本的通訊協議

SELECT group_replication_set_communication_protocol("8.0.26");

3. 確認升級後的通訊協議版本

SELECT group_replication_get_communication_protocol();