MySQLのデュアルマスターの設定方法
MySQLにおいて、デュアルマスター構成はデュアルマスターレプリケーション、双方向レプリケーションとも呼ばれ、データベースの読込み分離と高可用性を実現します。デュアルマスター構成では、二つのMySQLサーバがどちらも読込みおよび書込み要求を受け付け、そのデータは互いに同期されます。
MySQLのデュアルマスター構成を設定するには、次の手順を実行する必要があります。
- 主サーバーAを配置:
- masterサーバAのconfigファイル(通常はmy.cnf)に以下の設定項目を追加します。
server-id=1
log-bin=mysql-bin
binlog-do-db=database_nameここで、server-idはサーバのユニークな識別子で、任意の整数にすることができます。log-binはバイナリログの名前を指定します。binlog-do-dbはレプリケートするデータベース名を指定します。 - 構成を反映させるため、プライマリー サーバ A を再起動します。
- プライマリサーバーBを配置する:
- 主サーバBの設定ファイルに以下を追加:
server-id=2
log-bin=mysql-bin
binlog-do-db=DB名 - 主サーバBを再起動してください。
- マスタ-スレーブレプリケーションを構成します。
- 主サーバAのMySQLコマンドラインインターフェースにログインし、次のコマンドを実行してレプリケーション用のユーザを作成します。“`
CREATE USER ‘replication’@’%’ IDENTIFIED BY ‘password’;
GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’;
FLUSH PRIVILEGES;
“`ここで、replicationはユーザ名、passwordはパスワードです。
- 主サーバAで以下のコマンドを実行し、バイナリログの位置情報を取得してください:
SHOW MASTER STATUS;FileとPositionの値を控えてください。 - MySQLコマンドラインインターフェイスにマスターサーバーBにログインして、次のコマンドを実行してマスタースレーブ関係を設定します:CHANGE MASTER TO
MASTER_HOST = ‘master_server_ip’
MASTER_USER = ‘replication’
MASTER_PASSWORD = ‘password’
MASTER_LOG_FILE = ‘master_log_file_name’
MASTER_LOG_POS = master_log_positionここで、master_server_ip はマスターサーバーAの IP アドレス、master_log_file_name と master_log_position は、マスターサーバーA で取得されたファイル名とポジションの値です。
- スレーブ複製を開始する:
START SLAVE;次のコマンドを使用して複製ステータスを確認できます:
SHOW SLAVE STATUS\G;Slave_IO_RunningとSlave_SQL_Runningの値がどちらもYesの場合、複製は正常に起動されています。
- リードアンドライトレプリケーションを設定する
- アプリでは、読み込み操作はマスターサーバーA、書き込み操作はマスターサーバーBを指す。
主Aと主Bは配置後、互いに主と従となり、双方 replication が実行できます。片方のサーバー障害時に片方がサービスを継続し、データベースの可用性を確保します。また、読書きを異なるサーバーで行うことで、データベースのパフォーマンスを向上させます。