corosync、pacemaker、pcsdで冗長構成
corosync: サーバ間クラスタ。Heartbeatの替わり
pacemaker: crm クラスタ上稼働しているアプリケーション(サービス)を監視、起動、停止
pcsd: 上記クラスタの管理しやすくするデーモン
説明 | 1号機 | 2号機 | 3号機 | VIP |
---|---|---|---|---|
HostName | node01 | node02 | node03 | |
Global | 10.100.10.11 | 10.100.10.12 | 10.100.10.13 | 10.100.10.10 |
Local01 | 172.16.10.11 | 172.16.10.12 | 172.16.10.13 | 172.16.10.10 |
Local02 | 192.168.10.11 | 192.168.10.12 | 192.168.10.13 | 192.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-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
「PCMK_fail_fast=yes」を追加
※Pacemakerの内部プロセスが死亡した場合にもノード故障とみなす
# sed -i.$(date '+%Y%m%d') '/^#.*PCMK_fail_fast/a\PCMK_fail_fast=yes' /etc/sysconfig/pacemaker
今回はGUIで管理する場合の設定
GUIを利用しない場合は、「DISABLE_GUI=true」にしておく
# sed -i.$(date '+%Y%m%d') 's/^DISABLE_GUI=true/DISABLE_GUI=false/g' /etc/sysconfig/pcsd
全ノードで設定する。
# passwd hacluster
こちらも全ノードで設定する。
※ホストが2重で登録されてたりすると、上手くクラスタが組めなかった
192.168.10.11 node01 192.168.10.12 node02 192.168.10.13 node03
# /etc/init.d/pcsd start
ポート番号は、2224
先程設定したhaclusterユーザでログイン
https://10.100.10.11:2224
# pcs cluster auth node01 node02 node03 -u hacluster -p [PASSWORD] --force
# pcs cluster setup --name pcs_cluster node01 node02 node03
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
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
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