這裡先為各位說明Corosync的安裝,再
- 安裝 corosync (以Ubuntu為例)的步驟:
- 安裝Corosync
- 設定Corosync
$ sudo vi /etc/corosync/corosync.conf
- Corosync的設定檔的內容如下:
crypto_hash: sha256
...
interface {
…
ringnumber: 0
…
bindnetaddr: 127.0.0.1
…
mcastaddr: 226.94.1.1 # 此二配置的實際值要問您的網路管理員
mcastport: 5405
- 編UIDGID檔指定用那個帳戶執行Corosync,且放到/etc/corosync/uidgid.d,
內容如下:
uidgid {
uid:
gid:
}
- 將UIDGID檔抄到/etc/corosync之下
- 指定在開機時將Corosync啟動
START=yes
- 開啟Corosync
$ sudo service corosync status
$ corosync-cfgtool -s # 檢查corosync的狀況
2. 安裝和設定MySQL databases以及group replication
- 安裝database(加入group replication 的MySQL instance都要做),必須使用5.7.8版以後的MySQL,同時將自labs.mysql.com所下載的group_replication.so放到lib/plugin之下
- 5.7以後的MySQL不用mysql_install_db,必須用mysqld來初始化datadir, 且設定SSL的認證檔。初始化mysqld會在畫面上顯示一個隨機産的的密碼,一定要記下來,它是您第一次登入MySQL時所用的密碼
$ ./bin/mysql_ssl_rsa_setup –basedir=. --datadir=./data
- 編輯my.cnf,重點是binlog-format必須設為row,且GTID要開啟,另外要指定group_replication plugin的程式庫和設定transaction-write-set-extraction=MURMUR32。my.cnf的配置如下:
log-bin
binlog-format=row # binlog format need to be set to row
basedir=.
datadir=./data
gtid-mode=on # need to turn on gtid
enforce-gtid-consistency
log-slave-updates
master-info-repository=TABLE # need setting master and relay log status repository to TABLE
relay-log-info-repository=TABLE
transaction-write-set-extraction=MURMUR32 # need to set to MURMUR32
binlog-checksum=NON # no binlog checksum
socket=
server-id=1
plugin-load=group_replication.so # assign plugin library
- 開mysqld和更改在初始化所産生的密碼(必須更改,因為初始化密碼只能用一次就過期了)
$ ./bin/mysqladmin -u root -h 127.0.0.1 -P 13001 -p password "
在此回應以mysqld初始化時所産生的密碼
- 建複製所用的帳戶:
server1> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
- 設定複製,指定任一個UUID給group_replication_name
server1> SET GLOBAL group_replication_recovery_user='rpl_user';
server1> SET GLOBAL group_replication_recovery_password='
server1> SET GLOBAL group_replication_recovery_retry_count= 2;
- 開啟oup replication
- 以上步驟只要在第一個MySQL instance做一次即可,其他的MySQL instance不需做
- 檢group replication 的狀況:
- 檢查group member:
- 每個group replication members都要做:
server1> SET GLOBAL group_replication_recovery_user='rpl_user';
server1> SET GLOBAL group_replication_recovery_password='
server1> START GROUP_REPLICATION;
- 測試group replication:
server1> CREATE TABLE test.t1 (c1 INT NOT NULL PRIMARY KEY, name varchar(30));
server1> INSERT INTO test.t1 VALUES (1, 'aaaa');
server2> select * from test.t1;
server2> INSERT INTO test.t1 VALUES (2, 'bbb');
server1> select * from test.t1;
- 此時查performance_schema.replication_group_members和performance_schema.replication_connection_status可以看到兩台個MySQL instance之間會相互複製的狀況
server1> SELECT * FROM performance_schema.replication_connection_status\G
server2> SELECT * FROM performance_schema.replication_group_members\G
server2> SELECT * FROM performance_schema.replication_connection_status\G
- 當有新的成員加入group replicaiton時做以下動作
server3> SET GLOBAL group_replication_recovery_user='rpl_user';
server3> SET GLOBAL group_replication_recovery_password='
- 當新的MySQL instance加入group replication時,它會自動和其他的成員同步,此時該MySQL instance在查group replication status時會顯其狀況為‘RECOVERING’,此時該instance不可以做任何操作。