トップページ > コンテンツ > ネットワーク関連メモ > ネットワーク運用編 > サーバー関連 > 冗長構成 > pacemakerについて > Pacemakerの構築方法

CentOS7にPacemakerの導入する方法をまとめると以下のようになる。

1.パッケージインストール

# yum install pacemaker pcs

※備考:ansibleを使って導入する場合
http://linux-ha.osdn.jp/wp/archives/4618のURL8.8のansibleの設定を参考にすると試しやすい。注意事項は以下。

  • group_varsフォルダのhclaster.sampleはインベントリファイルで指定したグループ名.ymlにrenameして、自分の環境に合わせた設定をすること。
  • bindnetaddrを2台のマシンが属するNW領域(サービス系LAN、pacemaker用LAN)を指定してみた。
  • 00-download.ymlが1.1.16を指定しており、pacemaker-install/tasks/pacemaker-install.ymlの6行目のバージョン記載を合わせる必要があった。

2.クラスタ構築

2-1.クラスタ用ユーザ準備

passwd hacluster

2-2.pcsdサービスの有効化

systemctl start pcsd
systemctl enable pcsd

2-3.ノード間の疎通設定

2-3-1.ノード名の名前解決

# vi /etc/hosts
IPアドレス1 node1
IPアドレス2 node2

2-3-2.Firewallの設定

ファイアウォールの無効化
# systemctl status stop firewalld
または
pacemakerのファイアウォール設定ファイルの有効化
# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --reload

2-4.クラスタ設定

pcs cluster auth node1 node2 -u hacluster
pcs cluster setup --name cluster名 node1 node2
(※)前手順まででpcsdデーモンが稼動しており、node間疎通が取れている必要がある。
(※)本手順で/etc/corosync/corosync.confが生成される。

2-5.クラスタ稼動

pcs cluster start --all

3.設定ファイルの編集

/etc/corosync/corosync.confの編集を行う。基本的にはこのファイルは直接編集するのではなく、pcsコマンド等を使用する。

設定値 意味合い 主な設定例
property no-quorum-policy quorumとは議決権(過半数票)の意味合い。通常quorum設定は3台以上のクラスタ構成時に意味をなし、3台中2台以上のマシンと通信できるマシンをクラスタとして動作させる時に効果を発揮する。2台構成時等quorumを取得できない時のクラスタ動作を規定する設定パラメタ。 property no-quorum-policy="ignore"
stonith-enabled stonithを有効にするか否か。 stonith-enabled="true"
rsc_defaults resource-stickiness リソースとノードの結びつきの強さを表す値。この値が小さいとリソースを動作させるノードが変わりやすい(promotionスコアが大きいノードが出てきたら、それがmasterになる)。この値が大きい(例:INFINITY)とノードが動いている限りリソースも同じノードで動き続ける。
rsc_defaults migration-threshold 何回のリソース故障で切り替えるか。 rsc_defaults migration-threshold="3"
group リソースをグループにまとめる。 group グループ名
  リソース名
  リソース名2
clone 複製するリソースを記述。 clone クローン名
  クローン1
  クローン2
primitive リソースを定義 primitive リソース名 ocf:heartbeat:RA名

詳しくはこちらのサイトが分かりやすい。

4.リソース設定

4-1.リソース生成

pcs resource create リソース名 RA名 RAに渡すパラメータ op オペレーション時の設定

■RA名の例
RA名 概要 パラメータ例
ocf:heartbeat:IPAddr2 仮想IPアドレスを付与 ip=IPアドレス nic=インタフェース名 cidr_netmask=CIDRの値
ocf:heartbeat:Filesystem マウントするファイルシステムの設定 device=マウント対象のデバイス名 directory=マウント先のディレクトリ fstype=ファイルシステムのタイプ
ocf:heartbeat:apache Apache configfile=設定ファイルの指定 statusurl=死活判定のURL
ocf:heartbeat:pgsql Postgres pgctl=pg_ctlの場所 psql=psqlの場所 pgdata=$PGDATAの場所 pgdba=Postgresの所有者 pgport=Postgresのlisteningポート pgdb=データベース名
ocf:pacemaker:ping ping接続状態 dampen=さらなる状態変化に備えた待ち時間(10s等) multiplier=ping接続できているノード分この数値を加算(1000等) host_list=接続状態を確認するのに使用するマシン
systemd:systemdで管理しているサービス systemd管理のサービスをリソースとする
※どんなものがあるかはWeb検索するか、こちらのpcs resource [standards/providers/agents]コマンドを使用すると良い。

■オペレーション時の設定例
op start interval="0s" timeout="300s" on-fail="restart" #開始時の設定。startやstopは実行間隔がないのでintervalは0s
op monitor interval="10s" timeout="60s" on-fail="restart" #監視時の設定。
op stop interval="0s" timeout="300s" on-fail="block" #終了時の設定。startやstopは実行間隔がないのでintervalは0s

詳しくは参考サイト1参考サイト2が分かりやすい。

4-2.リソースの制約条件設定

個々では制約条件の設定例を記載する。

4-2-1.リソース配置制約を持たせる場合(リソースAはノードAで起動等)

# pcs constraint location リソースID rule prefers ノードA=スコア
# pcs constraint location リソースID rule prefers ノードB=スコア
※ノードAの優先度をあげたい場合はノードAのスコア値を高くしておく。

4-2-2.リソース同居制約を持たせる場合(リソースAはリソースBと同一ノードに起動させない等)

# pcs constraint colocation add [master|slave] 制約を受けるリソースID with [master|slave] 先に配置が決定されるリソースID [スコア] [オプション] 
 スコアのオプションにINFINITYを付けると強制的に同一ノードで起動させる等の制約を設けることができるので良く使用する。

4-2-3.リソース起動順序に制約を持たせる場合

# pcs constraint order [アクション] 先に実行するリソースID then [アクション] 後から実行するリソースID [オプション]

詳しくはhttp://linux-ha.osdn.jp/wp/archives/3868が分かりやすい。

5.corosyncの認証鍵設定

# corosync-keygen -l
# scp -p /etc/corosync/authkey xxx@node2:/etc/corosync/authkey

6.クラスタ起動スクリプトの設定

6-1.corosync.serviceの編集

# cp -p /usr/lib/systemd/system/corosync.service /etc/systemd/system
# vi /etc/systemd/system/corosync.service
  ====
  -#Restart=on-failure
  +Restart=on-failure

  -#RestartSec=70
  +RestartSec=70

  -#ExecStartPre=/sbin/modprobe softdog soft_margin=60
  +ExecStartPre=/sbin/modprobe softdog
  ====

6-2.pacemaker.serviceの編集

# cp -p /usr/lib/systemd/system/pacemaker.service /etc/systemd/system
# vi /etc/systemd/system/pacemaker.service
  ====
  -# ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync'
 +ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync'
  ====
最終更新:2021年02月05日 22:29