Carpe Diem

  Top > スポンサー広告> MySQL > MySQLの準同期レプリケーション  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MySQLの準同期レプリケーション

2012 - 08/22 [Wed] - 17:39

レプリケーションとは「replication:複製」の意味通り、マスターデータをスレーブに複製、同期することで負荷分散や耐障害性の向上を目的とした技術です。

通常レプリケーション(asynchronous replication)と準同期レプリケーション(semisynchronous replication)がありますが、後者のほうがマスターとスレーブ間での齟齬が生じないのでこちらを実装します。

◆動作環境
マスター側
IP: 192.168.234.132

スレーブ側
IP: 192.168.234.135

とします。


◆レプリケーション設定

■マスター側
①プラグインのインストールとレプリケーション用ユーザ追加
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

ユーザ名「repl」、パスワード「pw」で新規ユーザの作成
※本番環境にあわせて変更してください
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'pw';

新規ユーザの権限の設定
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';


②/etc/my.cnf の編集

$ sudo emacs /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1500
expire_logs_days=14


設定したら一旦mysql を再起動します。
$ sudo /etc/init.d/mysql restart


③ログ位置の確認
mysql> SHOW MASTER STATUS;

log-master.png

File名、Position名は後々使うのでメモしておきましょう。今回は

File:mysql-bin.000001
Position:107

です。


■スレーブ側

①プラグインのインストール
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';


②/etc/my.cnf の編集
$ sudo emacs /etc/my.cnf
[mysqld]
server-id=2
rpl_semi_sync_slave_enabled=1


編集したら一旦 mysql を再起動します。
$ sudo /etc/init.d/mysql restart


③マスターを指定
IP、MySQLのレプリケーション用ユーザ名・パス、ログファイル名、ログ位置の情報が必要です。

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.234.132',
MASTER_USER='repl',
MASTER_PASSWORD='pw',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;



④マスターと同期開始
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
mysql> START SLAVE;



◆動作確認1


■マスター側

mysql> SHOW PROCESSLIST\G
confirm-master.png

START SLAVEした時点で、上記のreplユーザのプロセスが起動します。


■スレーブ側
mysql> SHOW SLAVE STATUS\G

confirm-slave.png

Slave_IO_Running, Slave_SQL_Running が「Yes」なら、スレーブ側のスレッドは立ち上がっており、レプリケーションが動作していることになります。
Seconds_Behind_Master でスレーブ側で最後に実行されたクエリがマスター側から何秒遅れていたかを表示しており、レプリケーション完了までの目安になります。


◆動作確認2
■マスター側
マスター側で適当にデータベースを作成し、それがスレーブ側でも自動で作成されるか確認します。

データベースの作成
mysql> CREATE DATABASE hoge;
確認
mysql> SHOW DATABASES;

comfirm-repl.png


■スレーブ側

スレーブ側で同期されているか確認
mysql> SHOW DATABASES;

comfirm-repl.png

同期できていることが確認できます。



◆補足
my.cnfの設定の詳細です。

log-bin=mysql-bin
 バイナリログを生成
server-id=1
 サーバ固有のIDの指定
sync_binlog=1
innodb_flush_log_at_trx_commit=1
 バイナリログの欠損を防ぐための設定。1回バイナリログへ更新を行うことでディスクへのフラッシュを行う。
※負荷が高くなる。更新が遅くなる
rpl_semi_sync_master_enabled=1
 準同期レプリケーションマスター動作を有効
rpl_semi_sync_master_timeout=1500
 準同期レプリケーションで、更新時、SLAVEが応答しない時のタイムアウト時間を1.5秒に設定
expire_logs_days=14
 ログの保持を保証する期間(日)。0以外の値にすると、ログローテーション・サーバ再起動のタイミングで自動削除



ソース:
[MySQL] Semisynchronous Replication (半同期レプリケーション?)を試してみた
MySQL5.5で準同期レプリケーション構築
MySQL レプリケーションの設定


コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。