2016年11月9日水曜日

LIO Cluster [LIO, DRBD, Pacemaker による冗長化 iSCSI Target] (その6)pcs,Corosync,Pacemaker の基本設定


Corosync と Pacemaker の設定ツールである pcs の設定を行います。


echo 'password' | sudo passwd --stdin hacluster

sudo usermod -a -G haclient admin
sudo usermod -a -G haclient monitor

sudo cp -a /etc/shadow   /etc~/shadow_$(date +%Y%m%d_%H%M%S)
sudo cp -a /etc/shadow-  /etc~/shadow-_$(date +%Y%m%d_%H%M%S)
sudo cp -a /etc/group    /etc~/group_$(date +%Y%m%d_%H%M%S)
sudo cp -a /etc/group-   /etc~/group-_$(date +%Y%m%d_%H%M%S)

sudo systemctl start pcsd
sudo systemctl enable pcsd


Corosync のサービス設定を変更します。カーネル内のソフトウェア watchdog 機能を有効化します。


sed -e 's/^#Restart=on-failure.*$/Restart=on-failure/' \
 -e 's/^#RestartSec=.*$/RestartSec=70/' \
 -e 's%^#ExecStartPre=/sbin/modprobe softdog soft_margin=.*$%ExecStartPre=/sbin/modprobe softdog soft_margin=6%' \
 /usr/lib/systemd/system/corosync.service | sudo tee /etc/systemd/system/corosync.service


Pacemaker のサービス設定を変更します。Pacemaker サービス停止時に Corosync サービスを停止します。Pacemaker の内部プロセス障害をノード障害(クラスタ関連全プロセス障害)として扱うようにします。


sed -e "s%^# ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync'$%ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync'%" \
 /usr/lib/systemd/system/pacemaker.service | sudo tee /etc/systemd/system/pacemaker.service
sudo sed -i -e 's/^# PCMK_fail_fast=.*$/PCMK_fail_fast=yes/' /etc/sysconfig/pacemaker


Pacemaker のリソース設定スクリプトを作成します。


cat << 'EOF' | sudo tee /etc/ha.d/crm.sh
#!/bin/bash
pcs property set batch-limit=30
pcs property set cluster-delay=60
pcs property set cluster-recheck-interval=15min
pcs property set crmd-finalization-timeout=30min
pcs property set crmd-integration-timeout=3min
pcs property set crmd-transition-delay=0s
pcs property set dc-deadtime=20s
pcs property set default-action-timeout=20
pcs property set election-timeout=2min
pcs property set enable-acl=true --force
pcs property set enable-startup-probes=true
pcs property set is-managed-default=true
pcs property set load-threshold=80%
pcs property set maintenance-mode=false
pcs property set migration-limit=-1
pcs property set no-quorum-policy=ignore
pcs property set node-action-limit=0
pcs property set node-health-green=0
pcs property set node-health-red=-INFINITY
pcs property set node-health-strategy=none
pcs property set node-health-yellow=0
pcs property set notification-agent=/dev/null
pcs property set pe-error-series-max=100
pcs property set pe-input-series-max=100
pcs property set pe-warn-series-max=100
pcs property set placement-strategy=default
pcs property set remove-after-stop=false
pcs property set shutdown-escalation=20min
pcs property set start-failure-is-fatal=true
pcs property set startup-fencing=true
pcs property set stonith-action=reboot
pcs property set stonith-enabled=false
pcs property set stonith-timeout=60
pcs property set stop-all-resources=false
pcs property set stop-orphan-actions=true
pcs property set stop-orphan-resources=true
pcs property set symmetric-cluster=true

pcs resource defaults resource-stickiness=200 migration-threshold=2

pcs acl role create write-access description="Full access" write xpath /cib
pcs acl role create read-only description="Read access to cluster" read xpath /cib

pcs acl user create admin write-access
pcs acl user create monitor read-only

pcs resource create p_drbd_r0 ocf:linbit:drbd \
  params drbd_resource=r0 \
  op start                            timeout=240 \
  op monitor interval=10 role=Master timeout=20 \
  op monitor interval=20 role=Slave  timeout=20 \
  op notify                           timeout=90 \
  op stop                             timeout=100 \
  op promote                          timeout=90 \
  op demote                           timeout=90

pcs resource master ms_drbd_r0 p_drbd_r0 \
  meta master-max=1 master-node-max=1 clone-max=2 \
  clone-node-max=1 notify=true target-role=Started \
  is-managed=true

pcs resource create p_lvm ocf:heartbeat:LVM \
  params volgrpname=vg1 \
  op start               timeout=30 \
  op monitor interval=5 timeout=10 \
  op stop                timeout=30

pcs resource create p_lio ocf:heartbeat:LIO \
  params iqn=iqn.2016-09.com.example:iscsitgt01 \
  op start               timeout=10 \
  op monitor interval=5 timeout=5 \
  op stop                timeout=10

pcs resource create p_vip ocf:heartbeat:VIP \
  params ip=10.110.88.59 cidr_netmask=26 nic=bond0 iflabel=1 arp_interval=200 arp_count=5 \
  op start               timeout=20 \
  op monitor interval=5 timeout=10 \
  op stop                timeout=20

pcs resource group add g_tgt p_lvm p_lio p_vip

pcs constraint location add lc_tgt g_tgt iscsitgt01a.example.com 100

pcs constraint colocation add g_tgt \
  ms_drbd_r0 INFINITY with-rsc-role=Master

