1. 程式人生 > >MySQL Group Replication增加節點

MySQL Group Replication增加節點

在上一篇文章中,我們大概介紹了Mysql Group Replication的構架及叢集搭建步驟。那麼我們知道,一組優秀的叢集環境有一個很必要的特性,那就是可拓展性。Group Replication的拓展性怎麼樣呢?我們設定如下幾個場景,來看看Group Replicaiton是否方便拓展:

  1. 總執行的事務量較少,而且所有的binlog都保留完整。
  2. 總事務量較少,binlog只保留部分。
  3. 總事務量很大,binlog保留完整。
  4. 總事務量很大,binlog只保留部分。

我們在對以上幾種場景進行分析

  1. 總事務量較少,binlog保留完整。那麼我們可以直接應用所有binlog,來建立一個和現有環境相同的例項。
  2. 總事務量較少,binlog保留部分。此場景中binlog丟失,無法應用所有binlog來建立一個和現有環境相同的例項。那麼我們要得到一個和現有環境相同的例項,只有複製一個現有環境中的例項,然後再將這個例項新增到叢集。複製的方法我能想到的有如下幾種:

    • mysqldump
    • xdbbackup
  3. 總事務量較多,binlog保留完整。我們可以和第一種環境一樣,應用所有binlog來建立新例項。但是事務較多應用binlog需要非常多的時間。為了提高效率,我們還是採用複製例項的方式來建立新例項。
  4. 總事務較多,binlog只保留部分。這個場景和第二個場景差不多,我們也只能採用複製例項的方式來建立新的例項。

經過分析總我們有兩種方式來向Group Replication叢集中加入新節點:
- 直接加入
- 複製例項後再加入

接下來逐個看一下怎麼加入

節點資訊

servername ip port group port
server01 127.0.0.1 3306 6606
server02 127.0.0.1 3307 6607
server03 127.0.0.1 3308 6608
==server04== ==127.0.0.1== ==3309== ==6609==

直接加入

安裝mysql5.7.15,並安裝Group Replication

配置引數。

[my4.cnf]

[mysqld]
#base config
server-id = 4
basedir=/usr/local/mysql5.7/
datadir=/usr/local/mysql5.7/data03
user=mysql
explicit_defaults_for_timestamp
socket=mysql4.sock
port = 3309

#binlog
log-bin=mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
master-info-repository = TABLE
relay-log-info-repository = TABLE
binlog-checksum = NONE

#group replication
transaction-write-set-extraction = XXHASH64
group_replication_start_on_boot = OFF
group_replication_bootstrap_group = OFF
group_replication_group_name = 0c6d3e5f-90e2-11e6-802e-842b2b5909d6
group_replication_local_address = '127.0.0.1:6609'
group_replication_group_seeds = '127.0.0.1:6606,127.0.0.1:6607,127.0.0.1:6609'

啟動mysql

[server04]

./bin/mysqld --defaults-file=/usr/local/mysql5.7/my4.cnf

加入叢集

修改原有節點member資訊

[server1]

mysql> set global group_replication_group_seeds='127.0.0.1:6607,127.0.0.1:6608,127.0.0.1:6609';

[server2]

mysql> set global group_replication_group_seeds='127.0.0.1:6606,127.0.0.1:6608,127.0.0.1:6609';

[server3]

mysql> set global group_replication_group_seeds='127.0.0.1:6606,127.0.0.1:6607,127.0.0.1:6609';
在新節點上建立複製使用者
mysql>SET SQL_LOG_BIN=0;
mysql>CREATE USER [email protected]'%';
mysql>GRANT REPLICATION SLAVE ON *.* TO mysql>[email protected]'%' IDENTIFIED BY 'rpl_pass';
mysql>FLUSH PRIVILEGES;
mysql>SET SQL_LOG_BIN=1;
啟動新節點的group_replication
mysql>CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
mysql>start group_replication;
檢視叢集節點狀態
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 0aab37dc-911c-11e6-ab03-842b2b5909d6 | mser01      |        3308 | ONLINE       |
| group_replication_applier | 18772df6-91ee-11e6-a00e-842b2b5909d6 | mser01      |        3309 | ONLINE       |
| group_replication_applier | a876d35e-9110-11e6-a365-842b2b5909d6 | mser01      |        3306 | ONLINE       |
| group_replication_applier | b34df071-911a-11e6-9796-842b2b5909d6 | mser01      |        3307 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
4 rows in set (0.00 sec)

可以發現[server4]已經成功加入到叢集。

注:如果在原有叢集中建立複製使用者時沒有將SQL_LOG_BIN關閉,那麼在新節點中就不需要執行建立複製使用者這個步驟。

複製例項後加入

安裝mysql5.7.15,並安裝Group Replication

配置引數。

[my4.cnf]

