2017年3月25日 星期六

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十四)

學習目標:
  • 建立叢集系統的網路備援機制!
操作流程:練習(一)
  1. 在乾淨的環境上,建立叢集系統:
    [root@nodea ~]# yum -y install pcs fence-agents-all fence-agents-rht
    [root@nodea ~]# systemctl enable pcsd
    [root@nodea ~]# systemctl start pcsd
    [root@nodea ~]# firewall-cmd --permanent --add-service=high-availability
    [root@nodea ~]# firewall-cmd --reload
    [root@nodea ~]# echo centos | passwd --stdin hacluster
    [root@nodea ~]# pcs cluster auth -u hacluster -p centos node{a..c}.example.com
    
  2. 在 nodea 上設定叢集系統使用 RRP 的 passive 模式,建立兩個 ring 網路環境:
    [root@nodea ~]# pcs cluster setup --start --enable --name clusterX \
    > nodea.example.com,nodea_r1.example.com \
    > nodeb.example.com,nodeb_r1.example.com \
    > nodec.example.com,nodec_r1.example.com \
    > --rrpmode passive 
    
  3. 在 nodea 上,建立 fence 限制機制:
    [root@nodea ~]# pcs stonith create fence_all fence_rht \
    > ipaddr="fencing.example.com" \
    > pcmk_host_check="none"
    > pcmk_host_list=""
    
  4. 在 nodec 上,測試網路運作機制:
    [root@nodec ~]# nmcli con down "System eth1"
    [root@nodea ~]# corosync-quorumtool
    [root@nodec ~]# nmcli con down "System eth2"
    
操作流程:練習(二)
  1. 查詢 multipath 上的硬體裝置:
    [root@nodea ~]# ls /dev/disk/by-id/dm-uuid-mpath-*
    
  2. 建立該硬體資源的 fence 代理管理設定:
    [root@nodea ~]# pcs stonith create scsi-killer fence_scsi \
    > devices="/dev/disk/by-id/dm-uuid-mpath-FQDN" \
    > pcmk_monitor_action=metadata \
    > pcmk_host_list="nodea.example.com nodeb.example.com nodec.example.com" \
    > pcmk_reboot_action="off" \
    > meta provides="unfencing"
    
  3. 在每個節點上,分別建立兩個不同 level 的 fence 代理機制:
    [root@nodea ~]# pcs stonith level add 1 nodea.example.com fence_nodea
    [root@nodea ~]# pcs stonith level add 2 nodea.example.com scsi-killer
    
  4. 利用更動 nodec 的設定,觀察 fence 運作情況:
    [root@nodea ~]# pcs stonith update fence_nodec ipaddr="broken.example.com"
    [root@nodea ~]# pcs stonith fence nodec.example.com
    [root@nodea ~]# multipath -ll
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十三)

學習目標:
  • 用 GFS2 叢集檔案系統提供資源儲存!
操作流程:練習(一)
  1. 在各節點上,安裝 gfs2-utils 與 lvm2-cluster 兩個套件:
    [root@nodea ~]# yum -y install gfs2-utils lvm2-cluster
    
  2. 在各節點上,設定 no-quorum-policy=freeze:
    [root@nodea ~]# pcs property set no-quorum-policy=freeze
    
  3. 在 nodea 節點上,設定 DLM 代理資源:
    [root@nodea ~]# pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  4. 在各節點上,設定 locking_type 在 /etc/lvm/lvm.conf 檔案內:
    [root@nodea ~]# lvmconf --enable-cluster
    
  5. 在各節點上,先暫停 lvm2-lvmetad 服務的運作,以利修改設定檔:
    [root@nodea ~]# systemctl stop lvm2-lvmetad
    
  6. 在 nodea 節點上,設定 clvmd 成為叢集資源:
    [root@nodea ~]# pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  7. 在 nodea 節點上,設定啟用條件順序,讓 dlm 資源早於 clvmd 資源啟用,並且只能用於同一節點上:
    [root@nodea ~]# pcs constraint order start dlm-clone then clvmd-clone
    [root@nodea ~]# pcs constraint colocation add clvmd-clone with dlm-clone
    
  8. 在 nodea 節點上,建立 LVM 檔案系統:
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate -Ay -cy cluster_vg /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 2G -n gfsdata cluster_vg
    
  9. 在 nodea 節點上,建立 gfs2 檔案系統於 LVM 上:
    [root@nodea ~]# mkfs.gfs2 -t clusterX:gfsdata -j2 /dev/mapper/cluster_vg-gfsdata
    [root@nodea ~]# mkdir /gfsdata
    [root@nodea ~]# mount -t gfs2 /dev/mapper/cluster_vg-gfsdata /gfsdata
    [root@nodea ~]# echo "Hello, cluster gfs2" > /gfsdata/test1
    