pcs constraint order promote ms_drbd_r0 then start p_lvm
EOF
sudo chmod 755 /etc/ha.d/crm.sh


※ ここからの作業は、Active 機と Stand-by 機が連動して動作していく前提の操作となります。

バックアップをしたり、クローニングして IP アドレスとホスト名を調整する、といった作業は、ここが一つの目安となります。

Active 機と Stand-by 機の間の疎通を確認します。


ping -c 1 -M do -s 8972 10.110.88.57 || echo Error
traceroute -F 10.110.88.57 8972

ping -c 1 -M do -s 8972 10.110.88.58 || echo Error
traceroute -F 10.110.88.58 8972

ping -c 1 -M do -s 8972 192.168.1.2 || echo Error
traceroute -F 192.168.1.2 8972

ping -c 1 -M do -s 8972 192.168.1.3 || echo Error
traceroute -F 192.168.1.3 8972


Active 機で ssh 鍵を作成し、Stand-by 機にコピーします。


ssh-keygen -q -f ~/.ssh/id_rsa -N ""
mv -f ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
scp -pr .ssh/ iscsitgt01s:
The authenticity of host 'iscsitgt01s (10.110.88.58)' can't be established.
ECDSA key fingerprint is cf:3a:39:91:fc:c9:ac:5c:4e:16:38:72:97:88:28:b2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'iscsitgt01s,10.110.88.58' (ECDSA) to the list of known hosts.
admin@iscsitgt01s's password: ********
id_rsa                                             100% 1679     1.6KB/s   00:00
authorized_keys                                    100%  411     0.4KB/s   00:00
known_hosts                                        100%  186     0.2KB/s   00:00


Active 機と Stand-by 機で、ssh 鍵を root アカウント用にコピーします。


sudo cp -a .ssh/ /root/
sudo chown -R root:root /root/.ssh


Active 機で、Corosync の認証を設定し、起動します。


sudo pcs cluster auth iscsitgt01a.example.com iscsitgt01s.example.com 10.110.88.57 10.110.88.58 192.168.1.2 192.168.1.3 -u hacluster -p 'password' --force
iscsitgt01s.example.com: Authorized
iscsitgt01a.example.com: Authorized
10.110.88.58: Authorized
192.168.1.2: Authorized
192.168.1.3: Authorized
10.110.88.57: Authorized

sudo pcs cluster setup --name iscsitgt01 10.110.88.57,192.168.1.2 10.110.88.58,192.168.1.3 --transport=udp --rrpmode=passive -u hacluster -p 'password' --force
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop  pacemaker.service
Redirecting to /bin/systemctl stop  corosync.service
Killing any remaining services...
Removing all cluster configuration files...
10.110.88.57: Succeeded
10.110.88.58: Succeeded
Synchronizing pcsd certificates on nodes 10.110.88.57, 10.110.88.58...
10.110.88.57: Success
10.110.88.58: Success

Restaring pcsd on the nodes in order to reload the certificates...
10.110.88.57: Success
10.110.88.58: Success

sudo pcs cluster start --all
10.110.88.57: Starting Cluster...
10.110.88.58: Starting Cluster...

sudo pcs status
Cluster name: iscsitgt01
WARNING: no stonith devices and stonith-enabled is not false
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Sat Oct 29 16:49:54 2016          Last change: Sat Oct 29 16:49:35 2016 by hacluster via crmd on iscsitgt01s.example.com
Stack: corosync
Current DC: iscsitgt01s.example.com (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 0 resources configured

Online: [ iscsitgt01a.example.com iscsitgt01s.example.com ]

Full list of resources:

PCSD Status:
  iscsitgt01a.example.com (10.110.88.57): Online
  iscsitgt01s.example.com (10.110.88.58): Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled


※ Warning が2つ出ています。前者は後で対応します。「sudo pcs property set stonith-enabled=false」を実行すれば解消します。後者は無視して構いません。

※ ここで紹介した方法であれば、Corosync のハートビートを2セグメント設定できます。Red Hat 社のマニュアルを見ると、corosync.conf ファイルを直接編集不可とされているので、結構手間取ってしまいました。マニュアルの記載から上の結論にたどりつく人がどれだけいるのか、不親切だと思いました。

Active 機と Stand-by 機で、Corosync の状態とプロセスを確認します。


sudo corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.110.88.57
        status  = ring 0 active with no faults
RING ID 1
        id      = 192.168.1.2
        status  = ring 1 active with no faults

ps -ef | egrep '[c]orosync|[p]acemaker'
root      3135     1  0 07:27 ?        00:00:00 corosync
root      3150     1  0 07:27 ?        00:00:00 /usr/sbin/pacemakerd -f
haclust+  3151  3150  0 07:27 ?        00:00:00 /usr/libexec/pacemaker/cib
root      3152  3150  0 07:27 ?        00:00:00 /usr/libexec/pacemaker/stonithd
root      3153  3150  0 07:27 ?        00:00:00 /usr/libexec/pacemaker/lrmd
haclust+  3154  3150  0 07:27 ?        00:00:00 /usr/libexec/pacemaker/attrd
haclust+  3155  3150  0 07:27 ?        00:00:00 /usr/libexec/pacemaker/pengine
haclust+  3156  3150  0 07:27 ?        00:00:00 /usr/libexec/pacemaker/crmd

0 件のコメント:

コメントを投稿