Maxscaleのチュートリアルを読んでいたら、Corosync & Pacemakerを用いてのMaxscaleのHA化についてあったので、試してみる事にした。
今回利用するOSはCentOS 7を用い、Maxscaleはインストール済、SELinuxとFirewalldは無効化済とする。
なお、同じHAのカテゴリとしてLsyncdを用いる手法も紹介されていたが、正直これは単にmaxscale.confを自動同期させるだけでそこまで役に立つものでもないので無視する。
1.Corosync & Pacemakerのインストール
まずは、HA化に必要となるCorosync + Pacemakerをインストールする。
yum -y install pcs fence-agents-all
これで、パッケージのインストールが出来た。
2.クラスタ設定
さて、インストールが終わったら次はCorosync & Pacemakerの設定を行う。
まずは各ノードでホスト名での通信が行えるよう、hostsでIPアドレスとホスト名の紐付けを行う。
この際、自分自身には「current-node」という名称も付与する。
例えば、ホスト名が「BS-PUB-GFRONT-01」\~「BS-PUB-GFRONT-03」まであったと仮定すると、hostsは以下のようになる。
例:hosts(BS-PUB-GFRONT-01)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
XXX.XXX.XXX.35 BS-PUB-GFRONT-01 current-node
XXX.XXX.XXX.36 BS-PUB-GFRONT-02
XXX.XXX.XXX.37 BS-PUB-GFRONT-03
例:hosts(BS-PUB-GFRONT-03)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
XXX.XXX.XXX.35 BS-PUB-GFRONT-01
XXX.XXX.XXX.36 BS-PUB-GFRONT-02
XXX.XXX.XXX.37 BS-PUB-GFRONT-03 current-node
hostsの設定が終わったら、各ノードでcorosyncで用いられるユーザ「hacluster」のパスワード設定を行う。
passwd hacluster
以下のコマンドを実行し、corosync及びpcsdを起動させる。
systemctl start corosync
systemctl start pcsd
systemctl enable pcsd
サービス起動後、以下のコマンドでcorosyncのノード認証を実施し、クラスタを作成・起動する。
pcs cluster auth ノード1 ノード2 ...-u hacluster -p パスワード --force # ノード認証
pcs cluster setup --name maxscale_cluster ノード1 ノード2 ... --force --transport udpu --mcastport0 5405 -- # クラスタ作成
pcs cluster start --all
[root@BS-PUB-GFRONT-01 ~]# pcs cluster auth BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 -u hacluster -p Password --force
BS-PUB-GFRONT-01: Authorized
BS-PUB-GFRONT-03: Authorized
BS-PUB-GFRONT-02: Authorized
[root@BS-PUB-GFRONT-01 ~]# pcs cluster setup --name maxscale_cluster BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 --force --transport udpu --mcastport0 5405
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
BS-PUB-GFRONT-01: Succeeded
BS-PUB-GFRONT-02: Succeeded
BS-PUB-GFRONT-03: Succeeded
Synchronizing pcsd certificates on nodes BS-PUB-GFRONT-01, BS-PUB-GFRONT-02, BS-PUB-GFRONT-03...
BS-PUB-GFRONT-01: Success
BS-PUB-GFRONT-03: Success
BS-PUB-GFRONT-02: Success
Restaring pcsd on the nodes in order to reload the certificates...
BS-PUB-GFRONT-01: Success
BS-PUB-GFRONT-03: Success
BS-PUB-GFRONT-02: Success
[root@BS-PUB-GFRONT-01 ~]# pcs cluster start --all
BS-PUB-GFRONT-03: Starting Cluster...
BS-PUB-GFRONT-02: Starting Cluster...
BS-PUB-GFRONT-01: Starting Cluster...
クラスタ起動後、しばらくしてから以下のコマンドを実行し、ステータス確認を行う。
(起動直後の場合、クラスタ間でのステータスが更新されておらず、Offlineになっていたりする)
pcs status
[root@BS-PUB-GFRONT-01 ~]# pcs status
Cluster name: maxscale_cluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Tue Feb 16 07:13:17 2016 Last change: Tue Feb 16 07:10:34 2016 by root via cibadmin on BS-PUB-GFRONT-02
Stack: corosync
Current DC: BS-PUB-GFRONT-02 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
3 nodes and 0 resources configured
Online: [ BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 ]
Full list of resources:
PCSD Status:
BS-PUB-GFRONT-01: Online
BS-PUB-GFRONT-02: Online
BS-PUB-GFRONT-03: Online
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
クラスタが正常に構成されたことを確認したら、以下のコマンドを実行し設定を追加する。
crm configure property 'stonith-enabled'='false'
crm configure property 'no-quorum-policy'='ignore'
crm configure property 'placement-strategy'='balanced'
crm configure property 'cluster-infrastructure'='classic openais (with plugin)'
crm configure property 'expected-quorum-votes'='3'
[root@BS-PUB-GFRONT-01 ~]# crm configure property 'stonith-enabled'='false'
[root@BS-PUB-GFRONT-01 ~]# crm configure property 'no-quorum-policy'='ignore'
[root@BS-PUB-GFRONT-01 ~]# crm configure property 'placement-strategy'='balanced'
[root@BS-PUB-GFRONT-01 ~]# crm configure property 'cluster-infrastructure'='classic openais (with plugin)'
[root@BS-PUB-GFRONT-01 ~]# crm configure property 'expected-quorum-votes'='3'
[root@BS-PUB-GFRONT-01 ~]# crm configure show
node 1: BS-PUB-GFRONT-01
node 2: BS-PUB-GFRONT-02
node 3: BS-PUB-GFRONT-03
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=1.1.13-10.el7-44eb2dd \
cluster-infrastructure="classic openais (with plugin)" \
cluster-name=maxscale_cluster \
stonith-enabled=false \
no-quorum-policy=ignore \
placement-strategy=balanced \
expected-quorum-votes=3
次に、以下のコマンドでmaxscaleのヘルスチェック関連の設定を追加する。
crm configure primitive MaxScale lsb:maxscale \
op monitor interval="10s" timeout="15s" \
op start interval="0" timeout="15s" \
op stop interval="0" timeout="30s"
[root@BS-PUB-GFRONT-01 ~]# crm configure primitive MaxScale lsb:maxscale \
> op monitor interval="10s" timeout="15s" \
> op start interval="0" timeout="15s" \
> op stop interval="0" timeout="30s"
[root@BS-PUB-GFRONT-01 ~]# crm configure show
node 1: BS-PUB-GFRONT-01
node 2: BS-PUB-GFRONT-02
node 3: BS-PUB-GFRONT-03
primitive MaxScale lsb:maxscale \
op monitor interval=10s timeout=15s \
op start interval=0 timeout=15s \
op stop interval=0 timeout=30s
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=1.1.13-10.el7-44eb2dd \
cluster-infrastructure="classic openais (with plugin)" \
cluster-name=maxscale_cluster \
stonith-enabled=false \
no-quorum-policy=ignore \
placement-strategy=balanced \
expected-quorum-votes=3
設定追加後、再度ステータスを確認する。
[root@BS-PUB-GFRONT-02 ~]# crm status
Last updated: Tue Feb 16 07:22:20 2016 Last change: Tue Feb 16 07:19:44 2016 by root via cibadmin on BS-PUB-GFRONT-01
Stack: classic openais (with plugin)
Current DC: BS-PUB-GFRONT-02 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
3 nodes and 1 resource configured, 3 expected votes
Online: [ BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 ]
Full list of resources:
MaxScale (lsb:maxscale): Started BS-PUB-GFRONT-03
これで、クラスタの基本的な設定が完了した。
3.仮想IPの設定
次に、maxscaleクラスタで仮想IPを設定することで、共通のIPアドレスを指定しておけばノード障害が発生してもフェイルオーバーが発生するだけで済むようにする。
クラスタ構成ノードで、以下のコマンドを実行する。
crm configure primitive maxscale_vip ocf:heartbeat:IPaddr2 params ip=IPアドレス cidr_netmask=サブネット op monitor interval=10s
crm configure group maxscale_service maxscale_vip MaxScale
上記コマンド実行後、ステータスを確認すると以下のようになっている。
[root@BS-PUB-GFRONT-03 ~]# crm configure primitive maxscale_vip ocf:heartbeat:IPaddr2 params ip=172.28.0.230 cidr_netmask=24 op monitor interval=10s
[root@BS-PUB-GFRONT-03 ~]# crm configure group maxscale_service maxscale_vip MaxScale
[root@BS-PUB-GFRONT-03 ~]# crm status
Last updated: Tue Feb 16 08:29:12 2016 Last change: Tue Feb 16 08:29:10 2016 by root via cibadmin on BS-PUB-GFRONT-03
Stack: classic openais (with plugin)
Current DC: BS-PUB-GFRONT-02 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
3 nodes and 2 resources configured, 3 expected votes
Online: [ BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 ]
Full list of resources:
Resource Group: maxscale_service
maxscale_vip (ocf::heartbeat:IPaddr2): Started BS-PUB-GFRONT-01
MaxScale (lsb:maxscale): Started BS-PUB-GFRONT-01
これで、クラスタで共通で利用される仮想IPの設定ができた。
なお、この仮想IPからmaxscaleに接続するにあたり、以下の設定を書き換える必要があるので注意。
[CLI Listener]
type=listener
service=CLI
protocol=maxscaled
#address=localhost
address=仮想IPアドレス
port=6603
これで、仮想IPアドレス(現時点だと、BS-PUB-GFRONT-01)から後ろのGaleraClusterに接続出来るようになった
[root@BS-PUB-GFRONT-02 ~]# mysql -u test -ppassword -h 172.28.0.230
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 20943
Server version: 5.5.42-MariaDB MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
なお、フェイルオーバーした際は自動的に元のマスターノードに戻らないので注意。
何かメンテナンスがある際は、ちゃんと直前にどこかマスターになっているのか確認すること。
[root@BS-PUB-GFRONT-02 ~]# crm status
Last updated: Tue Feb 16 08:46:51 2016 Last change: Tue Feb 16 08:46:24 2016 by hacluster via crmd on BS-PUB-GFRONT-03
Stack: corosync
Current DC: BS-PUB-GFRONT-03 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
3 nodes and 2 resources configured
Online: [ BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 ]
Full list of resources:
Resource Group: maxscale_service
maxscale_vip (ocf::heartbeat:IPaddr2): Started BS-PUB-GFRONT-01
MaxScale (lsb:maxscale): Started BS-PUB-GFRONT-01
[root@BS-PUB-GFRONT-02 ~]# pcs cluster stop BS-PUB-GFRONT-01
BS-PUB-GFRONT-01: Stopping Cluster (pacemaker)...
BS-PUB-GFRONT-01: Stopping Cluster (corosync)...
[root@BS-PUB-GFRONT-02 ~]# crm status
Last updated: Tue Feb 16 08:47:02 2016 Last change: Tue Feb 16 08:46:24 2016 by hacluster via crmd on BS-PUB-GFRONT-03
Stack: corosync
Current DC: BS-PUB-GFRONT-03 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
3 nodes and 2 resources configured
Online: [ BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 ]
OFFLINE: [ BS-PUB-GFRONT-01 ]
Full list of resources:
Resource Group: maxscale_service
maxscale_vip (ocf::heartbeat:IPaddr2): Started BS-PUB-GFRONT-02
MaxScale (lsb:maxscale): Started BS-PUB-GFRONT-02
[root@BS-PUB-GFRONT-02 ~]# pcs cluster start BS-PUB-GFRONT-01
BS-PUB-GFRONT-01: Starting Cluster...
[root@BS-PUB-GFRONT-02 ~]# crm status
Last updated: Tue Feb 16 08:47:48 2016 Last change: Tue Feb 16 08:46:07 2016 by hacluster via crmd on BS-PUB-GFRONT-03
Stack: corosync
Current DC: BS-PUB-GFRONT-03 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
3 nodes and 2 resources configured
Online: [ BS-PUB-GFRONT-01 BS-PUB-GFRONT-02 BS-PUB-GFRONT-03 ]
Full list of resources:
Resource Group: maxscale_service
maxscale_vip (ocf::heartbeat:IPaddr2): Started BS-PUB-GFRONT-02
MaxScale (lsb:maxscale): Started BS-PUB-GFRONT-02
これで、無事にMaxscaleの冗長化設定ができた。
動作としては、Active-Stanbyとなってしまうのだが、LB専用VMとしてMaxscaleを構築するのであれば、冗長化の一つの方法になるだろう。