操作流程:練習(二)
  1. 在 nodec 上,將 LVM 檔案系統掛載 (會發現空間不足掛載):
    [root@nodec ~]# mount -t gfs2 /dev/mapper/cluster_vg-gfsdata /gfsdata
    
  2. 在 nodea 上檢查 GFS2 檔案系統掛載情況以及硬碟剩餘空間:
    [root@nodea ~]# gfs2_edit -p jindex /dev/mapper/cluster_vg-gfsdata | grep journal
    [root@nodea ~]# df -h /gfsdata
    
  3. 在 nodea 上,增加兩個 journal 掛載數:
    [root@nodea ~]# gfs2_jadd -j2 /gfsdata
    
  4. 在 nodea 上,再次檢查 GFS2 檔案系統掛載情況以及硬碟剩餘空間:
    [root@nodea ~]# gfs2_edit -p jindex /dev/mapper/cluster_vg-gfsdata | grep journal
    [root@nodea ~]# df -h /gfsdata
    
  5. 在 nodea 上,增加 LVM 空間:
    [root@nodea ~]# lvextend -L +512MB /dev/mapper/cluster_vg-gfsdata
    
  6. 在 nodea 上,增加 GFS 空間至 LVM 空間大大:
    [root@nodea ~]# gfs2_grow /gfsdata
    [root@nodea ~]# df -h /gfsdata
    
  7. 在 nodec 上,再次將 LVM 檔案系統掛載:
    [root@nodec ~]# mount -t gfs2 /dev/mapper/cluster_vg-gfsdata /gfsdata
    
操作流程:練習(三)
  1. 在各節點上,準備 DLM 以及 clvmd 服務:
    [root@nodea ~]# yum install -y gfs2-utils lvm2-cluster
    [root@nodea ~]# pcs property set no-quorum-policy=freeze
    [root@nodea ~]# pcs resource create dlm ocf:pacemaker:controld op monitor \ 
    > interval=30s on-fail=fence clone interleave=true ordered=true
    [root@nodea ~]# lvmconf --enable-cluster
    [root@nodea ~]# systemctl stop lvm2-lvmetad
    [root@nodea ~]# pcs resource create clvmd ocf:heartbeat:clvm op monitor \
    > interval=30s on-fail=fence clone interleave=true ordered=true
    [root@nodea ~]# pcs constraint order start dlm-clones then clvmd-clone
    [root@nodea ~]# pcs constraint colocation add clvmd-clone with dlm-clone
    
  2. 在 nodea 上,建立 LVM ,並且製作 GFS2 檔案系統:
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate -Ay -cy socks /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 1G -n shoes socks
    [root@nodea ~]# mkfs.gfs2 -t clusterx:centos-gfs2 -j3 /dev/mapper/socks-shoes 
    
  3. 在 nodea 上,建立 cluster 資源:
    [root@nodea ~]# pcs resource create clusterfs Filesystem \
    > device="/dev/socks/shoes" directory="/mnt/pants" \
    > fstype="gfs2" options="noatiome" op monitor interval=10s
    > on-fail=fence clone interleave=true
    [root@nodea ~]# pcs constraint order start clvmd-clone then clusterfs-clone
    [root@nodea ~]# pcs constraint colocation add clusterfs-clone with clvmd-clone
    
  4. 在 nodec 上,確認掛載況狀:
    [root@nodec ~]# mount | grep /mnt/pants
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十二)

學習目標:
  • 用 LVM 架 GFS 檔案系統!
  • Cluster 上的 LVM 架構:HA-LVM 與 Clustered LVM!
    • HA-LVM:vg 與其上的 lv,一次只給一個節點使用!
      • 設定方式一:使用 LVM 標籤
      • 設定方式二:使用 clustered LVM daemon , clvmd
    • Clustered LVM:在分享的儲存設備中,所有的vg 與 lv 均可給所有節點使用!
  • 重點提示:
    • LVM 觀念與多重路徑概念整合
    • LVM 設定檔:/etc/lvm/lvm.conf
    • LVM 架構查詢指令:vgcfgrestore
    • LVM 架構參數改變後,需要執行指令:lvchange
