MySQL組複製MGR(二)-- 組複製搭建

image


(一)主機操做
(1)主機信息
html

主機名稱 IP地址 操做系統版本 數據庫版本
mgr-node1 192.168.10.11 centos 7.4 ,64-bit mysql社區版 5.7.24
mgr-node2 192.168.10.12 centos 7.4  , 64-bit mysql社區版 5.7.24
mgr-node3 192.168.10.13 centos 7.4  ,64-bit mysql社區版 5.7.24

配置全部主機的hosts文件:node

[root@mgr-node1 data]# cat /etc/hosts
 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
 192.168.10.11 mgr-node1
 192.168.10.12 mgr-node2
 192.168.10.13 mgr-node3


(2)關閉全部節點的防火牆和selinux
mysql

# 關閉防火牆
# 查看防火牆狀態,正在運行
[root@mgr-node1 ~]# firewall-cmd --state
 running
# 關閉防火牆
 [root@mgr-node1 ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
 [root@mgr-node1 ~]# firewall-cmd --state
 not running
# 永久關閉防火牆
 [root@mgr-node1 ~]# systemctl disable firewalld.service
 Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
 Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#禁用selinux
 [root@mgr-node1 ~]# vi /etc/selinux/config
 # This file controls the state of SELinux on the system.
 # SELINUX= can take one of these three values:
 # enforcing - SELinux security policy is enforced.
 # permissive - SELinux prints warnings instead of enforcing.
 # disabled - No SELinux policy is loaded.
 SELINUX=disabled
 # SELINUXTYPE= can take one of three two values:
 # targeted - Targeted processes are protected,
 # minimum - Modification of targeted policy. Only selected processes are protected.
 # mls - Multi Level Security protection.
 SELINUXTYPE=targeted


(二)安裝MySQL數據庫
這裏在每一個節點安裝MySQL軟件,過程見:http://www.javashuo.com/article/p-krjrnwbf-k.html
參數文件:/etc/my.cnflinux

# 設置mysql的安裝目錄
basedir=/mysql
# 設置mysql數據庫的數據的存放目錄
datadir=/mysql/datasql


(三)組複製的要求數據庫

若是要啓用組複製,數據庫須要知足如下要求:bootstrap

(1)基礎要求centos

  • innodb存儲引擎:組複製表必須放在innodb存儲引擎中;
  • 主鍵:組複製的每一個表必須有主鍵或者等效的主鍵(列非空且惟一);
  • IPv4網絡:組複製僅支持IPv4網絡;
  • 網絡性能:組複製最好部署在很是近的集羣環境中。

(2)參數配置要求安全

  • 二進制日誌處於活動狀態(--log-bin)。組複製依賴於二進制日誌 ,須要開啓;
  • 副本集跟新日誌(--log-slave-updates) 。若是不設置該參數,那麼bin-log只會記錄直接在該庫上執行的SQL語句,由replication機制的SQL線程讀取relay-log而執行的SQL語句並不會記錄到bin-log。因爲組複製日誌來源不必定是主節點,也可能日誌來源於其它節點,因此即便不是在服務器自己上啓動的那些事務,每一個事務的副本也必須存在於每一個服務器上;
  • 二進制日誌格式(--binlog-format=row) ;
  • 關閉日誌校驗(--binlog-checksum=none) ;
  • 全局事物打開(gtid_mode=on) 。組複製使用全局事務標識符來精確跟蹤已在每一個服務器實例上提交了哪些事務,從而可以推斷出哪些服務器執行了可能與其餘位置已提交的事務發生衝突的事務;
  • 複製信息存儲庫(master_info_repository=TABLE 和 relay_log_info_repository=TABLE) 。複製應用程序須要將源和副本元數據寫入 mysql.slave_master_info和 mysql.slave_relay_log_info表。這樣能夠確保組複製插件對複製元數據具備一致的可恢復性和事務管理;
  • 事物寫集提取(--transaction-write-set-extraction=XXHASH64) 。以便在收集行以將其記錄到二進制日誌時,服務器也收集寫集。寫集基於每行的主鍵,而且是標籤的簡化且緊湊的視圖,該標籤惟一地標識已更改的行。而後,該標籤用於檢測衝突。
  • 小寫表格名稱(--lower-case-table-names) 。 在全部組成員上設置爲相同的值。設置1對於使用InnoDB存儲引擎是正確的 ,這對於組複製是必需的。請注意,該設置並不是在全部平臺上都是默認設置。
  • 多線程應用程序(Set slave_parallel_workers=N (where N is the number of parallel applier threads), slave_preserve_commit_order=1, and slave_parallel_type=LOGICAL_CLOCK) 。


(四)配置組複製(Group Replication)--採用多主模式
建立binlog日誌存放路徑,三個節點都要建立:服務器

[root@mgr-node1 etc]# mkdir -p /mysql/binlog/
[root@mgr-node1 etc]# chown -R mysql:mysql /mysql/binlog

(1)節點1配置組複製
(1.1)在節點1上添加以下參數,重啓實例

# 複製參數
 server_id = 1
 gtid_mode = on
 enforce_gtid_consistency = on
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 binlog_checksum=NONE
 log_bin = /mysql/binlog/mgr-node1-bin
 log-slave-updates = 1
 binlog_format = row
 sync-master-info = 1
 sync_binlog = 1
 skip_slave_start = 1

#group replication參數
transaction_write_set_extraction=XXHASH64   #以便在server收集寫集合的同時將其記錄到二進制日誌。寫集合基於每行的主鍵,而且是行更改後的惟一標識此標識將用於檢測衝突。
loose-group_replication_group_name="dc04ba77-bcf2-11ea-85bf-000c295111ae"  #組的名字能夠隨便起,但不能用主機的GTID! 全部節點的這個組名必須保持一致!
loose-group_replication_start_on_boot=off  #啓動mysql時不自動啓動組複製
loose-group_replication_local_address= "192.168.10.11:24901" #本機IP地址,24901用於接收來自其餘組成員的傳入鏈接
loose-group_replication_group_seeds= "192.168.10.11:24901,192.168.10.12:24901,192.168.10.13:24901" # 當前主機成員須要加入組時,Server先訪問這些種子成員中的一個,而後它請求從新配置以容許它加入組,
 # 須要注意的是,此參數不須要列出全部組成員,只需列出當前節點加入組須要訪問的節點便可。
loose-group_replication_bootstrap_group=off # 是否自動引導組。此選項只能在一個server實例上使用,一般是首次引導組時(或在整組成員關閉的狀況下),若是屢次引導,可能出現腦裂。
loose-group_replication_single_primary_mode=off #關閉單主模式的參數(本例測試時多主模式,因此關閉該項)
loose-group_replication_enforce_update_everywhere_checks=on #開啓多主模式的參數
loose-group_replication_ip_whitelist="192.168.10.0/24,127.0.0.1/8" # 容許加入組複製的客戶機來源的ip白名單


(1.2)建立組複製的用戶
組複製使用異步複製協議來實現分佈式恢復,在將組成員加入組以前對其進行同步,分佈式恢復過程依賴於group_replication_recovery通道,該通道用於組成員之間傳輸數據。所以,須要設置具備正確權限的複製用戶,以便組複製能夠創建成員到成員的數據恢復。
用於數據複製的用戶須要有REPLICATION_SLAVE特權,用戶的建立有2種方法:

方法一:第一個節點建立複製用戶,二進制日誌中捕獲建立用戶的過程,而後依靠分佈式恢復來複制建立用戶的語句。[注:奇怪的是,網上都不使用這種方法
方法二:禁用二進制日誌,避免將建立用戶傳播到其它實例,而後在每個節點建立複製用戶。
這裏演示第二種方法:

[root@mgr-node1 etc]# mysql -uroot -p123456
mysql> SET SQL_LOG_BIN=0;     # 關閉binlog
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY '123456';     # 建立組複製的用戶
Query OK, 0 rows affected, 1 warning (0.01 sec)
 mysql> FLUSH PRIVILEGES;
 Query OK, 0 rows affected (0.00 sec)
 mysql> reset master;
 Query OK, 0 rows affected (0.01 sec)
 mysql> SET SQL_LOG_BIN=1;     # 開啓binlog
 Query OK, 0 rows affected (0.00 sec)


(1.3)配置節點1上的組複製並安裝組複製插件

mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
 Query OK, 0 rows affected, 2 warnings (0.02 sec)
 mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
 Query OK, 0 rows affected (0.01 sec)
 mysql> SHOW PLUGINS;
 +----------------------------+----------+--------------------+----------------------+---------+
 | Name | Status | Type | Library | License |
 +----------------------------+----------+--------------------+----------------------+---------+
 | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
 | ... ... ... ... ... |
 | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
 +----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)

(1.4)開啓節點1上的組複製
首次啓動組的過程稱爲引導,使用group_replication_bootstrap_group系統變量來引導組,引導程序只能由一臺服務器執行一次,且只能執行一次,這就是group_replication_bootstrap_group參數不保存在配置文件中的緣由。假如將該參數保存在配置文件中,則在重啓時,server會自動引導具備相同名稱的第二個組,這將致使兩個不一樣的組具備相同的名稱。所以,爲了安全的引導組,請鏈接到第一個節點執行:

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
 Query OK, 0 rows affected (0.00 sec)
 mysql> START GROUP_REPLICATION;
 Query OK, 0 rows affected (2.10 sec)
 mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
 Query OK, 0 rows affected (0.00 sec)

在執行組引導及啓動組複製後,組已經建立出來了,咱們可使用下面命令查看組信息

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 533fe6ba-bcdf-11ea-9516-000c295111ae | mgr-node1 | 3306 | ONLINE |
 +---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)

 

