Mysql Group Replication 集群搭建

主節(jié)點和從節(jié)點共同配置

1 修改配置文件


gtid_mode=ON

enforce_gtid_consistency=ON

# binlog_checksum 默認為CRC32

# 可以動態(tài)修改,但是在一個事務(wù)中無法修改

# 為CRC32時,master節(jié)點會對每個event記錄checksum值

# 設(shè)置為NONE時,只會在binlog中記錄event length(而不是checksum值)

# 修改此參數(shù)會開啟一個新的binlog文件,一個binlog文件中要么全都有checksums,要么全沒有

# 如果master中設(shè)置為其他不可識別的值,會導致slave節(jié)點設(shè)置binlog_checksum為None,并且會停止復(fù)制

# 如果想跟以前版本兼容,則需要明確的設(shè)置為NONE

binlog_checksum=NONE

# 修改slave_preserve_commit_order

# 官方文檔沒寫,并且默認為0

# 報錯 ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.

# 錯誤日志內(nèi)容為 2017-12-18T15:43:28.816078+08:00 35 [Warning] Plugin group_replication reported: 'Group Replication requires slave-preserve-commit-order to be set to ON when using more than 1 applier threads.'

slave_preserve_commit_order                = ON 

transaction_write_set_extraction=XXHASH64

# 可以修改名稱必須符合uuid格式 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=off # server啟動時不會自動開啟插件 loose-group_replication_local_address= "10.86.43.238:24901"

#集群中可以作為seed節(jié)點的列表,此參數(shù)不需要列出所有節(jié)點,只需要列出希望作為seed的節(jié)點即可 

# 如果多個節(jié)點同時加入group(不推薦,可能會超時失?。?,要確保新加如節(jié)點的seed節(jié)點是已經(jīng)在group中的,而不是也正在join

loose-group_replication_group_seeds= "10.86.43.239:24901,10.86.43.238:24901,10.86.43.209:24901"

loose-group_replication_bootstrap_group= off # 標記是否為bootstrap,一個集群只能有一個節(jié)點設(shè)置為on,否則會造成人工腦裂,而且bootstrap節(jié)點啟動集群建立后,應(yīng)該修改為off

# mgr默認通過機器名連接, 如果要使用ip需要在my.cnf中配置report-host為本機ip
report-host=10.86.43.239

2 配置復(fù)制權(quán)限

節(jié)點通過異步復(fù)制同步數(shù)據(jù),通過名為 group_replication_recovery 的 replication channel 進行數(shù)據(jù)恢復(fù)。

因此需要設(shè)置一個賬號權(quán)限,用于節(jié)點間復(fù)制。


set sql_log_bin=0;

 CREATE USER 'replication'@'%' IDENTIFIED BY '!4dkaRMz5';

 GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';

 FLUSH PRIVILEGES;

 SET SQL_LOG_BIN=1;

# 創(chuàng)建好賬號后,就可以指定 group_replication_recovery 作為master,以便下次啟動時可以從集群其他節(jié)點恢復(fù)數(shù)據(jù)

 CHANGE MASTER TO MASTER_USER='replication', MASTER_PASSWORD='!4dkaRMz5' FOR CHANNEL 'group_replication_recovery';

# Distributed recovery是節(jié)點加入集群的第一步,如果權(quán)限認證不通過,則無法加入集群,類似的如果無法識別hostname也會造成recovery process fail

#如果多個組成員將一個默認的主機名外部化到操作系統(tǒng)所設(shè)置的缺省主機名,則該成員有可能無法解析到正確的成員地址,而不能加入該組。在這種情況下,使用report_host配置由每個服務(wù)器外部化的唯一主機名。

3 安裝插件


mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';

# [https://dev.mysql.com/doc/refman/5.7/en/group-replication-launching.html](https://dev.mysql.com/doc/refman/5.7/en/group-replication-launching.html) (注意下)

The `mysql.session` user must exist before you can load Group Replication. `mysql.session` was added in MySQL version 5.7.19\. If your data dictionary was initialized using an earlier version you must run the [**mysql_upgrade**](https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html "4.4.7 mysql_upgrade — Check and Upgrade MySQL Tables") procedure. If the upgrade is not run, Group Replication fails to start with the error message There was an error when trying to access the server with user: mysql.session@localhost. Make sure the user is present in the server and that mysql_upgrade was ran after a server update..

因為公司打的MySQL包不包含mysql.session用戶,可以升級添加

/home/q/mysql/cellar/mysql57/bin/mysql_upgrade -h127.0.0.1 -uroot  -P port

也可以手動創(chuàng)建mysql.session用戶

GRANT SUPER ON *.* TO 'mysql.session'@'localhost' identified by password '*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE'; 

只在啟動集群起始節(jié)點執(zhí)行


 SET GLOBAL group_replication_bootstrap_group=ON;

 START GROUP_REPLICATION;

 SET GLOBAL group_replication_bootstrap_group=OFF;

# 查看集群節(jié)點信息

SELECT  *  FROM performance_schema.replication_group_members;

只在增加節(jié)點到集群時執(zhí)行


mysql>  START  GROUP_REPLICATION;

# 查看集群節(jié)點信息

SELECT  *  FROM performance_schema.replication_group_members;

# 節(jié)點加入gourp后,查看super_read_only

注意

  • 因為group_replication_ip_whitelist默認只允許統(tǒng)一網(wǎng)段機器,當搭建跨級房集群是需要配置此參數(shù)(joiner和donor都要配置才行)

  • 如果需要添加whitelist,只需要先停止同步,然后設(shè)置whitelist即可

stop group_replication;
 set global group_replication_ip_whitelist = '10.0.0.0/24,';
 start group_replication;
  • 需要配置機器名對應(yīng)ip,mgr默認通過機器名連接, 或者在my.cnf中配置report-host為本機ip
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容