[mysqld]
#base config
server-id = 4
basedir=/usr/local/mysql5.7/
datadir=/usr/local/mysql5.7/data03
user=mysql
explicit_defaults_for_timestamp
socket=mysql4.sock
port = 3309

#binlog
log-bin=mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
master-info-repository = TABLE
relay-log-info-repository = TABLE
binlog-checksum = NONE

#group replication
transaction-write-set-extraction = XXHASH64
group_replication_start_on_boot = OFF
group_replication_bootstrap_group = OFF
group_replication_group_name = 0c6d3e5f-90e2-11e6-802e-842b2b5909d6
group_replication_local_address = '127.0.0.1:6609'
group_replication_group_seeds = '127.0.0.1:6606,127.0.0.1:6607,127.0.0.1:6609'

複製例項並加入叢集

mysqldump
匯出資料

在現有Group Replication叢集中找一個節點將所有資料使用mysqldump匯出:

bin/mysqldump -uroot -p111111 -h127.0.0.1 -P3308 -x --triggers --routines --events --all-databases --master-data=2 > /tmp/bobo.sql

注:1、在測試過程中使用–single-transaction會報如下錯誤:


mysqldump: Couldn't execute 'SAVEPOINT sp': The MySQL server is running with the --transaction-write-set-extraction!=OFF option so it cannot execute this statement (1290)

2、–all-database是必須的麼?這個還要研究一下

在新節點執行sql檔案
[[email protected] mysql5.7]# bin/mysql -uroot -p111111 -h127.0.0.1 -P3309 < /tmp/bobo.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

可以看到語句執行時有1840錯誤,這裡只需要重新設定一下master就可以了:

[root@mser01 mysql5.7]# bin/mysql -uroot -p111111 -h127.0.0.1 -P3309 -e 'reset master'

再次執行bobo.sql語句就能執行成功了。

注:當你執行bobo.sql語句時在日誌中能看到如下日誌,那麼就說明新節點GTID初始的值設定成功,在start group_replication是就能順利開啟了:

2016-10-17T07:12:56.281059Z 5 [Note] @@GLOBAL.GTID_PURGED was changed from '' to '0aab37dc-911c-11e6-ab03-842b2b5909d6:1,
0c6d3e5f-90e2-11e6-802e-842b2b5909d6:1-37,
a876d35e-9110-11e6-a365-842b2b5909d6:1-3,
b34df071-911a-11e6-9796-842b2b5909d6:1'.
2016-10-17T07:12:56.281075Z 5 [Note] @@GLOBAL.GTID_EXECUTED was changed from '' to '0aab37dc-911c-11e6-ab03-842b2b5909d6:1,
0c6d3e5f-90e2-11e6-802e-842b2b5909d6:1-37,
a876d35e-9110-11e6-a365-842b2b5909d6:1-3,
b34df071-911a-11e6-9796-842b2b5909d6:1'.
修改原有節點member資訊

[server1]

mysql> set global group_replication_group_seeds='127.0.0.1:6607,127.0.0.1:6608,127.0.0.1:6609';

[server2]

mysql> set global group_replication_group_seeds='127.0.0.1:6606,127.0.0.1:6608,127.0.0.1:6609';

[server3]

mysql> set global group_replication_group_seeds='127.0.0.1:6606,127.0.0.1:6607,127.0.0.1:6609';
加入Group Replication叢集
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.15 sec)

mysql> start group_replication;
Query OK, 0 rows affected (2.44 sec)

在日誌中出現類似如下資訊就說明加入成功了:

2016-10-17T07:14:12.469000Z 0 [Note] Plugin group_replication reported: 'This server was declared online within the replication group'
檢視叢集資訊
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 0aab37dc-911c-11e6-ab03-842b2b5909d6 | mser01      |        3308 | ONLINE       |
| group_replication_applier | 13a2f2e9-943f-11e6-b910-842b2b5909d6 | mser01      |        3309 | ONLINE       |
| group_replication_applier | a876d35e-9110-11e6-a365-842b2b5909d6 | mser01      |        3306 | ONLINE       |
| group_replication_applier | b34df071-911a-11e6-9796-842b2b5909d6 | mser01      |        3307 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
4 rows in set (0.00 sec)
xtrabackup
安裝xtrabackup
備份資料庫
innobackupex --defaults-file=/usr/local/mysql5.7/my2.cnf --user='root' --password='111111' --socket=/usr/local/mysql5.7/data02/mysql2.sock /tmp/backup/

執行之後可以看到在/tmp/backup中有一個2016-10-17_15-52-11資料夾,這個資料夾就是備份檔案。並且在資料夾中可以看到binlog的相關資訊

