1. 程式人生 > 資料庫 >MySQL 8.0.15配置MGR單主多從的方法

MySQL 8.0.15配置MGR單主多從的方法

一、簡介

MySQL Group Replication(簡稱MGR)字面意思是mysql組複製的意思,但其實他是一個高可用的叢集架構,暫時只支援mysql5.7和mysql8.0版本.

是MySQL官方於2016年12月推出的一個全新的高可用與高擴充套件的解決方案,提供了高可用、高擴充套件、高可靠的MySQL叢集服務.

也是mysql官方基於組複製概念並充分參考MariaDB Galera Cluster和Percona XtraDB Cluster結合而來的新的高可用叢集架構.

MySQL Group Replication是建立在基於Paxos的XCom之上的,正因為有了XCom基礎設施,保證資料庫狀態機在節點間的事務一致性,才能在理論和實踐中保證資料庫系統在不同節點間的事務一致性。

由一般主從複製概念擴充套件,多個節點共同組成一個數據庫叢集,事務的提交必須經過半數以上節點同意方可提交,在叢集中每個節點上都維護一個數據庫狀態機,保證節點間事務的一致性。

優點:

高一致性,基於原生複製及paxos協議的組複製技術.

高容錯性,有自動檢測機制,當出現宕機後,會自動剔除問題節點,其他節點可以正常使用(類似zk叢集),當不同節點產生資源爭用衝突時,會按照先到先得處理,並且內建了自動化腦裂防護機制.

高擴充套件性,可隨時線上新增和移除節點,會自動同步所有節點上狀態,直到新節點和其他節點保持一致,自動維護新的組資訊.

高靈活性,直接外掛形式安裝(5.7.17後自帶.so外掛),有單主模式和多主模式,單主模式下,只有主庫可以讀寫,其他從庫會加上super_read_only狀態,只能讀取不可寫入,出現故障會自動選主.

缺點:

還是太新,不太穩定,暫時效能還略差於PXC,對網路穩定性要求很高,至少是同機房做.

二、環境介紹

MySQL版本:8.0.15

資料庫埠:3306

叢集複製埠:33006

MGR外掛:group_replication.so

10.115.88.18:單主

10.115.88.19:從

10.115.88.20:從

三、安裝MySQL 8.0.15

3.1.1 下載地址:

https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.15-linux-glibc2.12-x86_64.tar

3.1.2: 安裝資料庫

解壓

tar -xf mysql-8.0.15-linux-glibc2.12-x86_64.tar -C /home/work

進入解壓目錄

cd /home/work

tar xf mysql-8.0.15-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.15-linux-glibc2.12-x86_64 mysql

rm -rf *.xz

授予許可權並建立資料目錄

cd /home/work

tar xf mysql-8.0.15-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.15-linux-glibc2.12-x86_64 mysql

rm -rf *.xz
 chown -R work:work mysql
 mkdir data
 chown work:work data
 cd /home/work/mysql

 cd /home/work mkdir /home/work/relaylog  chown -R work:work relaylog
 cd /home/work/mysql mkdir run chown -R work:work run

新增my.cnf檔案

[client]
default-character-set=utf8
socket=/home/work/mysql/run/mysql.sock

[mysqld]
user = work 
port = 3306
basedir=/home/work/mysql
datadir=/home/work/data
socket=/home/work/mysql/run/mysql.sock
pid-file=/home/work/mysql/run/mysqld.pid
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
lower_case_table_names = 1


server-id = 183306 
log-bin = mysql-bin
log-bin-index = binlogs.index
binlog_format = row
binlog_rows_query_log_events = on
binlog_checksum = none

slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 4
slave_preserve_commit_order = 1

#GITD
gtid_mode = on
enforce_gtid_consistency = 1
log-slave-updates = 1
binlog_gtid_simple_recovery = 1

relay_log = /home/work/relaylog/relay.log
relay-log-index = /home/work/relaylog/relay.index
master_info_repository = table
relay_log_info_repository = table

plugin_load="group_replication=group_replication.so"

#MGR
#GR配置項 基中loose字首表示若group Replication plugin未載入 mysql server仍明治維新啟動
transaction_write_set_extraction = XXHASH64 #對每個事務獲取write set,並且用XXHASH64演算法獲取hash值
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #組名,此處可拿select.uuid()生成
loose-group_replication_start_on_boot = off #在mysqld啟動時不自動啟動組複製
loose-group_replication_local_address = "10.115.88.18:33006" #本節點的IP地址和埠,注意該埠是組內成員之間通訊的埠,而不是MySQL對外提供服務的埠
loose-group_replication_group_seeds = "10.115.88.18:33006,10.115.88.19:33006,10.115.88.20:33006" #種子節點的IP和埠號,新成員加入到叢集的時候需要聯絡種子節點,啟動叢集的節點不使用該選項
loose-group_replication_bootstrap_group = off #關閉,如果開啟會造成腦裂 #是否啟動叢集,注意,該選項任何時候只能用於一個節點,通常情況下啟動叢集的時候使用,啟動之後需要關閉該選項

loose-group_replication_member_weight = 50 #權重選擇


skip-host-cache
skip-name-resolve
skip-external-locking
character-set-server=utf8
lower_case_table_names=1
event_scheduler=on
log_bin_trust_function_creators=on

