Pocket

はじめまして。メディア開発本部の綿引です。

本日は個人的に前から気になっていたMySQL 5.7のマルチソースレプリケーションについて検証したいと思います。

マルチソースレプリケーション

マルチソースレプリケーションとは1台のスレーブが複数のマスタを持つことができる仕組みです。
これまでのMySQLのレプリケーションはマスタとスレーブの関係が1:Nしか出来ませんでしたが、
この新機能を使用すればN:1が可能になります。

今まで『こんなにスレーブいらないんだけど冗長化は必須だよな。。』と思ったことがある方は興味を持たれるかと。

MySQL 5.7で他にも追加された機能はありますが、マルチソースレプリケーションはその中でも一番目を引く機能ではないかと個人的には思っております。

そして今回構築に伴い、MySQLだけでなくスレーブ側を
互換性のある”MariaDB”にしてみるといったことも出来ればと思いますので、
早速構築を開始したいと思います。

構築開始!

今回は予め以下の構成を用意しました。

■マスタ側
mysql5.7-master1 (MySQL導入済み)
mysql5.7-master2 (MySQL導入済み)

■スレーブ側
mysql5.7-slave (MySQL導入済み)
mariadb10.1-slave (MariaDB導入済み)

以下、図の緑の点線部分をレプリケーションしていきたいと思います。

image2

〔Master〕my.cnfの編集

まずはmy.cnfの設定です。

server-idがかぶらないようにmysql5.7-master1に以下を、

mysql5.7-master2に以下を設定します。

次に両マスターサーバにレプリケーション用のユーザを作成。

これでマスター側の設定自体は完了です。my.cnfを修正したのでmysqldの再起動を行っておきます。

〔Slave〕my.cnfの編集

続いてスレーブ側の設定です。まずはMariaDBではなくMySQLを先にやっていきたいと思います。
以下を追加します。

ここまで実施したらまたスレーブ側のmysqldを再起動しておきます。

〔Slave〕スレーブ・マスター接続!

両マスター側でバイナリログのポジションを「show master status」で確認しておき、スレーブ側でチャネルの設定を行います。

「show slave status」で確認してみます。

2つのマスターが確認出来ました!後はレプリケーションを開始するだけです。

再度「show slave status」で確認してみます。

2つのチャネルの「Slave_IO_Running」と「Slave_SQL_Running」が「YES」になりました!

全サーバに以下テスト用のテーブルを作成して、レプリケーションの確認です!

確認!!

マスタの1台目で以下を実施。

2台目で以下を実施。

スレーブで確認!

ちゃんとレプリケーションされてますね。

MariaDBでのマルチソースレプリケーション

続いてMariaDBでも実施して見ます!

まずはMySQLと同様にmy.cnfの設定です。
server-idがかぶらないように以下を設定します。

スレーブ・マスター接続!

一台ずつコネクションとレプリケーションの設定を行います。

コネクションの設定を確認し、

レプリケーションの設定を行います。

ここでまず一つ目のマスタのレプリケーション設定が出来ました。
続いて二つ目を同様の手順で実施。
「show all slaves status」で確認すると、

これでレプリケーションの設定も完了です。
スタートしてみます。

MariaDBでも「Slave_IO_Running」と「Slave_SQL_Running」がどちらも「YES」になりました!

後は確認です。

確認!!

マスタの1台目で以下を実施。

2台目で以下を実施。

スレーブで確認!

出来ました!

MySQLでもMariaDBでもマルチソースレプリケーションが比較的簡単に出来ることが判明しました。
今回はレプリケーションのみが目的だったので、今後はもっと実用的に使えるレベルまで持っていきたいです。

また今回少し触りましたが、あまりなじみがなかったのでMariaDBもどんどん触っていきたいと思います。

Pocket

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る