[[email protected] 2016-10-17_15-52-11]# cat xtrabackup_binlog_info 
mysql-bin.000009    1198    0aab37dc-911c-11e6-ab03-842b2b5909d6:1,
0c6d3e5f-90e2-11e6-802e-842b2b5909d6:1-47,
a876d35e-9110-11e6-a365-842b2b5909d6:1-3,
b34df071-911a-11e6-9796-842b2b5909d6:1
還原資料庫

將2016-10-17_15-52-11資料夾拷貝到/usr/local/mysql5.7中命令為data04,並修改使用者組:

[root@mser01 mysql5.7]# cp -r /tmp/backup/2016-10-17_15-52-11/  ./data04
[root@mser01 mysql5.7]# chown -R mysql:mysql data04/
啟動新節點

[server04]

./bin/mysqld --defaults-file=/usr/local/mysql5.7/my4.cnf
修改原有節點member資訊

[server1]

mysql> set global group_replication_group_seeds='127.0.0.1:6607,127.0.0.1:6608,127.0.0.1:6609';

[server2]

mysql> set global group_replication_group_seeds='127.0.0.1:6606,127.0.0.1:6608,127.0.0.1:6609';

[server3]

mysql> set global group_replication_group_seeds='127.0.0.1:6606,127.0.0.1:6607,127.0.0.1:6609';
加入叢集
mysql> set @@GLOBAL.GTID_PURGED='0aab37dc-911c-11e6-ab03-842b2b5909d6:1, 0c6d3e5f-90e2-11e6-802e-842b2b5909d6:1-47, a876d35e-9110-11e6-a365-842b2b5909d6:1-3, b34df071-911a-11e6-9796-842b2b5909d6:1';
ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
mysql> reset master;
Query OK, 0 rows affected (0.07 sec)

mysql> set @@GLOBAL.GTID_PURGED='0aab37dc-911c-11e6-ab03-842b2b5909d6:1, 0c6d3e5f-90e2-11e6-802e-842b2b5909d6:1-47, a876d35e-9110-11e6-a365-842b2b5909d6:1-3, b34df071-911a-11e6-9796-842b2b5909d6:1';
Query OK, 0 rows affected (0.01 sec)

mysql> start group_replication;
Query OK, 0 rows affected (2.01 sec)
注:因為是整庫備份,所有使用者資訊都完整儲存可以不使用CHANGE MASTER語句。

在日誌中出現類似如下資訊就說明加入成功了:

2016-10-17T07:14:12.469000Z 0 [Note] Plugin group_replication reported: 'This server was declared online within the replication group'
檢視叢集資訊
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 0aab37dc-911c-11e6-ab03-842b2b5909d6 | mser01      |        3308 | ONLINE       |
| group_replication_applier | 13a2f2e9-943f-11e6-b910-842b2b5909d6 | mser01      |        3309 | ONLINE       |
| group_replication_applier | a876d35e-9110-11e6-a365-842b2b5909d6 | mser01      |        3306 | ONLINE       |
| group_replication_applier | b34df071-911a-11e6-9796-842b2b5909d6 | mser01      |        3307 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
4 rows in set (0.00 sec)

總結

從上面三個例子來對比:
1、保留所有binlog直接加入配置最簡單方便,出現問題的概率也比較小,但是對於資料量達到一定程度時,直接加入需要消耗的時間會相當長。
2、使用mysqldump,在binlog不全時十分有用,但是因為mysqldump匯入資料時實際上也是執行語句,時間上並不能提高很多。而且在匯出資料時需要鎖表(目前single-transcation模式下未測試通過),會影響業務的正常執行。
3、使用xtrabackup備份還原,此方法效率最高,而且xtrabackup備份innodb引擎的表時不會鎖表,不影響正常使用。但是相對於前面兩種方式xtrabackup更佔磁碟空間。

思考

現有的普通複製場景是否可以轉換成Group Replicaiton呢?下一篇將針對這個問題進行測試。

相關推薦

MySQL Group Replication增加節點

在上一篇文章中,我們大概介紹了Mysql Group Replication的構架及叢集搭建步驟。那麼我們知道,一組優秀的叢集環境有一個很必要的特性,那就是可拓展性。Group Replication的拓展性怎麼樣呢?我們設定如下幾個場景,來看看Group Re

MySQL Group Replication 動態新增成員節點

1. 背景 前面文章已經介紹如何部署MySQL GR 的兩種模式: 在前面的部署裡面,因為是預先知道需要部署的組節點規模,所以我們能夠在my.cnf裡面體現出組成員資訊。但是,前面的部署並沒有體現出動態新增組節點。 這篇文章介紹如何動態地往一個組裡面新

MySQL group replication介紹

group replication“MySQL group replication”group replication是MySQL官方開發的一個開源插件,是實現MySQL高可用集群的一個工具。第一個GA版本正式發布於MySQL5.7.17中;想要使用group replication只需要從官網上下載MySQ

MySQL group replication

