クラスタ構築(3)リソースの登録と運用コマンド

Pacemaker + Corosync で構成したクラスタ内にリソースを登録し、サービスの冗長化を行う。

リソースの登録

  • 仮想IPリソースの登録
    リソースタイプocf:heartbeat:IPaddr2は、仮想IPv4アドレスを意味する。以下の例では、30秒ごとにリソースの監視を行う。
pcs resource create myvip ocf:heartbeat:IPaddr2 ip=192.168.0.11 cidr_netmask=24 op monitor interval=30s
  • Systemdリソースの登録
    以下の例では、10秒ごとにリソースの監視を行い、20秒で動作失敗と判断する。
pcs resource create httpd systemd:httpd params op monitor interval=10s timeout=20s
  • グループ登録
    複数のリソースを1つのグループに登録することができる。
    グループに登録すると、各リソースの起動や乗り換えは、グループ単位で行われる。
pcs resource group add mygroup enq_ext_vip myvip httpd

リソースの制約

各リソースには、起動順序や起動場所、起動条件などのリソース制約を課すことができる。

  • 起動場所の制約
    以下の例では、httpdリソースはホストcluster01で優先して起動する。
pcs constraint location httpd prefers cluster01
  • 起動順序の制約
    以下の例では、httpdリソースはmariadb-cloneの起動のあとに起動する。
pcs constraint order mariadb-clone then httpd
  • 起動条件の制約
    以下の例では、httpdリソースはマスターDBが起動している場所で起動する。
pcs constraint colocation add httpd with master mariadb-clone

運用コマンド

Pacemaker + Corosync によるクラスタ構成の監視および運用で使用するコマンドは以下の通り。

  • クラスタの起動と終了
pcs cluster start --all
pcs cluster stop --all
  • クラスタの状態監視
# 状態表示
pcs status
# リアルタイム状態表示
crm_mon
# クラスタ間通信の状態表示
corosync-cfgtool -s
# 設定確認
pcs config

クラスタ構築(2)MySQL/MariaDBレプリケーション

前回PacemakerCorosync を用いてクラスタ環境のセットアップを行った。今回は、MySQL/MariaDBをリソースに設定し、レプリケーション設定を行う。

MySQL/MariaDBレプリケーション

レプリケーションの実行環境を以下のように定義する。

項目 内容
マスター 192.168.0.11
スレーブ 192.168.0.12
対象データベース mydatabase
レプリケーションユーザ repl
レプリケーションユーザパスワード replpass

レプリケーションユーザは、REPLICATION SLAVE もしくは REPLICATION CLIENT の権限を必要とする。なお、Pacemaker と Corosyncでレプリケーションを行う場合は、これに加えて、GRANT, SUPER, RELOAD, PROCESS の権限も必要とする。

レプリケーション設定

マスターDBに対して以下の操作を行う。

  • server-idの設定
vi /etc/my.cnf

# レプリケーション対象DBの指定
replicate-do-db=mydatabase
# サーバ固有のIDを設定
server-id=1
# バイナリログを出力
log-bin=mysql-bin
  • データベースをロック
FLUSH TABLES WITH READ LOCK;
  • データベースの内容をダンプファイルに吐き出し
mysqldump --skip-lock-tables -h 192.168.0.11 -u repl -preplpass mydatabase > /tmp/database.sql
  • バイナリログの状態を確認
    スレーブDBにマスターDBのバイナリログの位置を指定するために事前に確認しておく。
SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      245 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

スレーブDBに対して以下の操作を行う。

  • server-idの設定
vi /etc/my.cnf

# レプリケーション対象DBの指定
replicate-do-db=mydatabase
# サーバ固有のIDを設定
server-id=2
# バイナリログを出力
log-bin=mysql-bin
# マスターDBの更新もバイナリログに記録する
log_slave_updates
  • 既存のDBを削除と再作成
DROP DATABASE IF EXISTS mydatabase;
CREATE DATABASE IF NOT EXISTS mydatabase;
  • ダンプファイルの読み込み
    さきほどダンプしたマスターDBのダンプファイルをスレーブDBに読み込ませる。
mysql -u repl -h 192.168.0.12 -preplpass mydatabase < /tmp/database.sql
  • マスターDBの指定
