2017年10月29日日曜日

MySQL グループレプリケーションの設定


MySQLのグループレプリケーションの作成手順を記載してみる。

注意:
もし2台構成でグループレプリケーションを組んだ場合
スプリットブレイン現象が発生するので、仮に片系がダウンした場合に
正常に稼働しているDBにも、書き込みができなくなる恐れがあるので
可能であれば、最低3台構成にするのが望ましい。


1)MariaDBの削除を行う
# yum -y remove mariadb-libs.x86_64

# rm -rf /var/lib/mysql/

2)MySQLのインストールを行う。
# yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# yum -y install mysql-community-common-5.7.18-1.el7.x86_64
# yum -y install mysql-community-libs-5.7.18-1.el7.x86_64
# yum -y install mysql-community-client-5.7.18-1.el7.x86_64
# yum -y install mysql-community-server-5.7.18-1.el7.x86_64


3)MySQLのプロセスを起動させる。
# systemctl enable mysqld      
# systemctl start mysqld


4)以下のログからpassで検索して、初期値のパスを探す.
# vi /var/log/mysqld.log


5)MySQLのパスワードの初期化を行う
# mysql_secure_installation

①上記で調べた初期値を入力   
②新規のパスワードを入力 (例:Pass_1234)
③聞かれる質問に対して全て"YES"を選択


6)MySQLにログインを行う
#mysql -u root -p
Enter password: "作成したパスワード"

今回、作成したパスワード:Pass_1234

7)レプリケーションユーザの作成
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     :レプリケーション用のユーザー
Pass_1234 :レプリケーション用のパスワード


8)DB1のmy.cnfの編集を行う

# vi /etc/my.cnf
----------------- my.cnf (DB1)-----------------------------------------------------------------------
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

#①Group Replication settings
transaction_write_set_extraction=XXHASH64

#②Describe any UUID
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off

#③My IP address
loose-group_replication_local_address= "db1:33061"

#④Describe all servers
loose-group_replication_group_seeds= "db1:33061,db2:33061,db3:33061"

loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE

#⑤Allow network to use for communication between servers
loose-group_replication_ip_whitelist = 192.168.1.0/24

--------------------------------------------------------------------------------------------------

XXHASH64"を入力する。
対象のMySQLに、同一のUUIDの値にしないとレプリケーションの設定が
出来ないので注意すること!
自分のホスト名を入力する
ポート番号は、同一の番号(33061)を使用する。
対象のサーバのホスト名を記載する
ポート番号は、同一の番号(33061)を使用する。
ネットワークアドレスを入力する。



9)DB2のmy.cnfの編集を行う

# vi /etc/my.cnf
----------------- my.cnf (DB2)-----------------------------------------------------------------------
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

#①Group Replication settings
transaction_write_set_extraction=XXHASH64

#②Describe any UUID
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off

#③My IP address
loose-group_replication_local_address= "db2:33061"

#④Describe all servers
loose-group_replication_group_seeds= "db1:33061,db2:33061,db3:33061"

loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE

#⑤Allow network to use for communication between servers
loose-group_replication_ip_whitelist = 192.168.1.0/24

--------------------------------------------------------------------------------------------------

XXHASH64"を入力する。
対象のMySQLに、同一のUUIDの値にしないとレプリケーションの設定が
出来ないので注意すること!
自分のホスト名を入力する
ポート番号は、同一の番号(33061)を使用する。
対象のサーバのホスト名を記載する
ポート番号は、同一の番号(33061)を使用する。
ネットワークアドレスを入力する。


10)DB3のmy.cnfの編集を行う

# vi /etc/my.cnf
----------------- my.cnf (DB3)-----------------------------------------------------------------------
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

#①Group Replication settings
transaction_write_set_extraction=XXHASH64

#②Describe any UUID
loose-group_replication_group_name="87e5ed8c-cd83-11e6-bc3c-fa163e83e8e7"
loose-group_replication_start_on_boot=off

#③My IP address
loose-group_replication_local_address= "db3:33061"

#④Describe all servers
loose-group_replication_group_seeds= "db1:33061,db2:33061,db3:33061"

loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode= FALSE

#⑤Allow network to use for communication between servers
loose-group_replication_ip_whitelist = 192.168.1.0/24

--------------------------------------------------------------------------------------------------

XXHASH64"を入力する。
対象のMySQLに、同一のUUIDの値にしないとレプリケーションの設定が
出来ないので注意すること!
自分のホスト名を入力する
ポート番号は、同一の番号(33061)を使用する。
対象のサーバのホスト名を記載する
ポート番号は、同一の番号(33061)を使用する。
ネットワークアドレスを入力する。


11)DB1のグループレプリケーションの設定を行う。

--------------------------------<DB1>--------------------------------------------------------------
①ログインを行う
# mysql -u root -p

②ユーザ名(rpl_user)とパスワード(Pass_1234)を入力する
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;
-------------------------------------------------------------------------------------------------------


11)DB2,DB3のグループレプリケーションの設定を行う。

--------------------------------<DB2><DB3>--------------------------------------------------------

①ログインを行う
# mysql -u root -p

②ユーザ名(rpl_user)とパスワード(Pass_1234)を入力
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;
---------------------------------------------------------------------------------------------------------



12)グループレプリケーションの状態を確認する。
mysql> SELECT * FROM performance_schema.replication_group_members;

確認
MEMBER_STATEの表示がONLINEになっていること


◆メモ
MEMBER_STATEの表示がOFFLINEになっている場合は
mysql> reset master; を各dbで実行して、以下を実施すること

[DB1]
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

[DB2/DB3]
mysql> START GROUP_REPLICATION;

0 件のコメント:

コメントを投稿

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...