操作流程:練習(一)
  1. 在 nodea 上,切割兩個分割區,練習 LVM 基本操作:
    [root@nodea ~]# fdisk /dev/vdb
    [root@nodea ~]# partprobe
    [root@nodea ~]# pvcreate /dev/vdb2 /dev/vdb3
    [root@nodea ~]# vgcreate vgsrv /dev/vdb2 /dev/vdb3
    [root@nodea ~]# vgs
      VG    #PV #LV #SN Attr   VSize VFree
      vgsrv   2   0   0 wz--n- 3.99g 3.99g
    
  2. 在 vgsrv 上,切割一個 LV 分割區:
    [root@nodea ~]# lvcreate -n resizeme -L 2G vgsrv
    
  3. 在 resizeme 上,建立 xfs 檔案系統:
    [root@nodea ~]# mkfs -t xfs /dev/vgsrv/resizeme
    
  4. 將新建立的 xfs 檔案系統,掛載在 /mnt 目錄下:
    [root@nodea ~]# mount /dev/vgsrv/resizeme /mnt
    [root@nodea ~]# touch /mnt/file{0..9}
    
  5. 缷載 /mnt 目錄:
    [root@nodea ~]# umount /mnt
    
  6. 縮減 resizeme 大小至 1G:
    [root@nodea ~]# lvresize -L 1G /dev/vgsrv/resizeme
    [root@nodea ~]# mount /dev/vgsrv/resizeme /mnt  --> 發現不能掛載
    
  7. 檢查 vgsrv 架構:
    [root@nodea ~]# vgcfgrestore -l vgsrv
    :(略)
    :
    File:  /etc/lvm/archive/vgsrv_00002-1891440157.vg
      VG name:     vgsrv
      Description: Created *before* executing 'lvresize -L 1G /dev/vgsrv/resizeme'
      Backup Time: Fri Mar 24 18:50:14 2017
    :
    :(略)
    
  8. 回復到縮減前的狀態:
    [root@nodea ~]# vgcfgrestore -f /etc/lvm/archive/vgsrv_00002-1891440157.vg vgsrv
    
  9. 進行回復後的更新動作:
    [root@nodea ~]# lvchange -an /dev/vgsrv/resizeme 
    [root@nodea ~]# lvchange -ay /dev/vgsrv/resizeme 
    
  10. 重新掛載 /mnt 目錄:
    [root@nodea ~]# mount /dev/vgsrv/resizeme /mnt
    [root@nodea ~]# ls -al /mnt
    
  11. 再次缷載 /mnt 目錄,並移除 resizeme :
    [root@nodea ~]# umount /mnt
    [root@nodea ~]# lvremove /dev/vgsrv/resizeme
    
操作流程:練習(二),使用HA-LVM
  1. 在 nodea 上,將多重路徑上的硬碟設備,做成 LVM 檔案系統 :
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate clustervg /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 1G -n clusterlv clustervg
    [root@nodea ~]# mkfs -t xfs /dev/clustervg/clusterlv
    
  2. 在所有節點上,編寫 lvm 設定檔內容:
    [root@nodea ~]# vim /etc/lvm/lvm.conf
    locking_type = 1
    volume_list = []  --> 表示本地端的LVM不分享!
    
  3. 在所有節點上,重新設定 initramfs 檔案:
    [root@nodea ~]# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r); reboot
    
  4. 在所有節點上,查詢 cluster 服務運作是否正常:
    [root@nodea ~]# pcs status
    
  5. 在 nodea 節點上,建立 LVM 資源:
    [root@nodea ~]# pcs resource create halvm LVM volgrpname=clustervg exclusive=true --group halvmfs
    [root@nodea ~]# pcs resource create xfsfs Filesystem device="/dev/clustervg/clusterlv" directory="/mnt" fstype="xfs" --group halvmfs
    [root@nodea ~]# pcs status
    [root@nodea ~]# lvs
    [root@nodea ~]# mount | grep clusterlv
    
  6. 在 nodea 節點上,測試 HA-LVM 功能:
    [root@nodea ~]# pcs cluster standby nodea.example.com
    [root@nodea ~]# pcs status
    [root@nodea ~]# pcs cluster unstandby nodea.example.com
    :
    (到各節點查詢,LVM被掛載到哪個節點上)
    
操作流程:練習(二),使用 Clustered LVM 方式
  1. 在各節點上,安裝 dlm 及 lvm2-cluster 套件:
    [root@nodea ~]# yum -y install dlm  lvm2-cluster
    [root@nodea ~]# lvmconf --enable-cluster
    
  2. 在各節點上,先暫停 lvm2-lvmetad 服務的運作,以利修改設定檔:
    [root@nodea /]# systemctl stop lvm2-lvmetad
    
  3. 在 nodea 節點上,新增使用 controld 資源代管的 dlm 資源:
    [root@nodea ~]# pcs resource create dlm controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  4. 在 nodea 節點上,新增使用 clvm 資源代管的 clvmd 資源:
    [root@nodea ~]# pcs resource create clvmd clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  5. 在 nodea 節點上,設定啟用條件順序,讓 dlm 資源早於 clvmd 資源啟用,並且只能用於同一節點上:
    [root@nodea ~]# pcs constraint order start dlm-clone then clvmd-clone
    [root@nodea ~]# pcs constraint colocation add clvmd-clone with dlm-clone
    
  6. 在 nodea 節點上,建立 LVM 檔案系統:
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate myvg /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 1G -n mylv myvg
    

