それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

Percona XtraDB Cluster のインストール手順

よきように調べてと言われたので、とりあえず先んじて導入手順をメモ(´・ω・`)

参考URL

導入環境

  • 推奨3台構成以上のようなのでAWS/EC2インスタンスで3台構築する
  • CentOS7 (2016/03/08時点で更新)
  • セキュリティポリシーでローカルセグメントの TCP/3306,4444,4567,4568 を開放
  • SELinuxは無効化(disabled)、firewalldは最初から入ってない状態
  • /etc/hosts に下記内容を設定 
10.0.3.10     percona1 percona1.localdomain  10.0.3.11     percona2 percona2.localdomain  10.0.3.12     percona3 percona3.localdomain  

Percona XtraDB Cluster の構築

レポジトリの追加とインストール

テンプレート化する1台目のEC2インスタンスでPerconaのインストールを行う。インストールは公式のレポジトリを利用、また依存関係でEPELレポジトリも有効にする。

$ sudo su -# yum install epel-release -y# yum install  http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm -y# yum --enablerepo=epel install Percona-XtraDB-Cluster-56 -y

1台目(percona1)の初期設定

my.cnf の編集

percona1/10.0.3.10 の "my.cnf" に下記設定を行う。

# cp /etc/my.cnf{,.`date +%Y%m%d`}# vi my.cnf

Clusterに関する設定を追記する。

[mysqld]...wsrep_cluster_address          = gcomm://10.0.3.10,10.0.3.11,10.0.3.12  wsrep_provider                 = /usr/lib64/galera3/libgalera_smm.sowsrep_node_name                = Node1  wsrep_node_address             = 10.0.3.10wsrep_slave_threads            = 8  wsrep_cluster_name             = Clusterinnodb_locks_unsafe_for_binlog = 1  innodb_autoinc_lock_mode       = 2binlog_format                  = ROW  default_storage_engine         = InnoDBwsrep_sst_method               = xtrabackup-v2  wsrep_sst_auth                 = "sstuser:s3cret"  
サービスの起動と動作確認

サービスを起動し、設定を確認

# systemctl start mysql@bootstrap# mysqlmysql> show status like 'wsrep%';  ...
アカウントの設定

MySQL/root へのパスワード設定

mysql> UPDATE mysql.user SET password=PASSWORD("Passw0rd") where user='root';  mysql> FLUSH PRIVILEGES;  

SST(State Snapshot Transfer)ユーザの作成・権限の付与など。 SSTに関してはMySQL/rootユーザでも設定出来るが、rootとは異なるユーザでの設定が推奨とのこと。

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';  mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';  mysql> FLUSH PRIVILEGES;  mysql> quit  

Percona1 の停止->AMI作成->起動

AMI化するためにシャットダウンする。

# shutdown -h now

AWS/EC2の画面で、イメージの作成(AMI化)し、Percona1 を再度起動する。起動完了後、手動でサービスを起動しておく (クラスタが停止->再稼働する場合、1台目のノードは”bootstrap”付けて起動するものっぽい)

$ sudo systemctl start mysql@bootstrap

Percona2 の作成と起動

AMIを元に Percona2 を作成後、以下の作業を続ける。

my.cnf の編集

Percona2の環境(IP)に合わせて、my.cnf を編集する。

$ sudo su -# vi my.cnf...wsrep_node_name                = Node2  wsrep_node_address             = 10.0.3.11  

MySQLサービスの起動と動作確認

1台目がすでに稼働しているので、普通にmysqlとして起動する。

# systemctl start mysql# mysql -u root -p

クラスター構成が組めている事を確認

mysql> show status like 'wsrep%';  ...wsrep_incoming_addresses     | 10.0.3.11:3306,10.0.3.10:3306  wsrep_cluster_status         | Primary  wsrep_ready                  | ON  mysql> quit  

Percona3 の作成と起動

AMIを作成し、Percona2 と同様の手順でクラスタに組み込む

$ sudo su -# vi my.cnf...wsrep_node_name                = Node3  wsrep_node_address             = 10.0.3.12  # systemctl start mysql# mysql -u root -pmysql> show status like 'wsrep%';  ...wsrep_incoming_addresses     | 10.0.3.11:3306,10.0.3.12:3306,10.0.3.10:3306  wsrep_cluster_status         | Primary  wsrep_ready                  | ON  mysql> quit  

レプリケーションのテスト

以下、プロンプトに注意 (複数のサーバで分割してコマンドを投入し動作を確認している)

2台目でデータベース "percona" を作成

mysql@percona2> CREATE DATABASE percona;  ...

3台目でデータベースが出来ている(同期されている)事を確認、テーブルを作成する。

mysql@percona3> show database;  ...| percona            |mysql@percona3> USE percona;  mysql@percona3> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));  

1台目でテーブルが見れる事を確認、テーブルにデータを投下

mysql@percona1> show tables from percona;  +-------------------+| Tables_in_percona |+-------------------+| example           |+-------------------+1 row in set (0.00 sec)mysql@percona1> INSERT INTO percona.example VALUES (1, 'percona1');  

2台目でデータが見れる事を確認

mysql@percona2> SELECT * FROM percona.example;  

実際にはもっとテストしないといけない事が沢山あるのだけど、とりあえず面白そうだ(´∀`∩)・・・英語のドキュメント読もう。。

以上