L
o
a
d
i
n
g
.
.
.

ホーム

お知らせ

製品・ソリューション

サービス

導入事例・パートナー

EXEM Academy・ブログ

会社情報

採用情報

2020.08.27

MaxGaugeサーバのHAクラスタ検証 #2

こんにちは、日本エクセム おかむらです。
前回の引き続きでMaxGaugeサーバのHAクラスタ構成の検証です。

今回は、MaxGaugeサーバをHAクラスタ構成で構築する手順について説明していきます。

環境

今回の検証で構築したMaxGaugeサーバの構成は以下の構成です。

システム構成

項目構成
OSCentOS7.8
クラスタソフトpacemaker / corosync

OSはCentOSの7系を利用しました。基本的には、RHEL、OracleLinux のどちらのOSでも同じ手順で構築出来ます。
クラスタソフトは、OSに付属するPacemaker/corosync を利用します。

クラスタ・ノード

ホスト名IP説明
mfo-server-01172.16.3.32MaxGaugeサーバの1号機
mfo-server-02172.16.3.33MaxGaugeサーバの2号機
mfo-server-vip172.16.3.131クラスタで管理するVIP

アクティブ・スタンバイの2ノードで構成します。mfo-server-vip はクラスタが管理するVIPでMaxGaugeの各サービスはVIPを利用します。

クラスタで管理するアプリケーション

アプリケーション名バージョン
PostgreSQL9.6
MaxGauge for Oracle5.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共有ディスクをマウントします
PGSQLPostgreSQLのサービスを管理します
DG_MASTERMaxGaugeのDataGather Masterのサービスを管理します
DG_SLAVE1MaxGaugeのDataGather Slave1のサービスを管理します
PLATFORMJSMaxGaugeの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サーバを冗長化構成にしたい などご要望がありましたら、日本エクセムまでご相談ください。