2017年3月23日 星期四

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十一)

學習目標:
  • 管理擁有多重路徑的儲存設備!
  • 重點提示:
    • 多重路徑套件:device-mapper-multipath
    • 設定檔:/etc/multipath.conf
    • 指令:mpathconf
    • Daemon:multipathd
操作流程:練習(一)
  1. 在 nodea、nodeb、nodec 上,安裝 device-mapper-multipath 工具套件:
    [root@nodea ~]# yum -y install device-mapper-multipath 
    
  2. 在 nodea 上,啟動 multipath 設定檔:
    [root@nodea ~]# mpathconf --enable 
    
  3. 在 nodea 上,修改 multipath 設定檔 /etc/multipath.conf:
    [root@nodea ~]# vim /etc/mutipath.conf
     blacklist {
            devnode "^vd[a-z]"  --> 啟免本地端設備被納入!
    }
    
  4. 在 nodea 上,把 iSCSI 加入 multipath 設定檔中:
    [root@nodea ~]# /usr/lib/udev/scsi_id -g -u /dev/sda
    36001405e92cadbc599440ef89643bc0b
    [root@nodea ~]# vim /etc/mutipath.conf
    (加入下列內容:)
    multipaths {
            multipath {
                    wwid 36001405e92cadbc599440ef89643bc0b
                    alias   ClusterStorage
                    path_grouping_policy    failover
            }
    }
    
    
  5. 在 nodea 上,複製 multipath 設定檔到 nodeb、nodec 節點上:
    [root@nodea ~]# rsync -avz -e ssh /etc/multipath.conf nodeb:/etc/mutlipath.conf
    [root@nodea ~]# rsync -avz -e ssh /etc/multipath.conf nodec:/etc/multipath.conf
    
  6. 在 nodea、nodeb、nodec 上,啟動 multipathd 服務:
    [root@nodea ~]# systemctl enable multipathd ; systemctl start multipathd
    [root@nodeb ~]# systemctl enable multipathd ; systemctl start multipathd
    [root@nodec ~]# systemctl enable multipathd ; systemctl start multipathd
    
  7. 在 nodea、nodeb、nodec 上,查看 multipathd 服務情況:
    [root@nodea ~]# multipath -ll
    [root@nodeb ~]# multipath -ll
    [root@nodec ~]# multipath -ll
    
  8. 在 nodea 上,切割分割區:
    [root@nodea ~]# fdisk /dev/mapper/ClusterStorage 
    
  9. 在 nodea、nodeb、nodec 上,更新 partition table 資訊:
    [root@nodea ~]# partprobe
    [root@nodeb ~]# partprobe
    [root@nodec ~]# partprobe
    
  10. 在 nodea、nodeb、nodec 上,查看分割區內容:
    [root@nodea ~]# ls -la /dev/mapper/
    [root@nodeb ~]# ls -la /dev/mapper/
    [root@nodec ~]# ls -la /dev/mapper/
    
  11. 在 nodea、nodeb、nodec 上,若沒發現分割區,可利用 kpartx 建立:
    [root@nodea ~]# kpartx -a -v /dev/mapper/ClusterStorage
    [root@nodeb ~]# kpartx -a -v /dev/mapper/ClusterStorage
    [root@nodec ~]#  kpartx -a -v /dev/mapper/ClusterStorage
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十)

學習目標:
  • 將 iSCSI 分享的硬碟,掛載至 cluster 上!
  • 進一步設定掛載 iSCSI 硬碟的參數!
操作流程:練習(一)
  1. 在 nodea 上,安裝 iscsi-initiator 工具套件,並且設定啟動:
    [root@nodea ~]# yum -y install iscsi-initiator-utils 
    [root@nodea ~]# vim /etc/iscsi/initiatorname.iscsi
    InitiatorName=iqn.2017-04.com.example:node
    [root@nodee ~]# systemctl enable iscsi; systemctl start iscsi
    
  2. 在 nodea 上,查詢 fence 主機所提供的 iscsi 裝置:
    [root@nodea ~]# iscsiadm -m discovery -t st -p 172.24.0.20
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -l
    [root@nodea ~]# lsblk
    [root@nodea ~]# tail /var/log/messages
    
  3. 在 nodea 上,瀏覽相關連結資訊:
    [root@nodea ~]# iscsiadm -m session -P 3
    [root@nodea ~]# cd /var/lib/iscsi/nodes
    [root@nodea nodes]# ls -lR
    [root@nodea nodes]# less iqn.2017-04.com.example\:fence.disk01/172.24.0.20\,3260\,1/default
    
  4. 在 nodea 上,使用指令查看相關訊息:
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -u
    [root@nodea /]# lsblk
    [root@nodea /]# ls -Rl /var/lib/iscsi/nodes/  --> 資料仍存在
    [root@nodea /]# systemctl restart iscsi
    [root@nodea /]# lsblk
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -u
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -o delete
    [root@nodea /]# lsblk
    [root@nodea /]# systemctl restart iscsi
    [root@nodea /]# lsblk   --> 應該是不會自動掛載上來了
    [root@nodea /]# iscsiadm -m discovery -t st -p 172.24.0.20
    [root@nodea /]# ls -Rl /var/lib/iscsi/nodes/
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -o delete
    [root@nodea /]# ls -Rl /var/lib/iscsi/nodes/
    
