LoginSignup
0
0

More than 5 years have passed since last update.

RancherでMySQLのレプリケーション構成スタックを作る(中編)

Posted at

この記事は、RancherでMySQLのレプリケーション構成スタックを作る(前編)の続編となります。

目的

前回の記事でMySQLのMaster-Slave構成に置けるMaster部分の作成が完了しました。
今回の記事ではレプリケーション先となるSlave構成の作成を行います。

全体の構成

最終的に目指す構成は以下のようになります。

Kobito.qMj4uk.png

前回はここまで作成済みです。
Kobito.sdyGJQ.png

全体の流れ

今回は MySQL Slaveサービスの作成を進めます。

  1. MySQL Slaveサービスを作成
  2. MySQL Slaveのサイドキックコンテナを作成
  3. MySQL Slaveへのアクセス用のLBを作成

今回は MySQL Slaveの作成までで、カタログ化は後編にします。

個別手順

MySQL Slaveサービスの作成

Stacks -> Userを選択します。

Kobito.uTsyAN.png

Kobito.8UmBHB.png

MySQL Replicationを選択します。

Kobito.I4Iuld.png

Add Serviceボタンを選択します。

Kobito.UlfLz1.png

(1)コンテナは1つのみとします
(2)名前にMySQLSLaveを指定します
(3)イメージにはMasterと同じくmysql:5.7を利用します
(4)MySQL Masterコンテナとの接続のため、Service Linkを作成します

同じ画面でコンテナ起動時のコマンドおよび、環境変数を設定します。

Kobito.HxRHxP.png

(1)コンテナの起動時プロセス(コマンド?)としてmysqldを指定します
(2)環境変数にMySQL_ROOT_PASSWORDを指定します

mysqldのオプションとしては基本的にMySQLMasterのものと同じですが、
server-idのみ違う値(ここでは102)を指定します。

MySQLSlaveの起動コマンド
mysqld --port=3306 --server-id=102 --character-set-server=utf8mb4 --datadir=/var/lib/mysql --log-error=/var/log/mysql/error.log --slow-query-log --slow-query-log-file=/var/log/mysql/slow_query_log.log --long-query-time=5 --log-bin --max-connections=4096 --gtid-mode=on --enforce-gtid-consistency=on

しなくてもいいですが、Networking設定を入れておきます。

Kobito.ihmV64.png

(1)コンテナのホスト名としてUse the container nameを利用します。

最後にScheduling設定を行います。

Kobito.JqCcl6.png

今回は、MySQLReplicationスタックのMySQLMasterサービスと同じ
ホスト上に載らないように以下の設定を行います。

(1)Automatically pick~~ で自動でサービスを起動させるホストを指定します。
(2)〜(4)同じホストでなるべく起動しないよう設定

MySQL Slaveのサイドキックコンテナを作成

Add Sidekick Containerボタンを選択

Kobito.rG2gfk.png

Kobito.PWen7v.png

(1)メインのコンテナ(MySQLSlave)とセットで動けば良いのでRun 1 containerを指定します
(2)サイドキックコンテナの名前としてMySQLSlaveSidekickを設定します
(3) イメージには mysql:5.7を指定します

次にMySQLSlaveSidekickの起動コマンドを指定します。
以下のようなコマンドをワンライナー化します。
(内部的には、MySQLMasterの起動待ちとMySQLSlaveコンテナをMySQLのSlaveとしての設定すると
いったことを行なっています。)

MySQLSlaveのサイドキックコンテナの起動コマンド
while :;
    do sleep 10;
    if [ `mysqladmin -h MySQLMaster -u root -proot | grep alive | wc -l` -eq 1 ]; then
        echo "master alive";
        if [ `mysqladmin -h MySQLSlave -u root -proot | grep alive | wc -l` -eq 1 ]; then
            echo "slavealive";
            mysql -u root -proot -h MySQLSlave -e "CHANGE MASTER TO MASTER_HOST='MySQLMaster', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1; START SLAVE;";
            sleep 10;
            mysql -u root -proot -h 10.42.2.11 -e "show slave status\G";
            break;
        fi
    fi
done

これをワンライナー化します。

ワンライナー化した起動コマンド
/bin/bash -c "while :; do sleep 10; if [ `mysqladmin -h MySQLMaster -u root -proot | grep alive | wc -l` -eq 1 ]; then echo \"master alive\"; if [ `mysqladmin -h MySQLSlave -u root -proot | grep alive | wc -l` -eq 1 ]; then echo \"slave also alive\"; mysql -u root -proot -h MySQLSlave -e \"CHANGE MASTER TO MASTER_HOST='MySQLMaster', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1; START SLAVE;\"; sleep 10; mysql -u root -proot -h MySQLSlave -e \"show slave status\\G\";break; fi fi done"

Kobito.lTaOWh.png

(1)先ほど記載の起動コマンドを指定します
(2)一回動けばよいので、Auto RestartNeverを指定します

あとは起動をサイドキックコンテナの起動を待ちます。
show slave status \Gの結果が表示されれば正常にレプリケーション設定が完了しているはずです。

Kobito.iZiWso.png

アクセス用のLBの作成

MySQL SlaveにアクセスするためのLBを作成します。

MySQLReplication stackの画面で Add Serviceのドロップダウンメニューを選択し、
Add Load Balancerを選択します。

Kobito.Q1Y21f.png

LBの作成を行います。

Kobito.Ej8vrD.png

(1)全てのホストからMySQLのSlaveコンテナにアクセスできるようAlways run one~を選択します
(2)LBの名前はMySQLSlaveLoadBalancerとします
(3)外部からのアクセスのため Publicを選択し、TCPの3307番で待ち受けます
(4)トラフィックを転送する先のコンテナにMySQLSlave、ポートとして3306番を指定します

上記設定が完了後にCreateボタンをクリックしてLBを作成します。

動作確認の為、Rancherのホストにアクセスしてshow slave statusを投げてみます。

MySQLSlaveへのアクセス確認
$ mysql -u root -p -h 192.168.0.8 -P 3307
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.20-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: MySQLMaster
                  Master_User: repl
                  Master_Port: 3306
~~~~~~~~~~(中略)~~~~~~~~~

$ mysql -u root -p -h 192.168.0.7 -P 3307
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.20-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: MySQLMaster
                  Master_User: repl
                  Master_Port: 3306

ここまでで、MySQLのSlaveコンテナとコンテナにアクセスするためのLBコンテナを確保できました。

まとめ

ここまでの作業で以下の環境を実現できました。

Kobito.h8I9K5.png

次回は、これらのカタログ化について説明します。

0
0
2

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
0
0