LoginSignup
7
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-17

この記事は、
Rancher Advent Calendar 2017
の18日目の記事になります。

注意

記事作成途中でデータが全て消えてしまったため、MySQLのMasterの作成部分までです。
(なんてクリスマス...)
Slave部分については後日掲載します。

この中では、あえてDocker公式のMySQL 5.7のコンテナイメージを使用していますが、
ある程度設定済みのコンテナイメージを準備することでよりシンプルに構成することが可能です。

全体の構成

MySQLの非同期レプリケーションスタックを作成します。
最終的に実現する構成は以下の通りになります。

Kobito.plkTEv.png

前提: MySQLの非同期レプリケーション構成を作成します。
① DockerHost1または2の特定ポートへのアクセスでCRUDのうちのCUD(作成、更新、削除)を実現します。
② DockerHost1または2の特定ポートへのアクセスでCRUDのうちのR(読込)を実現します。

全体の流れ

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

(↑本記事ではここまで)

(↓以降は後日掲載)

4. MySQL Slaveサービスを作成
5. MySQL Slaveのサイドキックコンテナを作成
6. MySQL Slaveへのアクセス用のLBを作成
7. カタログ化

とはいえ、前半ができて仮想マシンを使ったMySQLのレプリケーション構成を
組んだことのある人であればゴールまでは早いかと思います。

個別手順

MySQL Masterサービスの作成

MySQL Replicationスタックの作成

Kobito.LUnyEn.png

StackからAllまたUserを選択します。

Kobito.Lcqt4N.png

Add Stackボタンをクリックします。

Kobito.e2eMIE.png

すると、なにもサービスなどが含まれていないからのMySQL Replicationスタックが作成されます。

MySQL Masterサービスの作成

スタック一覧の画面からMySQLReplicationスタックを選択します。

Kobito.rIZlK0.png

Add Serviceボタンをクリックします。

Kobito.k2Vg3j.png

Kobito.1k2BvH.png

(1)MySQLのMasterコンテナなので、一つだけのコンテナを実行するようにします。
(2)コンテナの名前をMySQLMasterとします。
(3)利用するイメージはmysql:5.7とします。

コマンド設定

Kobito.ctxFbm.png

(1)コンテナ起動時のコマンドとして以下の内容を指定します。

起動時コマンド指定
mysqld --port=3306 --server-id=101 --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

(2)Add Environment Variablesを選択して環境変数を指定できるようにします。
(3)環境変数を指定します。今回はMYSQL_ROOT_PASSWORD = rootを指定します。

ネットワーキング設定

Kobito.SJZj96.png

Use the container nameを指定します。

ここまで完了したら MySQLMasterのサイドキック作成に進みます。

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

Add Sidekick Containerボタンをクリックします。

Kobito.BpozdA.png

コンテナの名前と利用するコンテナイメージを選択します。

(1)コンテナの名前にはMySQLMasterSidekickを指定します。
(2)イメージはmysql:5.7を利用します。(mysqlクライアントが利用できればなんでも良い。)

Kobito.x67D8t.png

コマンド設定

コマンドとしてMySQLのレプリケーションのマスターとして必要なコマンドを投入します。

Kobito.4NvjwD.png

具体的には、MySQLMasterのMySQLが起動完了するまで待ち合わせてから、
レプリケーション用のユーザを作成するコマンドの発行をワンライナーで実行しています。

サイドキックコンテナの起動時コマンド
while :; do
    sleep 10;
    if [ \`mysqladmin -h MySQLMaster -u root -proot | grep alive | wc -l\` -eq 1 ]; then
        echo \"alive\";
        mysql -u root -proot -h MySQLMaster -e \"CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
        GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';\";
        break;
    fi
done

ワンライナー化した場合は、以下のようになります。

ワンライナー化した起動時コマンド
/bin/bash -c "while :; do sleep 10; if [ `mysqladmin -h MySQLMaster -u root -proot | grep alive | wc -l\` -eq 1 ]; then echo \"alive\"; mysql -u root -proot -h MySQLMaster -e \"CREATE USER 'repl'@'%' IDENTIFIED BY 'repl'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';\"; break; fi done"

ここまで設定が完了したら画面下部のCreateボタンをクリックするとMySQLMasterのサービスが起動します。

Kobito.A59AMP.png

MySQL Masterへのアクセス用LB作成

MySQL Masterに2台のDockerhostからアクセスするためのプロキシがわりにLBを作成します。

LBサービスの作成

MySQLReplicationスタックの画面からAdd Service隣の↓っぽいボタンを選択して、
Add LoadBalancerをクリックします。

Kobito.tjX1Lh.png

ロードバランサの設定を進めます。

Kobito.Q0v83h.png

(1)全てのホストからアクセスできるように全ホストでLBを起動するように設定します。
(2)Dockerホスト外部からアクセスするのでPublicを指定します。プロトコルにはTCPを指定します。
(3)外部アクセスの際のTCPポート番号として3306番を指定します。
(4)アクセス先のサービスとして先ほど作成したMySQLMaster、アクセス先ポートとして(TCP)3306番を指定します。
(5)ここまで設定が完了したらCreateボタンをクリックします。

動作確認

Rancherサーバの管理する全てのDockerHostからアクセスできることを確認します。
した図から分かる通り、192.168.0.7と192.168.0.8のホストの3306番ポートから
MySQLMasterコンテナにアクセスできることを確認します。

Kobito.gryNCY.png

Kobito.0d0NV3.png

Kobito.l46N5i.png

ここまでのまとめ

ここまでで、MySQLMasterの環境が出来上がりました。
以下のような形になっています。

Kobito.bxW8QX.png

次回の記事では、MySQLのスレーブコンテナとそれにアクセスするためのLBを作成していきます。

作成した記事が消えた時のショックはデカすぎる。。。
7
3
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
7
3