操作流程:練習(二)
  1. 在 nodea 上,掛載 iSCSI 硬碟,並且切割好硬碟、建立 xfs 檔案系統:
    [root@nodea ~]#  iscsiadm -m discovery -t st -p 172.24.0.20
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -l
    [root@nodee ~]# lsblk
    [root@nodea ~]# fdisk /dev/sda
    (切割出一個硬碟)
    [root@nodea ~]# partprobe
    [root@nodea ~]# mkfs.xfs /dev/sda1
    [root@nodea ~]# mkdir /mnt/iscsi ; mount -t xfs -o rw,_netdev /dev/sda1 /mnt/iscsi
    
  2. 在 nodea 上,先關閉網路連線:
    [root@nodea ~]# nmcli device disconnect eth0
    
  3. 在 nodea 上,進行時間測試:
    [root@nodea ~]# time touch /mnt/iscsi/test1
    (出現下列結果:)
    touch: cannot touch ‘/mnt/iscsi/test1’: No space left on device
    
    real 0m47.201s
    user 0m0.002s
    sys 0m0.001s
    
    
  4. 在 nodea 上,開啟網路連線:
    [root@nodea ~]# nmcli device connect eth0
    
  5. 在 nodea 上,調整 iscsi 連線的 replacement_timeout 時間值到 5 秒:
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 \
    > -p 172.24.0.20 -o update -n node.session.timeo.replacement_timeout -v 5
    [root@nodea ~]# umount /mnt/iscsi
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -u
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -l
    [root@nodea ~]# mount -t xfs -o rw,_netdev /dev/sda1 /mnt/iscsi
    
  6. 在 nodea 上,再次關閉網路連線,並進行時間測試:
    [root@nodea ~]# nmcli device disconnect eth0
    time touch /mnt/iscsi/test2
    
    touch: cannot touch ‘/mnt/iscsi/test2’: No space left on device
    (出現下列結果,時間明顯缩短:)
    real 0m0.002s
    user 0m0.000s
    sys 0m0.002s
    
    
  7. 在 nodea 上,開啟網路連線:
    [root@nodea ~]# nmcli device connect eth0
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(九)

學習目標:
  • 管理兩節點的 Cluster 架構!
操作流程:練習(一)
  1. 在 nodee,nodef 上,安裝 pcs 與 fence-agents 套件:
    [root@nodee ~]# yum -y install pcs fence-agents-all 
    [root@nodee ~]# firewall-cmd --permanent --add-service=high-availability
    [root@nodee ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@nodee ~]# firewall-cmd --reload
    
  2. 在 nodee,nodef 上,啟動 pcsd 服務:
    [root@nodee ~]# systemctl enable pcsd ; systemctl start pcsd 
    [root@nodee ~]# echo centos7 | passwd --stdin hacluster
    [root@nodee ~]# pcs cluster auth -u hacluster -p centos7 \
    > nodee.example.com nodef.example.com
    
  3. 將 nodee,nodef 組成一個兩節點 cluster ,名為 R2 :
    [root@nodee ~]# pcs cluster setup --start --enable \
    > --name R2 \
    > --wait_for_all=0 \
    > nodee.example.com \
    > nodef.example.com
    
    [root@nodee ~]# pcs status
    
  4. 建立一個 fence 機制,代理 fence 使用 fence_xvm ,延遅時間設至五秒 :
    [root@nodee ~]# pcs stonith create fence_nodee fence_xvm \
    > port="guest5" \
    > pcmk_host_list="nodee.example.com" \
    > delay=5
    
    [root@nodee ~]# pcs stonith create fence_nodef fence_xvm \
    > port="guest6" \
    > pcmk_host_list="nodef.example.com" \
    > delay=5
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(八)

學習目標:
  • 設定群組資源開啟使用的順序規則
  • 限制三設定值:order location colocation
