2020.08.27
MaxGaugeサーバのHAクラスタ検証 #2
こんにちは、日本エクセム おかむらです。
前回の引き続きでMaxGaugeサーバのHAクラスタ構成の検証です。
今回は、MaxGaugeサーバをHAクラスタ構成で構築する手順について説明していきます。
環境
今回の検証で構築したMaxGaugeサーバの構成は以下の構成です。
システム構成
項目 | 構成 |
---|---|
OS | CentOS7.8 |
クラスタソフト | pacemaker / corosync |
OSはCentOSの7系を利用しました。基本的には、RHEL、OracleLinux のどちらのOSでも同じ手順で構築出来ます。
クラスタソフトは、OSに付属するPacemaker/corosync を利用します。
クラスタ・ノード
ホスト名 | IP | 説明 |
---|---|---|
mfo-server-01 | 172.16.3.32 | MaxGaugeサーバの1号機 |
mfo-server-02 | 172.16.3.33 | MaxGaugeサーバの2号機 |
mfo-server-vip | 172.16.3.131 | クラスタで管理するVIP |
アクティブ・スタンバイの2ノードで構成します。mfo-server-vip はクラスタが管理するVIPでMaxGaugeの各サービスはVIPを利用します。
クラスタで管理するアプリケーション
アプリケーション名 | バージョン |
---|---|
PostgreSQL | 9.6 |
MaxGauge for Oracle | 5.3.J5-2 |
PostgreSQLのデータは共有ストレージ上に配置します。
MaxGaugeは最新版(2020年8月27日現在)を使います。
MaxGaugeサーバで管理するリソースのイメージは以下の図のようになります
- 共有ストレージには、PostgreSQLのデータディレクトリ(PG_DATA)
- PlatformJS(WEBの画面)へのアクセスはVIP経由でアクセス
- MFOのエージェントはVIPに対して収集した性能データを送信する
構築手順
CentOS7.8 にMaxGaugeサーバのHA環境を構築します
OS設定
今回は検証用環境のため、firewalld
サービスを停止しています。
(1号機、2号機の両方のノードで実行します。)
systemctl stop firewalld.service
systemctl disable firewalld.service
共有ディスクのフォーマットとディレクトリ作成
共有ディスクのフォーマットと必要なディレクトリの作成をおこないます。
コマンドの例は、 /dev/sdb2 を共有ディスクとして /maxgauge のパスにマウントする例です。
(1号機、2号機のどちらかのノードで実行します。)
mkfs.xfs /dev/sdb2
mount /dev/sdb2 /maxgauge
mkdir /maxgauge/postgres
chown postgres:postgres /maxgauge/postgres
umount /maxgauge
/maxgauge に共有ディスクをマウントして /maxgauge/postgres をPGDATAとします
pacemaker / corosync
pacemaker / corosync のインストール
YUMコマンドでpacemaker 、corosync関連のRPMをインストールします
(1号機、2号機の両方のノードで実行します。)
yum install pacemaker pcs psmisc policycoreutils-python corosync
pcsd サービスの起動と自動起動を有効にします
(1号機、2号機の両方のノードで実行します。)
systemctl start pcsd
systemctl status pcsd
systemctl enable pcsd
クラスタの初期設定
クラスタのステータス確認用アカウントのパスワードを設定します
(1号機、2号機の両方のノードで実行します。)
passwd hacluster
Clusterの認証設定をします
(1号機、2号機のどちらかのノードで実行します。)
pcs cluster auth mfo-server-01 mfo-server-02
Username: hacluster ← hacluster
Password: ← passwd コマンドで設定したパスワードを設定
対話形式でUsernameとPasswordを入力します
Cluster のセットアップを実行します
(1号機、2号機のどちらかのノードで実行します。)
pcs cluster setup --name maxgauge_cluster mfo-server-01 mfo-server-02
クラスタ名は maxgauge_cluster
で設定しています
クラスタを起動します
(1号機、2号機のどちらかのノードで実行します。)
pcs cluster start --all
ステータスを確認します
pcs status
結果に Online: [ mfo-server-01 mfo-server-02 ]
のように2つのノードがOnlineになっていることを確認します
クラスタのデフォルトの設定
クラスタのデフォルトの設定をします
(1号機、2号機のどちらかのノードで実行します。)
# フェールバックを無効にするため resource-stickiness を INFINITY に設定
pcs resource defaults resource-stickiness=INFINITY
# リソースの故障時のリソース再起動回数を最小値に変更
pcs resource defaults migration-threshold=1
stonith の無効化 (今回VM上で環境を構築したのでstonithは無効)
(1号機、2号機のどちらかのノードで実行します。)
pcs property set stonith-enabled=false
# 設定の確認 (何も表示されなければOK)
crm_verify -L -V
アプリケーションのインストール
PostgreSQLとMaxGauge for Oracleをインストールします。
各アプリケーションは両ノードにインストールしてください。
PostgreSQLのインストール
PostgreSQL 9.6 を公式YUMリポジトリよりインストールします
YUMリポジトリの登録
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7.8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
PostgreSQLのインストール
yum install postgresql96 postgresql96-libs postgresql96-server
psycopg2 のインストール
yum install --disablerepo=* --enablerepo=pgdg96 python2-psycopg2
MaxGuage for Oracle のインストール
MaxGauge for Oracle と必要なRPMをインストールします
JDKのインストール
yum install java-1.8.0-openjdk-devel
MaxGauge for Oracle のインストール
cd <rpmを配置したディレクトリ>
yum install ./mfo-5.3.j5-1.el7.x86_64.rpm \
./mfo-datagather-m-5.3.j5-1.el7.x86_64.rpm \
./mfo-datagather-s1-5.3.j5-1.el7.x86_64.rpm \
./mfo-platformjs-5.3.j5-1.el7.x86_64.rpm \
./mfo-support-5.3.j5-1.el7.x86_64.rpm
PostgreSQLの設定
PostgreSQLのPGDATAを共有ディスク上に作成します
(1号機、2号機のどちらかのノードで実行します。)
共有ディスクのマウント
mount /dev/sdb2 /maxgauge
PGDATAの初期化
su postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /maxgauge/postgres/9.6/data initdb"
PostgreSQLのコンフィグをMaxGauge推奨の設定に変更
su postgres -c "/opt/maxgauge/util/setup/postgresqlconf_setting.sh /maxgauge/postgres/9.6/data/postgresql.conf"
PostgreSQLを手動で起動
su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /maxgauge/postgres/9.6/data -l logfile start"
PostgreSQLのpostgresユーザのパスワードを設定
su -l postgres -c "psql -c \"ALTER USER postgres WITH PASSWORD 'postgres';\""
MFOデータベースを作成
su -l postgres -c "createdb -U postgres MFO"
PostgreSQLのpg_hba.confを設定
export PG_DATA=/maxgauge/postgres/9.6/data/
cp -pv ${PG_DATA}/pg_hba.conf ${PG_DATA}/pg_hba.conf.org
sed -i -e 's/^\(host.*\)ident$/\1md5/g' ${PG_DATA}/pg_hba.conf
PostgreSQLの再起動
su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /maxgauge/postgres/9.6/data -l logfile stop"
su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /maxgauge/postgres/9.6/data -l logfile start"
MFO用のリポジトリの作成
su -l maxgauge -s /bin/bash -c "cd /opt/maxgauge/DGServer_M/bin;echo -e '1\n0\n' | java -jar DGServer.jar install"
PostgreSQLの停止
su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /maxgauge/postgres/9.6/data -l logfile stop"
共有ディスクのアンマウント
umount /dev/sdb2
MaxGauge for Oracleの設定
MaxGauge for Oracle の各種設定をおこないます。
PlatformJSの設定
MaxGauge のWEBアプリケーションサーバ PlatformJSの設定をおこないます
(1号機、2号機の両方のノードで実行します。)
su -l maxgauge -s /bin/bash -c "/opt/maxgauge/util/support/mfo_platformjs_setting.py -v -s"
クラスタのリソース設定
クラスタのリソース設定をします
クラスタのリソース
クラスタで管理するリソースは以下となります
リソース名 | 説明 |
---|---|
SHARE_DISK | 共有ディスクをマウントします |
PGSQL | PostgreSQLのサービスを管理します |
DG_MASTER | MaxGaugeのDataGather Masterのサービスを管理します |
DG_SLAVE1 | MaxGaugeのDataGather Slave1のサービスを管理します |
PLATFORMJS | MaxGaugeのPlatformJSのサービスを管理します |
VIP | クラスタ用のVIPを管理します |
クラスタのリソース追加
クラスタの各リソースを追加します
(1号機、2号機のどちらかのノードで実行します。)
2号機をスタンバイに設定
pcs cluster standby mfo-server-02
共有ディスクのリソース追加
pcs resource create SHARE_DISK ocf:heartbeat:Filesystem \
device="/dev/sdb2" \
directory="/maxgauge" \
fstype="xfs" \
op monitor interval="20s" timeout="40s" \
op start interval="0" timeout="60s" \
op stop interval="0" timeout="60s" \
on-fail="standby" \
--group MXG_GROUP \
--disabled
PostgreSQLのリソース追加
pcs resource create PGSQL ocf:heartbeat:pgsql \
pgctl="/usr/pgsql-9.6/bin/pg_ctl" \
psql="/usr/bin/psql" \
pgdata="/maxgauge/postgres/9.6/data/" \
start_opt="-p 5432" \
pgport="5432" \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op promote timeout="60s" interval="0s" on-fail="restart" \
op demote timeout="60s" interval="0s" on-fail="stop" \
op stop timeout="60s" interval="0s" on-fail="block" \
op notify timeout="60s" interval="0s" \
on-fail="standby" \
--group MXG_GROUP \
--disabled
DataGather Master リソースの追加
pcs resource create DG_MASTER systemd:mfo-dg-master \
op monitor interval="10s" timeout="20s" \
op start interval="5s" timeout="60s" \
op stop interval="5s" timeout="60s" \
on-fail="standby" \
--group MXG_GROUP \
--disabled
DataGather Slave1 リソースの追加
pcs resource create DG_SLAVE1 systemd:mfo-dg-slave1 \
op monitor interval="10s" timeout="20s" \
op start interval="5s" timeout="60s" \
op stop interval="5s" timeout="60s" \
on-fail="standby" \
--group MXG_GROUP \
--disabled
PlatformJSサービスの追加
pcs resource create PLATFORMJS systemd:mfo-platformjs \
op monitor interval="10s" timeout="20s" \
op start interval="5s" timeout="60s" \
op stop interval="5s" timeout="60s" \
on-fail="standby" \
--group MXG_GROUP \
--disabled
VIPの追加
pcs resource create VIP ocf:heartbeat:IPaddr2 ip=172.16.3.131 \
cidr_netmask=24 nic="ens192" \
op monitor interval=10s on-fail="standby" \
--group MXG_GROUP \
--disabled
リソースの起動順を設定
pcs constraint order start SHARE_DISK then PGSQL
pcs constraint order start PGSQL then DG_MASTER
pcs constraint order start DG_MASTER then DG_SLAVE1
pcs constraint order start DG_SLAVE1 then PLATFORMJS
pcs constraint order start PLATFORMJS then VIP
この時点では、全てのリソースが Stopped (disabled)
の状態
pcs status
## コマンドの結果例 ###
Node mfo-server-02: standby
Online: [ mfo-server-01 ]
Full list of resources:
Resource Group: MXG_GROUP
SHARE_DISK (ocf::heartbeat:Filesystem): Stopped (disabled)
PGSQL (ocf::heartbeat:pgsql): Stopped (disabled)
DG_MASTER (systemd:mfo-dg-master): Stopped (disabled)
DG_SLAVE1 (systemd:mfo-dg-slave1): Stopped (disabled)
PLATFORMJS (systemd:mfo-platformjs): Stopped (disabled)
VIP (ocf::heartbeat:IPaddr2): Stopped (disabled)
リソースの起動
停止中のリソースを起動します
(1号機、2号機のどちらかのノードで実行します。)
各リソースの起動
pcs resource enable SHARE_DISK
pcs resource enable PGSQL
pcs resource enable DG_MASTER
pcs resource enable DG_SLAVE1
pcs resource enable PLATFORMJS
pcs resource enable VIP
ステータスを確認して各リソースが起動していることを確認します
pcs status
各リソースが起動した状態の表示例
Node mfo-server-02: standby
Online: [ mfo-server-01 ]
Full list of resources:
Resource Group: MXG_GROUP
SHARE_DISK (ocf::heartbeat:Filesystem): Started mfo-server-01
PGSQL (ocf::heartbeat:pgsql): Started mfo-server-01
DG_MASTER (systemd:mfo-dg-master): Started mfo-server-01
DG_SLAVE1 (systemd:mfo-dg-slave1): Started mfo-server-01
PLATFORMJS (systemd:mfo-platformjs): Started mfo-server-01
VIP (ocf::heartbeat:IPaddr2): Started mfo-server-01
2号機をスタンバイに解除します
pcs cluster unstandby mfo-server-02
pcs stat
コマンドでmfo-server-02(2号機) がオンラインになっていることを確認してください
pcs stat
## コマンドの表示例 ##
Online: [ mfo-server-01 mfo-server-02 ]
Full list of resources:
Resource Group: MXG_GROUP
SHARE_DISK (ocf::heartbeat:Filesystem): Started mfo-server-01
PGSQL (ocf::heartbeat:pgsql): Started mfo-server-01
DG_MASTER (systemd:mfo-dg-master): Started mfo-server-01
DG_SLAVE1 (systemd:mfo-dg-slave1): Started mfo-server-01
PLATFORMJS (systemd:mfo-platformjs): Started mfo-server-01
VIP (ocf::heartbeat:IPaddr2): Started mfo-server-01
HAクラスタ構成の設定は以上になります。
MaxGaugeサーバの設定終了後
設定終了後は、監視対象のOracleデータベースサーバににMaxGaugeのエージェントを設置して管理画面より監視対象のインスタンス情報を登録してください。
最後に
CentOSに付属するクラスタリングソフトでMaxGaugeサーバをHAクラスタ化してみました。今回は、基本的な設定のみ紹介しております、リソースのモニタリング時間や起動時間など環境や要件にあわせて調整してください。MaxGaugeサーバを冗長化構成にしたい などご要望がありましたら、日本エクセムまでご相談ください。