目次

55 corosync pacemaker

corosync、pacemaker、pcsdで冗長構成

corosync: サーバ間クラスタ。Heartbeatの替わり
pacemaker: crm クラスタ上稼働しているアプリケーション(サービス)を監視、起動、停止
pcsd: 上記クラスタの管理しやすくするデーモン

環境

説明 1号機2号機3号機VIP
HostNamenode01node02node03
Global10.100.10.1110.100.10.1210.100.10.1310.100.10.10
Local01172.16.10.11172.16.10.12172.16.10.13172.16.10.10
Local02192.168.10.11192.168.10.12192.168.10.13192.168.10.10

インストール

# rpm -ivh https://ja.osdn.net/dl/linux-ha/pacemaker-repo-1.1.13-1.1.el6.x86_64.rpm
# sed -i 's/^enabled=1/enabled=0/g' /etc/yum.repos.d/pacemaker.repo
# yum --enablerepo=linux-ha-ja-pacemaker install pacemaker-all corosync pcs clufter-lib-pcs

Corosync用の初期設定

クラスター内で最初のノードで作成

# corosync-keygen

ノードを追加する場合は、キーを配布する

# rsync /etc/corosync/authkey root@192.168.10.12:/etc/corosync/authkey
# rsync /etc/corosync/authkey root@192.168.10.13:/etc/corosync/authkey

Pacemaker初期設定

「PCMK_fail_fast=yes」を追加
※Pacemakerの内部プロセスが死亡した場合にもノード故障とみなす

# sed -i.$(date '+%Y%m%d') '/^#.*PCMK_fail_fast/a\PCMK_fail_fast=yes' /etc/sysconfig/pacemaker

pcsd初期設定

今回はGUIで管理する場合の設定
GUIを利用しない場合は、「DISABLE_GUI=true」にしておく

# sed -i.$(date '+%Y%m%d') 's/^DISABLE_GUI=true/DISABLE_GUI=false/g' /etc/sysconfig/pcsd 

pcsdユーザにパスワード設定

全ノードで設定する。

# passwd hacluster

hostsを設定

こちらも全ノードで設定する。
※ホストが2重で登録されてたりすると、上手くクラスタが組めなかった

192.168.10.11 node01
192.168.10.12 node02
192.168.10.13 node03

pcsd起動

# /etc/init.d/pcsd start

GUIでクラスタ作成

ポート番号は、2224
先程設定したhaclusterユーザでログイン

https://10.100.10.11:2224

CUIの場合

PCS auth

# pcs cluster auth node01 node02 node03 -u hacluster -p [PASSWORD] --force

クラスタ作成

# pcs cluster setup --name pcs_cluster node01 node02 node03

PCS 設定

フィルタの停止と、初期設定

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore

pcs resource defaults resource-stickiness=INFINITY
pcs resource defaults migration-threshold=1

resource追加

pcs resource create rs_vip_g \
           ocf:heartbeat:IPAddr2 \
             ip=10.100.10.10 \
             cidr_netmask=25 \
             nic=eth0 \
           op monitor interval=5s on-fail="restart" \
           --group=gr_zabbix

pcs resource create rs_vip_dedi \
           ocf:heartbeat:IPAddr2 \
             ip=172.16.10.10 \
             cidr_netmask=16 \
             nic=eth1 \
           op monitor interval=5s on-fail="restart" \
           --group gr_zabbix

pcs resource create rs_vip_pc \
           ocf:heartbeat:IPAddr2 \
             ip=192.168.10.10 \
             cidr_netmask=24 \
             nic=eth2 \
           op monitor interval=5s on-fail="restart" \
           --group gr_zabbix

pcs resource create rs_sourcenat_g \
            ocf:pacemaker:SourceNAT \
              ip=10.100.10.10 \
              nic=eth0 \
            op monitor interval=0s on-fail="restart" \
            --group=gr_zabbix

