■MySQLインスタンス+ Group Replicationについて
使用目的:合計4台のMySQLの内、それぞれ2台毎に
グループレプリケーションを組んだ場合、片系が落ちた時に、
スプリットブレインが発生してデータベース書き込みが出来なくなる恐れがあるので
インスタンスの導入を考えた。
インスタンスグループを導入することにより
以下の構成になるので、スプリットブレインからは避けられそうだ
①db1/db2/db3(インスタンス1/group replicaitonの組み合わせ)
②db2/db3/db4(インスタンス2/group replicaitonの組み合わせ)
上記によって、グループレプリケーションが3台構成の2グループにすることが出来た。
[インスタンスの設定方法]
ポイント:
①systemctl stop firewalld
②selinux off
③インスタンスグループ毎にポート番号(13306,13307)を分けているので、間違いないこと。
④/etc/hostsの追記も忘れずに!
1)以下のディレクトリの作成を行う
# mkdir /var/lib/mysqld
# mkdir /var/lib/mysqld/mysql_{13306,13307}; chown mysql: /var/lib/mysqld/mysql_{13306,13307}
2)/etc/my.cnfに編集を行う。
①以下コメントアウトにする
#[mysqld]
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
②以下、DB1のmy.cnfを追加を行う
ポイント:
server_idは重複させないこと!
---------------------------/etc/my.cnf(db1)------------------------------------------------------------
[mysqld@mysql_13306]
port=13306
datadir=/var/lib/mysqld/mysql_13306
socket=/var/lib/mysqld/mysql_13306/mysql.sock
log-error=/var/log/mysqld_13306.log
server_id=1
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=binlog
binlog_format=ROW
#グループレプリケーションセッティング
transaction_write_set_extraction=XXHASH64
# 任意のUUID番号を入力
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off
#自分のアドレス
loose-group_replication_local_address= "db1:33061"
#グループレプリケーションに所属させるDBを記載
loose-group_replication_group_seeds= "db1:33061,db2:33061,db3:33061"
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE
#グループレプリケーション内のネットワークアドレスを記載
loose-group_replication_ip_whitelist = 192.168.1.0/24
---------------------------------------------------------------------------------------------------------------
②以下、DB2のmy.cnfを追加を行う
ポイント:
server_idは重複させないこと!
インスタンスグループが2つ作成するのでポート番号を区別させること
------------------------etc/my.cnf(db2)------------------------------------------------------------------
[mysqld@mysql_13306]
port=13306
datadir=/var/lib/mysqld/mysql_13306
socket=/var/lib/mysqld/mysql_13306/mysql.sock
log-error=/var/log/mysqld_13306.log
server_id=2
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=binlog
binlog_format=ROW
#グループレプリケーションセッティング
transaction_write_set_extraction=XXHASH64
#任意のUUID番号を入力
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off
#自分のアドレス
loose-group_replication_local_address= "db2:33061"
#グループレプリケーションに所属させるDBを記載
loose-group_replication_group_seeds= "db1:33061,db2:33061,db3:33061"
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE
#グループレプリケーション内のネットワークアドレスを記載
loose-group_replication_ip_whitelist = 192.168.1.0/24
[mysqld@mysql_13307]
port=13307
datadir=/var/lib/mysqld/mysql_13307
socket=/var/lib/mysqld/mysql_13307/mysql.sock
log-error=/var/log/mysqld_13307.log
server_id=3
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=binlog
binlog_format=ROW
#グループレプリケーションセッティング
transaction_write_set_extraction=XXHASH64
#任意のUUID番号を入力
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off
#自分のアドレス
loose-group_replication_local_address= "db2:33062"
#グループレプリケーションに所属させるDBを記載
loose-group_replication_group_seeds= "db2:33062,db3:33062,db4:33062"
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE
#グループレプリケーション内のネットワークアドレスを記載
loose-group_replication_ip_whitelist = 192.168.1.0/24
-------------------------------------------------------------------------------------------------------------------
②以下、DB3のmy.cnfを追加を行う
ポイント:
server_idは重複させないこと!
インスタンスグループが2つ作成するのでポート番号を区別させること
-------------------------------/etc/my.cnf(db3)---------------------------------------------------------------
[mysqld@mysql_13306]
port=13306
datadir=/var/lib/mysqld/mysql_13306
socket=/var/lib/mysqld/mysql_13306/mysql.sock
log-error=/var/log/mysqld_13306.log
server_id=4
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=binlog
binlog_format=ROW
#グループレプリケーションセッティング
transaction_write_set_extraction=XXHASH64
#任意のUUID番号を入力
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off
#自分のアドレス
loose-group_replication_local_address= "db3:33061"
#グループレプリケーションに所属させるDBを記載
loose-group_replication_group_seeds= "db1:33061,db2:33061,db3:33061"
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE
#グループレプリケーション内のネットワークアドレスを記載
loose-group_replication_ip_whitelist = 192.168.1.0/24
[mysqld@mysql_13307]
port=13307
datadir=/var/lib/mysqld/mysql_13307
socket=/var/lib/mysqld/mysql_13307/mysql.sock
log-error=/var/log/mysqld_13307.log
server_id=5
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=binlog
binlog_format=ROW
#グループレプリケーションセッティング
transaction_write_set_extraction=XXHASH64
#任意のUUID番号を入力
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off
#自分のアドレス
loose-group_replication_local_address= "db3:33062"
#4グループレプリケーションに所属させるDBを記載
loose-group_replication_group_seeds= "db2:33062,db3:33062,db4:33062"
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE
#グループレプリケーション内のネットワークアドレスを記載
loose-group_replication_ip_whitelist = 192.168.1.0/24
---------------------------------------------------------------------------------------------------------------
②以下、DB4のmy.cnfを追加を行う
--------------------my.cnf(db4)------------------------------------------------------------------------------
[mysqld@mysql_13307]
port=13307
datadir=/var/lib/mysqld/mysql_13307
socket=/var/lib/mysqld/mysql_13307/mysql.sock
log-error=/var/log/mysqld_13307.log
server_id=6
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=binlog
binlog_format=ROW
#グループレプリケーションセッティング
transaction_write_set_extraction=XXHASH64
#任意のUUID番号を入力
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off
#自分のアドレス
loose-group_replication_local_address= "db4:33062"
#グループレプリケーションに所属させるDBを記載
loose-group_replication_group_seeds= "db2:33062,db3:33062,db4:33062"
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE
#グループレプリケーション内のネットワークアドレスを記載
loose-group_replication_ip_whitelist = 192.168.1.0/24
-----------------------------------------------------------------------------------------------------------------
3)プロセスを起動する
○DB1/DB2/DB3用
[root@localhost ~]# systemctl start mysqld@mysql_13306
[root@localhost ~]# systemctl enable mysqld@mysql_13306
○DB2/DB3/DB4用
[root@localhost ~]# systemctl start mysqld@mysql_13307
[root@localhost ~]# systemctl enable mysqld@mysql_13307
4)以下のログからパスワードを検索する。
○DB1/DB2/DB3用
/var/log/mysqld_13306.log
○DB2/DB3/DB4用
/var/log/mysqld_13307.log
5)ログインを行う
->(4)で得られたパスワードを入力する。
○DB1/DB2/DB3用
mysql -u root -p -P 13306 --protocol=TCP
○DB2/DB3/DB4用
mysql -u root -p -P 13307 --protocol=TCP
6)レプリケーションユーザの作成を行う(DB1~DB4)
mysql> ALTER USER root@'localhost' identified by 'Pass_1234';
mysql> CREATE USER rpl_user IDENTIFIED BY 'Pass_1234';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'rpl_user'@'%';
rpl_user :グループレプリケーション用のID名
Pass_1234:任意で決めたパスワード
7)mysqld@mysql_13306用のセッティング
①db1で以下を実施
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Pass_1234' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> UNINSTALL PLUGIN validate_password;
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
②db2/db3で以下を実施
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Pass_1234' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> UNINSTALL PLUGIN validate_password;
mysql> START GROUP_REPLICATION;
8)mysqld@mysql_13307用のセッティング
①db3で以下を実施
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Pass_1234' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> UNINSTALL PLUGIN validate_password;
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
②db2/db4で以下を実施
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Pass_1234' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> UNINSTALL PLUGIN validate_password;
mysql> START GROUP_REPLICATION;
その他ポイント:
①"START GROUP_REPLICATION;"失敗するので、以下を実行
mysql>reset master;
②グループレプリケーションの状態を確認して全系MEMBER_STATEがONLINEか確認
mysql> SELECT * FROM performance_schema.replication_group_members;
0 件のコメント:
コメントを投稿