操作流程:練習(一)
  1. 在 nodea 上,切割分割區約 256 MB(需要掛載iSCSI服務):
    [root@nodea ~]# fdisk /dev/vdb
    (過程簡略...)
    
    [root@nodea ~]# partprobe   --> 必須在所有節點上做
    [root@nodea ~]# mkfs -t xfs /dev/vdb1
    
  2. 在各節點上,取消被 pacemaker 控制的 NFS 服務:
    [root@nodea ~]# systemctl stop nfs-lock ; systemctl disable nfs-lock
    
  3. 在 nodea 節點上,建立一個 nfs 的檔案資源群組:
    [root@nodea ~]# pcs resource create nfsshare Filesystem \
    > device=/dev/vdb1 \
    > directory=/nfsshare \
    > fstype=xfs --group nfs
    
  4. 在 nodea 節點上,建立一個分享服務,置於 nfs 資源群組內:
    [root@nodea ~]# pcs resource create nfsd nfsserver \
    > nfs_shared_infodir=/nfsshare/nfsinfo \
    > --group nfs
    
  5. 在 nodea 節點上,建立一個分享資源目錄,置於 nfs 資源群組內:
    [root@nodea ~]# pcs resource create nfsroot exportfs \
    > clientspec="*" \
    > options=rw,sync,no_root_squash \
    > directory=/nfsshare fsid=0 \
    > --group nfs
    
  6. 在 nodea 節點上,配置一個 IP 位置,置於 nfs 資源群組內:
    [root@nodea ~]# pcs resource create nfsip IPaddr2 \
    > ip=172.24.0.82 \
    > cidr_netmask=24 \
    > --group nfs
    
  7. 在各節點上,啟動防火牆設定:
    [root@nodea ~]# firewall-cmd --permanent --add-service=nfs ; firewall-cmd --reload
    
  8. 在 workstation 主機上,掛載分享出來的目錄:
    [root@fence ~]# mkdir /mnt/nfsv4share 
    [root@fence ~]# mount 172.24.0.82:/ /mnt/nfsv4share
    [root@fence ~]# touch /mnt/nfsv4share/test.txt 
    
  9. 驗證 NFS 分享工作,在 nodea 失效時,仍可以提供服務:
    [root@nodea ~]# pcs cluster standby nodea.example.com
    [root@nodea ~]# pcs status
    [root@fence ~]# ls /mnt/nfsv4share/ 
    
  10. 回復原設定:
    [root@nodea ~]# pcs cluster unstandby nodea.example.com
    [root@nodea ~]# pcs status
    [root@fence ~]# umount /mnt/nfsv4share/ 
    
操作流程:練習(二)
  1. 移動部份資源到其它節點:
    [root@nodea ~]# pcs resource move firstweb nodeb.example.com
    [root@nodea ~]# pcs resource clear firstweb
    [root@nodea ~]# pcs resource move nfs nodec.example.com
    [root@nodea ~]# pcs resource clear nfs
    
  2. 在 nodea 節點上,設定一個 location ,限定 firstweb 分數200:
    [root@nodea ~]# pcs constraint location firstweb prefers \
    > nodea.example.com=200
    
    [root@nodea ~]# pcs status
    
  3. 在 nodea 節點上,設定 firstweb 的資源分數預設值改成 500,nodeb改成499:
    [root@nodea ~]# pcs resource defaults resource-stickiness=500
    [root@nodea ~]# pcs constraint location firstweb prefers \
    > nodeb.example.com=499
    
    [root@nodea ~]# pcs status
    
  4. 在 nodea 節點上,設定 nfs 的資源,避免在 nodec 上執行:
    [root@nodea ~]# pcs constraint location nfs avoids nodec.example.com
    
    [root@nodea ~]# pcs status
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(七)

學習目標:
  • 如何對 Cluster 中的資源除錯!
  • 如何檢查 Cluster 中的網路錯誤
操作流程:練習(一)
  1. 在 nodea 上,編修 httpd.conf 檔案,修改 Listen 參數:
    [root@nodea ~]# vim /etc/httpd/conf/httpd.conf
    :
     Listen 29
    :
    
  2. 在 nodea 上,同歩 Cluster 設定,並重新啟動 Cluster:
    [root@nodea ~]# pcs cluster sync 
    [root@nodea ~]# pcs cluster stop --all
    [root@nodea ~]# pcs cluster start --all
    [root@nodea ~]# pcs status resources
    
  3. 在 nodea 上,同歩 Cluster 設定,並重新啟動 Cluster:
    [root@nodea ~]# pcs cluster sync 
    [root@nodea ~]# pcs cluster stop --all
    [root@nodea ~]# pcs cluster start --all
    [root@nodea ~]# pcs status resources 
    
  4. 在 nodea 上,查詢有故障發生的群組資源:
    [root@nodea ~]#  pcs resource failcount show firstwebserver
    
  5. 在 nodea 上,啟動除錯功能:
    [root@nodea ~]# pcs resource debug-start firstwebserver --full
    
  6. 在 nodea 上,顯示資源內容與設定檔:
    [root@nodea ~]# pcs resource show firstwebserver
    
  7. 在 nodea 上,移除在 Cluster 設定上不正確的設定檔參數:
    [root@nodea ~]# pcs resource update firstwebserver configfile=
    
  8. 在 nodea 上,再次查詢有故障發生的群組資源:
    [root@nodea ~]#  pcs resource failcount show firstwebserver
    [root@nodea ~]# pcs status
    
