CentOS7でGalera Cluster(MariaDB10.1)
さくらのクラウドを利用して、ローカルネットワーク内でMariaDB10.1系から標準搭載されている、Galera Cluster(MariaDB10.1)を構築しました。
このGalera Clusterはマスター・スレーブ方式のレプリケーションとは異なり、全てのサーバーで読み込み書き込み可能な仕組みとなります。
そのためどのサーバーを更新しても、全てのサーバーに反映されるといったことが特徴です。
この特徴によって、一部のノード(サーバー)がダウンしても他のノードが残っていればサービスが維持できたり、マスターサーバーへの負荷を分散させることができます。
詳しくは、下記のサイトが参考になると思うので、興味がある方はぜひ読んでみてください。
参考:
https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/
https://www.s-style.co.jp/lp/galera/
前提条件
ローカルネットワークで構築したCentOS7のサーバー4台
- Globalサーバー(eth0:グローバルIPアドレス、eth1:192.168.0.1)
- MariaDB1(eth0:192.168.0.2)
- MariaDB2(eth0:192.168.0.3)
- MariaDB3(eth0:192.168.0.4)
- Globalサーバーのeth1と、MariaDB1,2,3のeth0を繋いだスイッチ
※Galera Clusterのノード数の注意点として、過半数に満たないクラスターに所属するノードは処理を受け付けなくなるため、ノードの構成は奇数台にしなければいけない。
そのため今回は、最小ノード構成数の3台で行います。
参考:
https://www.s-style.co.jp/blog/2018/06/1906/
ローカルリポジトリを構築しインストール
MariaDB各種サーバーはインターネットと疎通がないため、Globalサーバーでyumリポジトリを構築しなければいけない。
そのためGlobalサーバーでローカルリポジトリ作成後、そのローカルリポジトリーを参照し、MariaDB各種サーバーでGalera Cluster導入に必要なパッケージをインストールする。
リポジトリとなるディレクトリを作成
# mkdir /root/MyRepo
MariaDB10.1を/root/MyRepoにダウンロード
公式サイトを参考に自分の環境に合うMariaDB10.1のリポジトリを追加、/root/MyRepoにダウンロードする。
# vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# yum install -y --downloadonly --downloaddir=/root/MyRepo MariaDB-server MariaDB-client
policycoreutils-pythonを/root/MyRepoにダウンロード
SELinuxでアクセス制限を無効にしないとGaleraClusterの起動に失敗してしまうため、MariaDBのアクセス制限だけを無効にする設定に必要な、policycoreutils-pythonを上記と同様にダウンロード。
# yum install -y --downloadonly --downloaddir=/root/MyRepo policycoreutils-python
ローカルリポジトリを構築
createrepoというツールを使い、ローカルリポジトリを作成する。
# yum install -y createrepo
# createrepo /root/MyRepo/
成功したら、/root/MyRepo/下にrepodataディレクトリが作成されている。
# ls /root/MyRepo/repodata/
ローカルリポジトリ参照設定
作成したローカルリポジトリをyumに参照させるために、yumの参照リポジトリ一覧である/etc/yum.repos.d/にrepoファイルを作る。
# vi /etc/yum.repos.d/MyRepo.repo
[MyRepo]
name=MyRepo
baseurl=file:///root/MyRepo
gpgcheck=0
yumのMyRepoリポジトリに、ダウンロードしたRPMパッケージがあるか確認。
# yum list all | grep MyRepo
MariaDB1,2,3にローカルリポジトリを同期
Globalサーバーで作成した、ローカルリポジトリとローカルリポジトリの参照設定をMariaDB1,2,3にssh接続で同期する。
# rsync -av -e ssh /root/MyRepo/ root@192.168.0.2:/root/MyRepo/
# rsync -av -e ssh /etc/yum.repos.d/MyRepo.repo/ root@192.168.0.2:/etc/yum.repos.d/MyRepo.repo/
//MariaDB2(192.168.0.3)、MariaDB3(192.168.0.4)にも同様に設定
ローカルリポジトリを参照してインストール
ローカルリポジトリを参照して、MariaDB10.1とpolicycoreutils-pythonをMariaDB1,2,3内でインストールする。
# yum install -y --disablerepo=\* --enablerepo=MyRepo MariaDB-server MariaDB-client
# mysql_secure_installation //MySQLの初期設定
# yum install -y --disablerepo=\* --enablerepo=MyRepo policycoreutils-python
//MariaDB2(192.168.0.3)、MariaDB3(192.168.0.4)にも同様にインストール
Galera Clusterのノード設定
MariaDB1,2,3にGalera Clusterのノード設定を、/etc/my.cnf.d/server.cnfにする。
[galera]
# Mandatory settings
# レプリケーションに使うGaleraライブラリのパスを指定
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# wsrep_cluster_addressはノードのIP一覧
wsrep_cluster_address=gcomm://192.168.0.2,192.168.0.3,192.168.0.4
# デフォルト
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# クラスタリングを有効化するオプション
wsrep_on=ON
# 管理用のクラスタ名
wsrep_cluster_name=DBCLUSTER
# 自身のノードの名称を示すのでノードごとに変更
wsrep_node_name=DBCLUSTER-NODE1
# 自身のIPを示すのでノードごとに変更
wsrep_node_address=192.168.0.2
wsrepという記述は、Galera Clusterでレプリケーションの設定をするためのもの。
一番最初に立ち上げるサーバには既存サーバが無いため、gcomm:// の記述をする。
firewallのポート解放
Galera Clusterに必要なポートを解放する必要があるので、firewalldで3306:mysql, 4567:replication, 4444:rsyncのポートを解放。
# firewall-cmd --add-port=3306/tcp --add-port=4567/tcp --add-port=4444/tcp --permanent
# firewall-cmd --reload
SELinuxのPermissive設定
アクセス制限を無効にするが警告をだすPermissiveの設定を、MariaDB(MySQL)のみに設定する。
# semanage permissive -a mysqld_t
Galera Clusterノード起動
MariaDB2,3が起動していないことを確認し、MariaDB1のノードで新規クラスターを起動する。
# galera_new_cluster
その後、MariaDB2,3では、通常通り起動。
# systemctl start mariadb
wsrep_local_state_commentがSyncedになっており、起動したノードがwsrep_incoming_addressesに含まれていることを確認。
# mysql -u root -p -e "show status like 'wsrep_%';"
//部分抜粋
+---------------------------+-------------------------------------------------+
| Variable_name | Value |
+---------------------------+-------------------------------------------------+
| wsrep_local_state_comment | Synced |
| wsrep_incoming_addresses | 192.168.0.2,192.168.0.3,192.168.0.4 |
+---------------------------+-------------------------------------------------+
最終確認
最後に、それぞれのMariaDBでDBやテーブルを追加しても、他のノードでも反映されているか確認し、成功していたら、CentOS7でGalera Cluster(MariaDB10.1)の構築は終了です。
参考URL
https://qiita.com/egnr-in-6matroom/items/f6af7318e850206bc424
https://qiita.com/Sa2Knight/items/bec1c24d78719c01a705
https://sky-joker.tech/2016/10/10/mariadb-galera-cluster%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/
https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/
https://www.s-style.co.jp/lp/galera/
https://www.s-style.co.jp/blog/2018/06/1906/
https://serversmanvps.xn--ockc3f5a.com/2017/12/22/mysql%E3%81%A7%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9E%E3%82%B9%E3%82%BF-galera-cluster/