(2)節點2配置組複製
(2.1)在節點2上添加以下參數,重啓實例

# 複製參數
 server_id = 2
 gtid_mode = on
 enforce_gtid_consistency = on
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 binlog_checksum=NONE
 log_bin = /mysql/binlog/mgr-node2-bin
 log-slave-updates = 1
 binlog_format = row
 sync-master-info = 1
 sync_binlog = 1
 skip_slave_start = 1

#group replication參數
transaction_write_set_extraction=XXHASH64 #以便在server收集寫集合的同時將其記錄到二進制日誌。寫集合基於每行的主鍵,而且是行更改後的惟一標識此標識將用於檢測衝突。
loose-group_replication_group_name="dc04ba77-bcf2-11ea-85bf-000c295111ae" #組的名字能夠隨便起,但不能用主機的GTID! 全部節點的這個組名必須保持一致!
loose-group_replication_start_on_boot=off #爲了不每次啓動自動引導具備相同名稱的第二個組,因此設置爲OFF。
loose-group_replication_local_address= "192.168.10.12:24901"
loose-group_replication_group_seeds= "192.168.10.11:24901,192.168.10.12:24901,192.168.10.13:24901"
 loose-group_replication_bootstrap_group=off
 loose-group_replication_single_primary_mode=off #關閉單主模式的參數(本例測試時多主模式,因此關閉該項)
