前書き
他にもさんざん記事はあるけど、とりあえず動かして覚えてみようって感じでやったので自分の備忘録的なものです。
あとで重複してる部分あるので1台目の調整終わったあとに複製しちゃった方が楽です。
PerconaXtraDBCuster(以下PXC)とは
簡単に言うとデータベースをクラスタリング化して冗長構成にできる超便利なやつ
サーバ構成
- 1台目
- 192.168.200.101
- DONOR(最初にmysqlを起動するサーバ)
- 2台目
- 192.168.200.102
- JOINER
- 3台目
- 192.168.200.103
- JOINER
1台目(DONOR)の構築手順
共通部分なので1台構築したあとに複製したりテンプレート化すると楽です
PXCのインストール
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install Percona-XtraDB-Cluster-57
conf設定
wsrep_cluster_address=gcomm://192.168.200.101,192.168.200.102,192.168.200.103
wsrep_node_address=192.168.200.101
wsrep_node_name=pxc-cluster-node-1
wsrep_sst_auth="sstuser:!sstuser!"
server_id=1
設定変更箇所のみ記載
mysql(DONOR)の起動
systemctl start mysql@bootstrap.service
最初に起動するサーバはDONORとして起動する必要があるので@bootstrap.service
を付加する
PXCユーザの作成
cat /var/log/mysqld.log|grep 'temporary password'
set password for root@'localhost'=password('pswd'); // rootパスワードの変更
create user sstuser@'localhost' identified by '!sstuser!'; // ユーザの作成
grant all on *.* to sstuser@'localhost'; // 権限の設定
初期ノード状態の確認
show status like 'wsrep_%';
+----------------------------------+-----------------------------------------------+
| Variable_name | Value |
+----------------------------------+-----------------------------------------------+
| wsrep_local_state_uuid | 6cc326c9-6606-11e7-bcc4-eedf9394e505 |
| wsrep_protocol_version | 7 |
| wsrep_last_committed | 4 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_received | 2 |
| wsrep_received_bytes | 157 |
| wsrep_local_commits | 0 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_max | 2 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_recv_queue_avg | 0.500000 |
| wsrep_local_cached_downto | 0 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_paused | 0.000000 |
| wsrep_flow_control_sent | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_interval | [ 100, 100 ] |
| wsrep_flow_control_interval_low | 100 |
| wsrep_flow_control_interval_high | 100 |
| wsrep_flow_control_status | OFF |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.000000 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 0 |
| wsrep_cert_bucket_count | 22 |
| wsrep_gcache_pool_size | 1320 |
| wsrep_causal_reads | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_ist_receive_status | |
| wsrep_ist_receive_seqno_start | 0 |
| wsrep_ist_receive_seqno_current | 0 |
| wsrep_ist_receive_seqno_end | 0 |
| wsrep_incoming_addresses | 192.168.200.101:3306 |
| wsrep_desync_count | 0 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 3.468e-06/7.9036e-06/1.7387e-05/5.13667e-06/5 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_gcomm_uuid | 69a42564-6610-11e7-a37e-67c3d19bd18f |
| wsrep_cluster_conf_id | 1 |
| wsrep_cluster_size | 1 |
| wsrep_cluster_state_uuid | 6cc326c9-6606-11e7-bcc4-eedf9394e505 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 0 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 3.20(r7e383f7) |
| wsrep_ready | ON |
+----------------------------------+-----------------------------------------------+
wsrep_local_state_commentがSynced
wsrep_incoming_addressesが自分のノードIPが表示されていれば正常に初期ノードとして動いているっぽいです
2、3台目(JOINER)の構築手順
PXCのインストール
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install Percona-XtraDB-Cluster-57
conf設定
wsrep_cluster_address=gcomm://192.168.200.101,192.168.200.102,192.168.200.103
wsrep_node_address=192.168.200.102 # n台目毎にノードIP変えましょう
wsrep_node_name=pxc-cluster-node-2 # n台目毎にノード名変えましょう
wsrep_sst_auth="sstuser:!sstuser!"
server_id=2 # n台目名にID変えましょう
mysql(JOINER)の起動
systemctl start mysql
正常に起動した時点で1台目のDBと同期されるため、rootのパスワードも1台目で設定したものと同じになります。
動作確認
どれか1つのサーバでDB作成してみる
create database testdb;
DB作成したのとは別のサーバで作成したDBが存在することを確認する
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
再起動方法
とりあえず1台ずつ順番に起動確認しながらやれば問題ないっぽい。
また、1台目も一度クラスタリング化されれば全てのサーバが落ちない限りはmysql@bootstrap.service
で起動せず、mysql
で起動できるようになります。
状態をあわせるためにも一度起動し直しておいたほうが予期せぬ動作踏みづらくなって良いかと
systemctl stop mysql@bootstrap.service
systemctl start mysql
その他(なんか引っかかった時とかに見てね
2台目以降のmysql起動時にコケる
SELinuxが有効になってる可能性があるので全サーバで設定するなりSELinuxを切るなりしましょう
(楽だけどサーバの公開状態によっては切るのはオススメしません)
自分がVagrantでやったときはbox指定にcentos/7
を指定してたらデフォルトで有効になっててハマりました
getenforce // SELinuxのステータス確認
setenforce 0 // SELinuxを一時的に無効にする
setenforce 1 // SELinuxを一時的に有効にする