max_connections = 3000 
external-locking = FALSE 
max_allowed_packet = 32M 
sort_buffer_size = 8M 
join_buffer_size = 2M 
thread_cache_size = 300 
#query_cache_size = 64M 
#query_cache_limit = 4M 
read_rnd_buffer_size = 8M

innodb_buffer_pool_size = 8096M
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1



[mysqld_safe]
log-error=/home/work/data/err.log

初始化資料庫

bin/mysqld --initialize --basedir=/home/work/mysql --lower-case-table-names=1 --datadir=/home/work/data/ --user=work

拷貝啟動檔案

cp support-files/mysql.server /etc/init.d/mysqld

新增環境變數

echo 'export PATH=/home/work/mysql/bin:$PATH' >>/etc/profile
source /etc/profile

資料庫啟動

/etc/init.d/mysqld start

修改資料庫密碼

alter user'root'@'localhost' IDENTIFIED BY 'dashuaige'; 

flush privileges;

四、配置MGR主

4.1.1 配置my.cnf檔案

修改binlog如下:

server-id = 103306
log-bin = mysql-bin
log-bin-index = binlogs.index
binlog_format = row
binlog_rows_query_log_events = on
binlog_checksum = none

slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 4
slave_preserve_commit_order = 1

修改GTID如下:

gtid_mode = on
enforce_gtid_consistency = 1
log-slave-updates = 1
binlog_gtid_simple_recovery = 1

relay_log = /home/work/relaylog/relay.log
relay-log-index = /home/work/relaylog/relay.index
master_info_repository = table
relay_log_info_repository = table

新增MGR外掛

plugin_load="group_replication=group_replication.so"

修改MGR引數

#GR配置項 基中loose字首表示若group Replication plugin未載入 mysql server仍明治維新啟動
transaction_write_set_extraction = XXHASH64 #對每個事務獲取write set,並且用XXHASH64演算法獲取hash值
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #組名,此處可拿select.uuid()生成
loose-group_replication_start_on_boot = off #在mysqld啟動時不自動啟動組複製
loose-group_replication_local_address = "10.115.88.18:33006" #本節點的IP地址和埠,注意該埠是組內成員之間通訊的埠,而不是MySQL對外提供服務的埠
loose-group_replication_group_seeds = "10.115.88.18:33006,10.115.88.20:33006" #種子節點的IP和埠號,新成員加入到叢集的時候需要聯絡種子節點,啟動叢集的節點不使用該選項
loose-group_replication_bootstrap_group = off #關閉,如果開啟會造成腦裂 #是否啟動叢集,注意,該選項任何時候只能用於一個節點,通常情況下啟動叢集的時候使用,啟動之後需要關閉該選項

loose-group_replication_member_weight = 50 #權重選擇

啟動資料庫

/etc/init.d/mysqld restart

4.1.2 配置每臺hosts主機解析

[root@bj1-10-115-88-18 mysql]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6
10.115.88.18 bj1-10-115-88-18
10.115.88.19 bj1-10-115-88-19
10.115.88.20 bj1-10-115-88-20

4.1.3 配置mgr第一個主節點

以下步驟在10.115.88.18主機上的mysql中執行

第一步:建立用於複製的使用者

set sql_log_bin=0;
create user repuser@'%' identified by 'repuser123';

grant replication slave,replication client on *.* to repuser@'%';

create user repuser@'127.0.0.1' identified by 'repuser123';

grant replication slave,replication client on *.* to repuser@'127.0.0.1';

create user repuser@'localhost' identified by 'repuser123';

grant replication slave,replication client on *.* to repuser@'localhost';

set sql_log_bin=1;

第二步:配置複製所使用的使用者

change master to master_user='repuser',master_password='repuser123' for channel 'group_replication_recovery';

第三步:安裝mysql group replication這個外掛

備註:如果在my.cnf裡寫寫入plugin_load="group_replication=group_replication.so" 這步就可以不用操作

install plugin group_replication soname 'group_replication.so';


通過show plugins;檢視是否安裝成功

第四步:建個群(官方點的說法就是初始化一個複製組

set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;

select * from performance_schema.replication_group_members;

MySQL 8.0.15配置MGR單主多從的方法

五、配置另外兩節點,從

以下步驟在所有從主機上的mysql中執行

第一步:建立用於複製的使用者

set sql_log_bin=0;
create user repuser@'%' identified by 'repuser123';

grant replication slave,master_password='repuser123' for channel 'group_replication_recovery';

第三步:安裝mysql group replication這個外掛

備註:如果在my.cnf裡寫寫入plugin_load="group_replication=group_replication.so" 這步就可以不用操作

install plugin group_replication soname 'group_replication.so';


通過show plugins;檢視是否安裝成功

第四步:加入前面建立好的複製組

start group_replication;
select * from performance_schema.replication_group_members;

如下出現以下報錯

MySQL 8.0.15配置MGR單主多從的方法

這是binlog導致的錯誤,執行以下

reset master;
start group_replication;
select * from performance_schema.replication_group_members;

檢視是MGR狀態:

MySQL 8.0.15配置MGR單主多從的方法

檢視MGR主的讀寫狀態

MySQL 8.0.15配置MGR單主多從的方法

檢視MGR兩臺從的讀寫狀態

MySQL 8.0.15配置MGR單主多從的方法

到此這篇關於MySQL 8.0.15配置MGR單主多從的方法的文章就介紹到這了,更多相關MySQL MGR單主多從內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!