天天看點

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

MySQL Group Replication(簡稱MGR)是MySQL官方于2016年12月推出的一個全新的高可用與高擴充的解決方案。MySQL組複制提供了高可用、高擴充、高可靠的MySQL叢集服務。
           

1.關于MGR介紹

1.1提供的特性:

多寫,寫沖突檢測
良好的擴充能力,可動态增删節點,組成員自動管理
組内高可用
確定組内資料最終一緻性【重要】(通過分布式協定和分布式recovery機制保證)
           

1.2組複制的兩種模式

在單主模式下,組複制具有自動選主功能,每次隻有一個 server成員接受更新。
在多主模式下,所有的 server 成員都可以同時接受更新.
           

1.3組複制的限制

僅支援InnoDB表,并且每張表一定要有一個主鍵,用于做write set的沖突檢測;
必須打開GTID特性,二進制日志格式必須設定為ROW,用于選主與write set
COMMIT可能會導緻失敗,類似于快照事務隔離級别的失敗場景
目前一個MGR叢集最多支援9個節點
不支援外鍵于save point特性,無法做全局間的限制檢測與部分部分復原
二進制日志不支援binlog event checksum
           

1.4MySQL組複制協定

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

上圖描述了MySQL組複制協定。

2.安裝部署

2.1 環境介紹

三台伺服器(centos6.8)安裝mysql5.7.19版本,關于mysql安裝參考我的另一個文章。

伺服器分别為:

192.168.1.208

192.168.1.211

192.168.1.212

伺服器 端口号 資料及日志目錄 Group_replication 通訊端口
192.168.1.208 3306 /usr/local/mysql/mysql/{data,logs,tmp} 33061
192.168.1.211 3306 /usr/local/mysql/mysql/{data,logs,tmp} 33061
192.168.1.212 3306 /usr/local/mysql/mysql/{data,logs,tmp} 33061

①.分别在三台伺服器添加host

vi /etc/hosts

192.168.1.208 mgr208

192.168.1.212 mgr212

192.168.1.211 mgr211

2.2更改mysql配置檔案my.cnf

[client]
port = 3306
socket = /usr/local/mysql/tmp/mysql.sock

[mysqld]
port = 3306
socket = /usr/local/mysql/tmp/mysql.sock
back_log = 80
basedir = /usr/local/mysql
tmpdir = /tmp
datadir = /usr/local/mysql/data
pid-file=/usr/local/mysql/mysqld.pid 
#-------------------gobal variables------------#
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log-bin = /usr/local/mysql/log/mysql-bin
transaction_write_set_extraction = XXHASH64  #以便在server收集寫集合的同時将其記錄到二進制日志。寫集合基于每行的主鍵,并且是行更改後的唯一辨別此辨別将用于檢測沖突。
loose-group_replication_group_name = 'de9be252-2b91-11e6-b8f4-00212889f856' #組的名字可以随便起,但不能用主機的GTID
loose-group_replication_start_on_boot = off  #為了避免每次啟動自動引導具有相同名稱的第二個組,是以設定為OFF。
loose-group_replication_bootstrap_group = off 
loose-group_replication_local_address = '192.168.1.212:33061' #sql伺服器IP
loose-group_replication_group_seeds ='192.168.1.212:33061,192.168.1.208:33061,192.168.1.211:33061'
loose-group_replication_single_primary_mode = off  #關閉單主模式的參數(本例測試時多主模式,是以關閉該項)
loose-group_replication_enforce_update_everywhere_checks = on #開啟多主模式的參數
max_connect_errors = 20000
max_connections = 2000
wait_timeout = 3600
interactive_timeout = 3600
net_read_timeout = 3600
net_write_timeout = 3600
table_open_cache = 1024
table_definition_cache = 1024
thread_cache_size = 512
open_files_limit = 10000
character-set-server = utf8
collation-server = utf8_bin
skip_external_locking
performance_schema = 1
user = mysql
myisam_recover_options = DEFAULT
skip-name-resolve
local_infile = 0
lower_case_table_names = 0