pcs resource create rs_sourcenat_pc \
            ocf:pacemaker:SourceNAT \
              ip=192.168.10.10 \
              nic=eth2 \
            op monitor interval=0s on-fail="restart" \
            --group=gr_zabbix

pcs resource create rs_sourcenat_dedi \
            ocf:pacemaker:SourceNAT \
              ip=172.16.10.10 \
              nic=eth1 \
            op monitor interval=0s on-fail="restart" \
            --group=gr_zabbix

pcs resource create rs_vipcheck_g \
           ocf:heartbeat:VIPcheck \
             target_ip=10.100.10.10 \
             count=5 \
             wait=1s \
           op monitor interval=5s on-fail="restart" \
           --group=gr_zabbix

pcs resource create rs_vipcheck_pc \
           ocf:heartbeat:VIPcheck \
             target_ip=192.168.10.10 \
             count=5 \
             wait=1s \
           op monitor interval=5s on-fail="restart" \
           --group=gr_zabbix

pcs resource create rs_web  \
           ocf:heartbeat:apache \
             configfile=/etc/httpd/conf/httpd.conf \
           op monitor interval=5s on-fail="restart" \
           --group=gr_zabbix

pcs resource create rs_zabbixserver \
           lsb:zabbix-server \
           op monitor interval=5s on-fail="restart" \
           --group=gr_zabbix

pcs resource create rs_cpu \
           ocf:pacemaker:HealthCPU \
             yellow_limit=50 \
             red_limit=20 \
             op monitor interval=60s on-fail="restart" \
           --clone

Clone

pcs resource create rs_ping \
           ocf:pacemaker:ping \
             name=ping_set \
             dampen=5s \
             multiplier=100 \
             use_fping=1 \
             timeout=5s \
             host_list="172.16.10.11 172.16.10.12 172.16.10.13 172.16.10.1" \
           op monitor interval=5s on-fail="restart" \
           op start interval=0 timeout=30s on-fail="restart" \
           op stop interval=0 timeout=30s on-fail="block" \
           --clone --wait=10s

pcs resource create rs_ping_g \
           ocf:pacemaker:ping \
             name=ping_g_set \
             dampen=5s \
             multiplier=100 \
             use_fping=1 \
             timeout=5s \
             host_list="10.100.10.11 10.100.10.12 10.100.10.13 10.100.10.1" \
           op monitor interval=5s on-fail="restart" \
           op start interval=0 timeout=30s \
           op stop interval=0 timeout=30s on-fail="block" \
           --clone --wait=10s

pcs resource create rs_ping_pc \
           ocf:pacemaker:ping \
             name=ping_pc_set \
             dampen=5s \
             multiplier=100 \
             use_fping=1 \
             timeout=5s \
             host_list="192.168.10.11 192.168.10.12 192.168.10.13 192.168.10.1" \
           op monitor interval=5s on-fail="restart" \
           --clone --wait=10s

リソースの制約

pcs constraint location gr_zabbix \
           rule \
             score=-INFINITY \
             not_defined ping_set or ping_set lte 100
             
pcs constraint location gr_zabbix \
           rule \
             score=-INFINITY \
             not_defined ping_g_set or ping_g_set lte 100

pcs constraint location gr_zabbix \
           rule \
             score=-INFINITY \
             not_defined ping_pc_set or ping_pc_set lte 100

pcs constraint location gr_zabbix \
           rule \
             score=-INFINITY \
             not_defined '#health-cpu' or '#health-cpu' eq red

リソースグループの順番変更

# pcs resource group remove gr_zabbix
# pcs resource group add gr_zabbix rs_vipcheck_g rs_vipcheck_pc rs_vip_g rs_vip_pc rs_vip_dedi rs_sourcenat_g rs_sourcenat_pc rs_sourcenat_dedi rs_web rs_zabbixserver

バックアップ・リストア

バクアップ

# pcs config backup backup.$(date '+%Y%m%d')

リストア

# pcs config restore backup.20170306.tar.bz2