複数台構成でDBを同期させるお話
大規模なサイト等ではサーバ構成を冗長化する場合があります。
メリットとしては負荷分散できるためアクセス集中時に1台構成よりも落ちにくい、メンテナンス時にサイトを停止しなくていい等があります。
デメリットはコストがかかるってことですかね。
例えば3台構成にした際にファイルの同期はlsyncdとかを使います。
DBの同期は構成によって様々ですが今回はMariaDBのGalera Clusterについてまとめます。
Galera Cluster
MariaDBを各サーバに持っていてそれぞれを同期させます。
IPは下記とします。
db1
IP:***.***.***.10
db2
IP:***.***.***.20
db3
IP:***.***.***.30
まずは各DBを停止しておきます。
systemctl stop mysql
下記のように設定ファイルに記述していきます。
/etc/my.cnf.d/server.cnf
[galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://***.***.***.20,***.***.***.30" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 bind-address=0.0.0.0 wsrep_cluster_name="KUSANAGI_DB_Cluster_v2" wsrep_node_address="***.***.***.10" wsrep_sst_method=rsync wsrep_retry_autocommit=3 wsrep-sync-wait=0 wsrep_slave_threads=2 wsrep_on=ON
wsrep_node_addressに自サーバのIP、wsrep_cluster_addressに他サーバのIPを記述します。
最初にdb1を起動します。
1番目に起動する際は下記のコマンドを実施します。
galera_new_cluster
続けてdb2、db3を起動します。
systemctl start mariadb
それぞれDBに接続して下記コマンドを実施します。
show status like 'wsrep_%';
wsrep_local_state_commentがSyncedになっていて、wsrep_incoming_addressesに他サーバのIPが表示されていればOKです。
あとはテーブルを作成したりデータを追加・更新・削除したりして同期されるか確認して完了です。
手軽にサクッと構築できて便利です。
コメント