#--------------------innoDB------------#
innodb_buffer_pool_size = 2000M
innodb_data_file_path = ibdata1:200M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 600
innodb_lock_wait_timeout = 120
innodb_log_buffer_size = 8M
innodb_log_file_size = 200M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 85
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_support_xa = 1
innodb_thread_concurrency = 32
innodb_file_per_table
innodb_rollback_on_timeout

#------------session variables-------#
join_buffer_size = 8M
key_buffer_size = 256M
bulk_insert_buffer_size = 8M
max_heap_table_size = 96M
tmp_table_size = 96M
read_buffer_size = 8M
sort_buffer_size = 2M
max_allowed_packet = 64M
read_rnd_buffer_size = 32M

#------------MySQL Log----------------#
log-bin = my3306-bin
binlog_format = row  #組複制依賴基于行的複制格式
sync_binlog = 1
expire_logs_days = 15
max_binlog_cache_size = 128M
max_binlog_size = 500M
binlog_cache_size = 64k
slow_query_log
log-slow-admin-statements
log_warnings = 1
long_query_time = 0.25

#---------------replicate--------------#
relay-log-index = relay3306.index
relay-log = relay3306
server-id = 91 #每個db的id唯一
init_slave = 'set sql_mode=STRICT_ALL_TABLES'
log-slave-updates
[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
#skip-grant-tables

[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
log-error = /usr/local/mysql/log/mysqld_error.log
           

2.3注意事項

啟動mysql,如果啟動失敗,檢視日志可能是/usr/local/mysql權限問題,也可以其他問題。

mysql的basedir 必須是/usr/local/mysql 這個mysql官方說basedir如果不在這個目錄的話,會有問題。

④.安裝組複制插件

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

2.4啟動Group_replication第一個節點(192.168.1.208)

mysql > SET GLOBAL group_replication_bootstrap_group=ON; //隻在第一個節點使用

 mysql > GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%' IDENTIFIED BY                                    'Goodluck123456@';     

 mysql > CHANGE MASTER TO MASTER_USER='repl',MASTER_PASSWORD='Goodluck123456@' FOR CHANNEL 'group_replication_recovery';

 mysql> SET GLOBAL  group_replication_ip_whitelist="127.0.0.1/32,192.168.0.0/16,192.168.1.0/24";

 mysql > START GROUP_REPLICATION;

 mysql> SELECT * FROM performance_schema.replication_group_members;
           
Centos6.8 下 部署Mysql組複制(MySQL Group Replication)之多主模式(5.7新特性)參考

2.5配置 group_replication_recovery 通道的恢複憑據(192.168.1.211,192.168.1.212)

mysql > SET GLOBAL group_replication_allow_local_disjoint_gtids_join=ON;
  mysql > CHANGE MASTER TO MASTER_USER='repl',MASTER_PASSWORD='Goodluck123456@' FOR  CHANNEL 'group_replication_recovery';

  mysql > SET GLOBAL  group_replication_ip_whitelist="127.0.0.1/32,192.168.0.0/16,192.168.1.0/24";

  mysql > START GROUP_REPLICATION;

  mysql > SELECT * FROM performance_schema.replication_group_members;
           
Centos6.8 下 部署Mysql組複制(MySQL Group Replication)之多主模式(5.7新特性)參考

2.6 資料同步測試

在192.168.1.212上執行sql

mysql> CREATE TABLE `test1` (`id`  int() NOT NULL AUTO_INCREMENT ,`name`  varchar()  CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL ,PRIMARY KEY (`id`));
Query OK,  rows affected ( sec)
           

mysql> show tables;

+—————–+

| Tables_in_test1 |

+—————–+

| test1 |

+—————–+

1 row in set (0.00 sec)

在其他兩台伺服器上查詢

mysql> show tables;

+—————–+

| Tables_in_test1 |

+—————–+

| test1 |

+—————–+

1 row in set (0.00 sec)

參考

Group Replication