操作流程:練習(二)
  1. 在 nodea 上,查詢 Cluster 網路狀態:
    [root@nodea ~]# pcs status
    [root@nodea ~]# corosync-quorumtool
    [root@nodea ~]# ping -i 4 nodec
    
  2. 在 nodec 上,查詢防火牆的問題:
    [root@nodec~]# firewall-cmd --list-all
    
  3. 在 nodec 上,重新設定防火牆:
    [root@nodec~]# firewall-cmd --permanent --add-service=high-availability
    [root@nodec~]# firewall-cmd --reload
    
  4. 在 nodea 上,查詢 Cluster 狀態:
    [root@nodea ~]# pcs status
    

2017年3月22日 星期三

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(四)

學習目標:
  • 在 clusterX 上,管理 fence 平台與控制節點運作!
  • 實作上,以 fence-virtd 為練習方式,控制 hypervior 上的VM!
Fence Device Server 安裝流程:
  1. 在實體主機上,安裝 fence device server 套件:
    [root@fence ~]# yum -y install fence-virtd fence-virtd-libvirt fence-virtd-multicast
    
  2. 在實體主機上,產生 fence_xvm.key:
    [root@fence ~]# mkdir /etc/cluster
    [root@fence ~]# cd /etc/cluster
    [root@fence ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=4k count=1
    
  3. 將 fence_xvm.key 複製到各VM上:
    [root@fence ~]# ssh nodea
    [root@nodea ~]# mkdir /etc/cluster ; exit
    [root@fence ~]# scp /etc/cluster/fence_xvm.key nodea:/etc/cluster
    
  4. 利用指令設定 fence_virtd 設定檔 /etc/fence_virt.conf:
    [root@fence ~]# fence_virtd -c
    (注意下列設定,其餘保持預設值:)
    interface: [br0] (與虚擬機通訊的網路卡介面)
    key path: [/etc/cluster/fence_xvm.key]
    
  5. 檢查檔案 /etc/fence_virt.conf 內容:
    [root@fence ~]# vim /etc/fence_virt.conf
    backends {
            libvirt {
                    uri = "qemu:///system";
            }
    
    }
    
    listeners {
            multicast {
                    port = "1229";
                    family = "ipv4";
                    interface = "br0";
                    address = "225.0.0.12";
                    key_file = "/etc/cluster/fence_xvm.key";
            }
    
    }
    
    fence_virtd {
            module_path = "/usr/lib64/fence-virt";
            backend = "libvirt";
            listener = "multicast";
    }
    
    
  6. 啟動 fence-virtd 服務:
    [root@fence ~]# systemctl enable fence_virtd
    [root@fence ~]# systemctl start fence_virtd
    
  7. 開啟防火牆與SELinux設定:
    [root@fence ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@fence ~]#firewall-cmd --permanent --add-port=1229/udp
    [root@fence ~]#firewall-cmd --reload
    [root@fence ~]#setsebool -P fenced_can_network_connect on
    [root@fence ~]#setsebool -P fenced_can_ssh on
    
每個節點(VM node)安裝流程:
  1. 安裝 fence-virt 套件:
    [root@nodea ~]# yum -y install fence-virt fence-agents-all
    
  2. 開啟防火牆與SELinux設定:
    [root@nodea ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@nodea ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@nodea ~]# firewall-cmd --reload
    [root@nodea ~]# setsebool -P fenced_can_network_connect on
    [root@nodea ~]# setsebool -P fenced_can_ssh on
    
  3. 測試是否可以查看其它節點運作情況:(其它節點也需做完相同步驟):
    [root@nodea ~]# fence_xvm -o list
    [root@nodea ~]# fence_xvm -a 225.0.0.12 -k /etc/cluster/fence_xvm.key -H guest2 -o status
    
  4. 測試是否可以控制其它節點運作:
    [root@nodea ~]# fence_xvm -a 225.0.0.12 -k /etc/cluster/fence_xvm.key -H guest2 -o reboot
    
練習節點(VM node)的 fence device 資源管理:
  1. 建立可管理節點的 fence 資源:
    [root@nodea ~]# pcs stonith create fence_nodea fence_xvm \
    > port="guest1" \
    > pcmk_host_check="static-list" \
    > pcmk_host_list="nodea.example.com nodeb.example.com nodec.example.com noded.example.com"
    
  2. 測試運作情形:
    [root@nodea ~]# pcs stonith fence noded.example.com
    
  3. 更新設定內容:
    [root@nodea ~]# pcs stonith update fence_nodes \
    > pcmk_host_check="none" \
    > pcmk_host_list=""
    
  4. 測試運作情形:
    [root@nodea ~]# pcs stonith fence noded.example.com
    [root@nodea ~]# corosync-quorumtool -m
    

2017年3月4日 星期六

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(六)

學習目標:
  • Corosync 的記錄設定檔:/etc/corosync/corosync.conf
  • Pacemaker 的記錄設定檔:/etc/sysconfig/pacemaker
  • Cluster 不喜歡星期一,因為要用 Email 通知不用上班的節點!
  • 練習:
    • 查看記錄檔內容
    • 更改設定後,如何同歩與重新啟動!
    • 設定系統通知與報告!
操作流程:練習(一)
  1. 在 nodea 上,查看記錄檔內容:
    [root@nodea cluster]# less /var/log/pacemaker.log
    [root@nodea cluster]# less /var/log/messages
    [root@nodea ~]# journalctl -u pacemaker.service -u corosync.service
    
  2. 在 nodea 上,修改記錄檔內容:
    [root@nodea ~]# vim /etc/corosync/corosync.conf
    logging {
        to_syslog: yes
        to_logfile: yes
        logfile: /var/log/cluster.log
        debug: on
    }
    
  3. 在 nodea 上,同歩 cluster 內的所有節點:
    [root@nodea ~]# pcs cluster sync
    
  4. 在 nodea 上,更新 pacemaker 設定檔內容,並同歩 cluster 內的所有節點:
    [root@nodea ~]# vim /etc/sysconfig/pacemaker
    PCMK_debug=yes
    :
    :
    (存檔後,複製設定檔到其它節點上!)
    [root@nodea ~]# scp /etc/sysconfig/pacemaker nodeb:/etc/sysconfig
    [root@nodea ~]# scp /etc/sysconfig/pacemaker nodec:/etc/sysconfig
    [root@nodea ~]# scp /etc/sysconfig/pacemaker noded:/etc/sysconfig
    
  5. 在 nodea 上,更新 logrotate 設定檔,並且同歩 cluster 內的所有節點:
    [root@nodea ~]# cp /etc/logrotate.d/pacemaker /etc/logrotate.d/cluster
    [root@nodea ~]# sed -i 's/pacemaker/cluster/' /etc/logrotate.d/cluster 
    [root@nodea ~]# scp /etc/logrotate.d/cluster nodeb:/etc/logrotate.d/
    [root@nodea ~]# scp /etc/logrotate.d/cluster nodec:/etc/logrotate.d/
    [root@nodea ~]# scp /etc/logrotate.d/cluster noded:/etc/logrotate.d/
    
  6. 在 nodea 上,動新啟動 cluster 的運作:
    [root@nodea ~]# pcs cluster stop --all
    [root@nodea ~]# pcs cluster start --all
    
  7. 在 nodea 上,觀察所有活動記錄:
    [root@nodea ~]# tail -f /var/log/cluster.log
    
  8. 在 nodeb 上,移動資源測試所觀察到的活動記錄:
    [root@nodeb ~]# pcs resource move firsrweb
    
  9. 按照上述流程,回復原設定值!
操作流程:練習(二)
  1. 在 nodea 上,增加 Email 資源至 firstweb 群組:
    [root@nodea ~]# pcs resource create webmail MailTo \
    > email=test@example.com \
    > subject="Cluster Notification" \
    > --group firstweb
    
  2. 觀察所收下來的信件內容:
    [root@nodea ~]# mutt
    
  3. 寫一個小型的 scripts:
    [root@nodea ~]# vim /usr/local/bin/myagent.sh
    #!/bin/bash
    MAILTO=${CRM_notify_recipient:-root@localhost}
    mutt -s "Cluster event from node ${CRM_notify_node}" ${MAILTO} << EOF
    
    A cluster event was triggered by ${CRM_notify_rsc}
    on ${CRM_notify_node}. This event was triggered
    by a ${CRM_notify_task} event.
    
    --
    This mail has been generated automatically
    EOF
    
  4. 新增 ClusterMon 資源,並可带入上述部驟的 scripts 檔案:
    [root@nodea ~]# pcs resource create mailme ClusterMon \
    > extra_options="-e test@example.com \
    > -E /usr/local/bin/myagent.sh" \
    > --clone
    
  5. 觀察所收下來的信件內容:
    [root@nodea ~]# mutt
    
  6. 進行 Cluster 異動,並觀察所收下來的信件內容:
    [root@nodea ~]# pcs resource move firstweb
    [root@nodea ~]# firewall-cmd --remove-service=high-availability