loose-group_replication_enforce_update_everywhere_checks=on #開啓多主模式的參數
loose-group_replication_ip_whitelist="192.168.10.0/24,127.0.0.1/8" # 容許加入組複製的客戶機來源的ip白名單


(2.2)建立組複製的用戶

[root@mgr-node2 etc]# mysql -uroot -p123456
 mysql> SET SQL_LOG_BIN=0;     # 關閉binlog
 Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY '123456';     # 建立組複製的用戶
Query OK, 0 rows affected, 1 warning (0.01 sec)
 mysql> FLUSH PRIVILEGES;
 Query OK, 0 rows affected (0.00 sec)
 mysql> reset master;
 Query OK, 0 rows affected (0.01 sec)
 mysql> SET SQL_LOG_BIN=1;     # 開啓binlog
 Query OK, 0 rows affected (0.00 sec)

(2.3)配置節點2上的組複製並安裝組複製插件

mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
 Query OK, 0 rows affected, 2 warnings (0.02 sec)
 mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
 Query OK, 0 rows affected (0.01 sec)
 mysql> SHOW PLUGINS;
 +----------------------------+----------+--------------------+----------------------+---------+
 | Name | Status | Type | Library | License |
 +----------------------------+----------+--------------------+----------------------+---------+
 | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
 | ... ... ... ... ... |
 | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
 +----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)