出現 上下 art 處理 自動創建 mit 排序 主從 同時 本篇文章主要講解MySQL group replication介紹,文中有關MySQL,group的內容,希望對大家有所幫助。 “MySQL group replication” group replicatio

Mysql Group Replication 簡介及單主模式組復制配置【轉】

ror ipv4 mysql命令 value tail force action dmi where 一 Mysql Group Replication簡介 Mysql Group Replication(MGR)是一個全新的高可用和高擴張的MySQL集群服務。

Mysql Group Replication 簡析

group http 9.png tex 圖片 關於 clas png src 前段時間做了組內分享,寫的關於mysql Group Replication 文章             3, 高擴展     

MySQL Group Replication(多主同步復制MGR)

update mod src xtra sla class replicat local trac 開啟replication配置: server-id=1 #標識服務器唯一 log-bin=mys

MySQL Group Replication (MGR) 安裝

exit ever 信息采集 false 操作記錄 create .so lob 一個 MySQL Group Replication 安裝 192.168.10.65192.168.10.66192.168.10.67 OS : CentOS 7.4mysql soft

MySQL Group Replication(組複製MGR)

MGR基本要求: 1、InnoDB儲存引擎 2、主鍵,每個表必須具有已定義的主鍵或等效的主鍵,其中等效項是非null唯一鍵 3、IPv4網路 4、網路效能 5、開啟二進位制日誌並開啟GTID模式 6、mysql版本在5.7.17以上 MGR限制: 1、組複製不支援mysiam引擎 2、不支援

Mysql group replication

(每臺)安裝元件: 注意:在單個主機上執行的多例項。需要在my.cnf中增加此選項 放在每個選項[mysqld3306]的下面 :report_host=127.0.0.1 並且:skip-name-resolve mysql > INSTALL PLUG

Mysql group replication(MGR)實現高可用切換應用無感知方案的思考

一開始考慮使用ProxySQL+MGR來實現資料庫切換應用無感知方向,考慮了可能的兩種部署模型的優缺點:ProxySQL部署的兩種模型:1、靠近應用端方式:在應用伺服器上直接部署優點:  A、每個應用伺服器有自己的配置 ,配置內容簡單,不容易相互影響故障,變更故障風險最小 

MySQL Group Replication 介紹

2016-12-12,一個重要的日子,mysql5.7.17 GA版釋出,正式推出Group Replication(組複製) 外掛,通過這個外掛增強了mysql原有的高可用方案(原有的Replication方案),提供了重要的特性——多寫,保證組內高可用,確保

Mysql Group Replication關閉和啟動所有的組成員的注意點

由於的我mgr建立在虛擬機器上面(即使是正式環境,如果計劃內的停機或者斷電都需要關閉所有的節點),如何關閉所有的組成員,關閉的順序還是比較重要的。我的環境是一個primary,多個slave的架構,qht131為parmary,其它qht132,qht133,qht134為s

Centos6.8 下 部署Mysql組複製(MySQL Group Replication)之多主模式(5.7新特性)

MySQL Group Replication(簡稱MGR)是MySQL官方於2016年12月推出的一個全新的高可用與高擴充套件的解決方案。MySQL組複製提供了高可用、高擴充套件、高可靠的MySQL叢集服務。 1.關於MGR介紹 1.1提供的特性:

MySQL Group Replication 技術點

mysql group replication,組複製,提供了多寫(multi-master update)的特性,增強了原有的mysql的高可用架構。mysql group replication基於mysql外掛架構實現,本身就是一個mysql外掛。 提供

配置Mysql Group Replication遇到的問題筆記

一 在配置第一臺伺服器 START GROUP_REPLICATION; 後出現以下問題: ERROR 3092 (HY000): The server is not configured properly to be an active mem

Mysql Group Replication 簡介及單主模式組複製配置

mysql> create database test;2017-03-31T23:23:45.535115Z8[Note]Plugin group_replication reported:'Primary had applied all relay logs, disabled conflict d

MySQL Group Replication初測

MySQL Group Replication 對測試版(on labs)的Group Replication的第一印象:這個MySQL外掛讓多主結構的MySQL叢集能夠進行全更新(update everywhere)。 它糅合了分散式系統(比如組通訊)

mysql group replication(MGR)群組複製相關資料

配置的叢集成員,通訊時會把主機名與ip地址進行對應,最好是在/etc/hosts中設定好,如果沒有設定,則會碰到如下錯誤:2018-05-02T13:04:32.437256Z 10 [Note] 'CHANGE MASTER TO FOR CHANNEL 'group_re

MySQL Group Replication [Multi-Primary Mode] 詳細搭建部署過程

1,關於MySQL Group Replication基於組的複製(Group-basedReplication)是一種被使用在容錯系統中的技術。Replication-group(複製組)是由能夠相互通訊的多個伺服器(節點)組成的。在通訊層,Groupreplication