CHANGE MASTER TO MASTER_HOST='192.168.0.11', MASTER_USER='repl', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=245;
  • スレーブの開始
SLAVE START;

最後にマスターDBで以下の操作を行う

  • データベースのロックを解除
UNLOCK TABLES;

Pacemaker と Corosyncを用いたレプリケーション設定

Pacemaker と Corosync を用いてレプリケーションを設定する場合は、以下の手順で行う。

  • DBリソースの登録
    mariadb-replという名前でDBリソースを登録する。
pcs resource create mariadb-repl ocf:heartbeat:mysql binary=/usr/bin/mysqld_safe pid=/var/run/mariadb/mariadb.pid datadir=/var/lib/mysql log=/var/log/mariadb/mariadb.log replication_user=repl replication_passwd=replpass op start interval=0 timeout=120s op stop interval=0 timeout=120s op monitor interval=20s timeout=30s op monitor interval=10s role=Master timeout=30s op monitor interval=30s role=Slave timeout=30s op promote interval=0 timeout=120s op demote interval=0 timeout=120s op notify interval=0 timeout=90s
  • レプリケーションリソースの登録
    mariadb-cloneという名前でレプリケーションリソースを登録する。
pcs resource master mariadb-clone mariadb-repl master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true"
  • リソース制約の設定
    192.168.0.11がマスターDBとなるようにリソース制約を設定する。
pcs constraint location mariadb-clone prefers 192.168.0.11

クラスタ構築(1)Pacemaker + Corosync の設定

障害が発生した場合でも継続してサービスを稼働可能な冗長性の高いサーバを構築する手法の1つに、複数のサーバを連携させるHAクラスタリングが存在する。今回は、PacemakerCorosyncという2つのOSSを使用して、HAクラスタリングを実現させる。1つのサーバに障害が発生した場合でも他方のサーバで処理をカバーするために、ダウンタイムを減少させることができる。

Pacemakerは、死活監視を行って、障害の発生を検知するサービスで、障害発生時にはシステムチェンジを行って待機系が処理を継続する。対象となるネットワークインタフェースや各サービスなどをリソースと呼び、リソース単位で障害検知や障害時の挙動を指定できる。ただし、Pacemakerは、Heartbeatプロジェクトの一部機能が切り出されたサービスであるため、これ単独では機能しない。そこで、ノードの監視を行うCorosyncというサービスと組み合わせて使用することが多い。

環境構築

Pacemaker + Corosync でクラスタを構築する手順は以下の通り。

必要なパッケージのインストール

yum install -y pacemaker, corosync, pcs, elfutils-libelf-devel

haclusterユーザの追加

PacemakerやCorosyncを制御するpcsコマンドを実行するためのユーザを作成する。

useradd hacluster  
passwd hacluster  

hostsファイルの編集

ホスト名でノードを指定できるようにするために、hostsファイルを編集する。今回の例では、cluster01 と cluster02 の2つのノードが存在するものとする。

vi /etc/hosts
192.168.0.11 cluster01
192.168.0.12 cluster02

クラスタ設定の初期化

念のため全てのクラスタ設定を一度初期化する。

pcs cluster destroy

クラスタサービスの起動

systemctl start pcsd
systemctl enable pcsd

クラスタのセットアップ

以下の作業は、クラスタを構成する複数のサーバのうちプライマリとなる1つのサーバのみで行う。

ユーザの認証

各ノードに対して、pcsコマンドを実行するhaclusterユーザの認証を行う。一度認証すると次から認証は求められない。なお、トークンなどの認証情報は/var/lib/pcsd/tokensに格納される。

pcs cluster auth cluster01 cluster02 -u hacluster -p hacluster

クラスタの作成

クラスタの生成を行う。今回の例では、cluster01 と cluster02 の2つのノードから構成される mycluster というクラスタを生成するものとする。

pcs cluster setup --name mycluster cluster01 cluster02

クラスタの開始

pcs cluster start --all
pcs cluster enable --all

STONITH機能の停止

クラスタ構成自体に異常が起きた場合の影響を最小限に抑えるために、異常が起きたノードのシャットダウンを行うSTONITH機能が存在するが、今回はとりあえず機能の停止を行い、STONITH機能については別途設定を行う。

pcs property set stonith-enabled=false