(2.4)開啓節點2上的組複製
在第二個節點開啓組複製的時候,不用再設置引導參數

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.10 sec)

查看組成員,此時有2個節點已經加入了組

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
 | group_replication_applier | 533fe6ba-bcdf-11ea-9516-000c295111ae | mgr-node1 | 3306 | ONLINE |
 | group_replication_applier | 5ca45641-bcdd-11ea-918e-000c29fa726d | mgr-node2 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)


(3)節點3配置組複製
(3.1)在節點3上添加以下參數,重啓實例

# 複製參數
server_id = 3
 gtid_mode = on
 enforce_gtid_consistency = on
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 binlog_checksum=NONE
 log_bin = /mysql/binlog/mgr-node3-bin
 log-slave-updates = 1
 binlog_format = row
 sync-master-info = 1
 sync_binlog = 1
 skip_slave_start = 1

#group replication參數
transaction_write_set_extraction=XXHASH64 #以便在server收集寫集合的同時將其記錄到二進制日誌。寫集合基於每行的主鍵,而且是行更改後的惟一標識此標識將用於檢測衝突。
loose-group_replication_group_name="dc04ba77-bcf2-11ea-85bf-000c295111ae" #組的名字能夠隨便起,但不能用主機的GTID! 全部節點的這個組名必須保持一致!
loose-group_replication_start_on_boot=off #爲了不每次啓動自動引導具備相同名稱的第二個組,因此設置爲OFF。
loose-group_replication_local_address= "192.168.10.13:24901"
 loose-group_replication_group_seeds= "192.168.10.11:24901,192.168.10.12:24901,192.168.10.13:24901"
 loose-group_replication_bootstrap_group=off
 loose-group_replication_single_primary_mode=off #關閉單主模式的參數(本例測試時多主模式,因此關閉該項)
loose-group_replication_enforce_update_everywhere_checks=on #開啓多主模式的參數
loose-group_replication_ip_whitelist="192.168.10.0/24,127.0.0.1/8" # 容許加入組複製的客戶機來源的ip白名單


(3.2)建立組複製的用戶

[root@mgr-node3 etc]# mysql -uroot -p123456
 mysql> SET SQL_LOG_BIN=0;     # 關閉binlog
 Query OK, 0 rows affected (0.00 sec)
 mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY '123456';     # 建立組複製的用戶
Query OK, 0 rows affected, 1 warning (0.01 sec)
 mysql> FLUSH PRIVILEGES;
 Query OK, 0 rows affected (0.00 sec)
 mysql> reset master;
 Query OK, 0 rows affected (0.01 sec)
 mysql> SET SQL_LOG_BIN=1;     # 開啓binlog
 Query OK, 0 rows affected (0.00 sec)

(3.3)配置節點3上的組複製並安裝組複製插件

mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
 | Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
 | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
 | ... ... ... ... ... |
 | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)

(3.4)開啓節點3上的組複製

mysql> START GROUP_REPLICATION;
 Query OK, 0 rows affected (2.10 sec)

查看組成員,此時全部成員已經加入到了組

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
 | group_replication_applier | 533fe6ba-bcdf-11ea-9516-000c295111ae | mgr-node1 | 3306 | ONLINE |
 | group_replication_applier | 5ca45641-bcdd-11ea-918e-000c29fa726d | mgr-node2 | 3306 | ONLINE |
 | group_replication_applier | 62ad32e3-bcdd-11ea-9bbb-000c2978d7f6 | mgr-node3 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)


【完】

相關文章
相關標籤/搜索