LoginSignup
2
2

More than 5 years have passed since last update.

PerconaXtraDBCluster構築(CentOS7)

Last updated at Posted at 2017-07-11

前書き

他にもさんざん記事はあるけど、とりあえず動かして覚えてみようって感じでやったので自分の備忘録的なものです。
あとで重複してる部分あるので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のインストール

shell
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設定

/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
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)の起動

shell
systemctl start mysql@bootstrap.service

最初に起動するサーバはDONORとして起動する必要があるので@bootstrap.serviceを付加する

PXCユーザの作成

shell(rootの仮パスワードの取得)
cat /var/log/mysqld.log|grep 'temporary password'
mysql
set password for root@'localhost'=password('pswd');          // rootパスワードの変更
create user sstuser@'localhost' identified by '!sstuser!';   // ユーザの作成
grant all on *.* to sstuser@'localhost';                     // 権限の設定

初期ノード状態の確認

mysql
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のインストール

shell
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設定

/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
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)の起動

shell
systemctl start mysql

正常に起動した時点で1台目のDBと同期されるため、rootのパスワードも1台目で設定したものと同じになります。

動作確認

どれか1つのサーバでDB作成してみる

mysql(192.168.200.101)
create database testdb;

DB作成したのとは別のサーバで作成したDBが存在することを確認する

mysql(192.168.200.102)
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+

再起動方法

とりあえず1台ずつ順番に起動確認しながらやれば問題ないっぽい。
また、1台目も一度クラスタリング化されれば全てのサーバが落ちない限りはmysql@bootstrap.serviceで起動せず、mysqlで起動できるようになります。
状態をあわせるためにも一度起動し直しておいたほうが予期せぬ動作踏みづらくなって良いかと

shell
systemctl stop mysql@bootstrap.service
systemctl start mysql

その他(なんか引っかかった時とかに見てね

2台目以降のmysql起動時にコケる

SELinuxが有効になってる可能性があるので全サーバで設定するなりSELinuxを切るなりしましょう
(楽だけどサーバの公開状態によっては切るのはオススメしません)
自分がVagrantでやったときはbox指定にcentos/7を指定してたらデフォルトで有効になっててハマりました

shell
getenforce    // SELinuxのステータス確認
setenforce 0  // SELinuxを一時的に無効にする
setenforce 1  // SELinuxを一時的に有効にする
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2