2017年3月17日 星期五

CentOS7 架設 RHCS (High-Availability Server)

環境架構:
c7-clustera    192.168.60.156
c7-clusterb    192.168.60.157
fencing          192.168.60.159
iSCSI            192.168.60.160

軟體說明:
corosync 套件:5405/UDP,5405/UDP
pcs 套件:有分 pcs 指令與 pcsd 服務套件!pcsd 使用 2224/TCP
pacemaker 套件:cluster 主要套件!使用 3121/TCP
dlm 套件:使用21064/TCP ,存取GFS2遠端檔案系統
fence-agents-all 套件:與 fence 主機連線


Cluster node 主機 SSH 設定:
利用 ssh 管理及設定:
c7-clustera 上產生 ssh key:
ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""

複製 id_dsa.pub 為 authorized_keys
cp ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys

複製 .ssh 資料夾到其他節點:
scp -r ~/.ssh c7-clusterb:

確認可以用 ssh 直接連線,不需輸入密碼:
ssh c7-clusterb -- 'uname -n'

設定 Cluster node 主機:
每台節點 安裝相關套件:
yum install -y pcs corosync pacemaker psmisc
yum install policycoreutils-python    #如果 SELinux 沒有關閉,在後續設定 DRBD 軟體權限時會用到
補充:
psmisc 是協助管理 /proc 目錄程序
policycoreutils-python 是 semanage 指令輔助工具

在 /etc/hosts 加入各個節點的對應:
192.168.60.156 c7-clustera
192.168.60.157 c7-clusterb
192.168.60.159 fencing

每台節點 關閉SELinux、防火牆設定:
setenforce 0
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables --flush

每台節點 啟動 pcsd 服務:
systemctl start pcsd.service pacemaker.service
systemctl enable pcsd.service pacemaker.service

每台節點 變更 hacluster 密碼:
echo redhat1 | passwd --stdin hacluster
ssh c7-clusterb -- 'echo redhat1 | passwd --stdin hacluster'

在任一台節點,進行身份驗證:
pcs cluster auth c7-clustera c7-clusterb

在任一台節點,建立 c7-clustera,c7-clusterb cluster 群(cluster 名稱: c7-cluster):
pcs cluster setup --start --name c7-cluster c7-clustera c7-clusterb

在任一台節點,啟動 c7-cluster 所有節點:
pcs cluster start --all

每台節點 確認 Corosync 版本:
corosync-cfgtool -s
corosync-cmapctl | grep members
pcs status corosync

確認 Pacemaker 是否執行中:
ps axf

pcs status --full

檢查錯誤訊息:
journalctl | grep -i 'error'
除了沒有配置STONITH相關的訊息外,正確設定時不會有錯誤訊息。

進行下一步時再檢查一次設定是否OK:
crm_verify -L -V    #會出現 STONITH 的 error,是因為啟用 Pacemaker 中的 STONITH ,但尚未設定。這裡暫時先關閉它。

在配置 STONITH 前,Cluster 無法啟動 Resource,這裡先關閉 STONITH,後面的步驟再設定啟用它:
pcs property set stonith-enabled=false
crm_verify -L -V

測試環境是兩台主機,目前在Cluster 裡没有監控的 policy 主機時,設定值設為 ignore
pcs property set no-quorum-policy=ignore

為兩台主機設定一個 (VIP) Resource 設定:
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.60.170 cidr_netmask=32 op monitor interval=30s      #設定一個 cluster IP 192.168.60.170

補充:
查詢可用的資源參數:
pcs resource standards
pcs resource providers
pcs resource agents ocf:heartbeat

檢查設定 Cluster IP Resource 後的狀態:
pcs status

測試在發生問題時,是否會切換主機:
pcs cluster standby c7-clustera    #恢復指令 pcs cluster unstandby c7-clustera
或者
pcs cluster stop c7-clustera

到另一節點觀察 Cluster 狀況:
pcs status

設定 resource-stickiness (讓維護主機的服務暫時保留在手動移轉到其他節點的主機上),防止 Resource 在 Recovery 後移動:
[root@c7-clustera ~]# pcs resource defaults resource-stickiness=100
[root@c7-clustera ~]# pcs resource defaults
resource-stickiness: 100

補充:
取消 resource-stickiness 設定:
pcs resource defaults resource-stickiness=0
或者建立Resource有指定meta resource-stickiness時,則可用:
pcs resource meta ClusterIP resource-stickiness=0

安裝 Apache Server:
yum install -y httpd
重要:
安裝後不要 enable httpd 服務。主要在透過 Cluster 軟體管理服務不應該由系統管理。
但是,在將它增加到 Cluster 之前,手動啟動服務,驗證它是否有效,然後再次停止它。
否則新增的 WebSite 監控 Resource 將無法啟動。

防火牆如未關閉需開啟允許 http 服務:
firewall-cmd --permanent --add-service=http
flrewall-cmd --reload

每台節點 建立一個測試的網頁:
cat <<-END >/var/www/html/index.html
 <html>
 <body>My Test Site - $(hostname)</body>
 </html>
END

每台節點 建立一個監控 Apache 運作狀況的設定檔:
cat <<-END >/etc/httpd/conf.d/status.conf
 <Location /server-status>
    SetHandler server-status
    Require local
 </Location>
END

重啟 Apache 服務:
systemctl restart httpd.service
測試連線:
wget -O - http://localhost/server-status
或者
curl http://localhost/server-status

systemctl stop httpd.service      #測試上面的監控設定後,必須將 http 服務停止

配置監控 Apache Web Site 的 Cluster Resource:
pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min
pcs status


調整 Resource 啟動、停止、監控的時間(預設:20秒):
[root@c7-clustera ~]# pcs resource op defaults timeout=240s
[root@c7-clustera ~]# pcs resource op defaults
timeout: 240s

確認 Resource 執行在某一台主機上:
WebSite 運作於 Cluster 架構上,必須綁定一個連線 IP,在這裡設定 WebSite 綁定在 ClusterIP (VIP:192.168.60.170) 
(WebSite、ClusterIP 是之前建立的 Resource 名稱)
pcs constraint colocation add WebSite with ClusterIP INFINITY
pcs constraint
pcs constraint colocation

綁定 IP 後,利用瀏覽器連線,己經可以看到剛才建立的測試網頁:

補充:
如 Constraint 設定錯誤,移除不需要的綁定:
pcs constraint colocation remove <source_resource> <target_resource>
pcs constraint colocation remove WebSite ClusterIP

確保 Resource 按順序啟動和停止:
pcs constraint order ClusterIP then WebSite    #ClusterIP 的 resource 恢復時,觸發 WebSite 的 resource 也恢復運作

pcs constraint

設定 WebSite 預設啟動的節點(假設某一台的硬體資源較好,可以設定優先啟用服務在該台主機):
pcs constraint location WebSite prefers c7-clustera=50
pcs constraint

查看節點的順序權值分數:
crm_simulate -sL

強制手動移轉 WebSite Resource 到 c7-clusterb:
pcs constraint location WebSite prefers c7-clusterb=INFINITY
pcs constraint
pcs status

當完成維護時,可以刪除剛才手動移轉到 c7-clusterb 的 resource 綁定,首先取得綁定的 ID:
pcs constraint --full

例如刪掉 c7-clusterb:
pcs constraint remove location-WebSite-c7-clusterb-INFINITY
可以看到 Resource 還是停留在 c7-clusterb,是因為在前面的步驟有設定 pcs resource defaults resource-stickiness=100 讓服務停留在移轉後的主機上。
補充: 取消 resource-stickiness 設定 pcs resource defaults resource-stickiness=0 或者前面建立Resource有指定meta resource-stickiness時 則可用 pcs resource meta ClusterIP resource-stickiness=0


抄寫資料庫使用 DRDB
二台節點主機上匯入 GPG-KEY:

二台節點主機 安裝 DRDB 套件:
yum install -y kmod-drbd84 drbd84-utils

備註(我是用 CentOS 7.3。這個 bug 在 7.1 之後不知解決了沒?  我還是先下載修正程式了,因為文章作者有說明這個修正程式在軟體更新時會被取代。):
CentOS 7.1 附帶的 drbd84-utils 版本在 Pacemaker 中有一個錯誤。
在修訂之前,可從下列位址下載受影響的 script:
curl -o /usr/lib/ocf/resource.d/linbit/drbd 'http://git.linbit.com/gitweb.cgi?p=drbd-utils.git;a=blob_plain;f=scripts/drbd.ocf;h=cf6b966341377a993d1bf5f585a5b9fe72eaa5f2;hb=c11ba026bbbbc647b8112543df142f2185cb4b4b'

SELinux 設定 DRBD 權限(未關閉 SELinux):
semanage permissive -a drbd_t

防火牆未關閉須設定:
c7-clustera:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.60.156" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

c7-clusterb:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.60.157" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

台節點主機 建一個 LVM 磁區來測試:
新增一個空的磁碟做 LVM:
fdisk -l
fdisk /dev/sdb

每台節點主機 建 LV 空間來測試使用:
pvcreate /dev/sdb1
vgcreate testvg /dev/sdb1
lvcreate --name drbd-demo --size 1G testvg

配置 DRBD 資料庫:
cat <<END >/etc/drbd.d/wwwdata.res
resource wwwdata {
 protocol C;
 meta-disk internal;
 device /dev/drbd1;
 syncer {
  verify-alg sha1;
 }
 net {
  allow-two-primaries;
 }
 on c7-clustera {
  disk   /dev/testvg/drbd-demo;
  address  192.168.60.156:7789;
 }
 on c7-clusterb {
  disk   /dev/testvg/drbd-demo;
  address  192.168.60.157:7789;
 }
}
END
備註:
allow-two-primaries;    #可以兩台主機同時掛載

初始化台節點主機上的 DRBD 資料庫:
drbdadm create-md wwwdata

modprobe drbd
drbdadm up wwwdata

設定其中一台節點主機為 primary:
drbdadm primary --force wwwdata

如果立即檢查狀態,會看到正在同步的狀態:
cat /proc/drbd

確認二台節點主機 上的 DRBD 狀態:
cat /proc/drbd


格式化 Primary DRBD 磁區(Secondary 不需要):
mkfs.xfs /dev/drbd1

掛載資料夾:
mount /dev/drbd1 /mnt

建一個測試網頁:
cat <<-END >/mnt/index.html
 <html>
  <body>My Test Site - DRBD</body>
 </html>
END

建立測試網頁後,缷載 /mnt:
umount /dev/drbd1

設定 DRBD Cluster 配置:
pcs cluster cib drbd_cfg

建立 Resource 並建立一個 Clone 資源,以允許資源同時在兩台 DRBD 運作:
pcs -f drbd_cfg resource create WebData ocf:linbit:drbd drbd_resource=wwwdata op monitor interval=60s
pcs -f drbd_cfg resource master WebDataClone WebData master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

檢查 WebDtat Resource 狀況:
pcs -f drbd_cfg resource show


提交更新 drbd_cfg 配置的設定:
pcs cluster cib-push drbd_cfg

觀察設定:
pcs status

載入 DRBD 模組(在 CentOS 7 系統安裝 DRBD 似乎不會自動載入 DRBD 模組):
echo drbd > /etc/modules-load.d/drbd.conf

DRBD Split-Brain 處理:
Split-Brain 發生原因是兩台 DRBD 斷開了連接,都以 Primary 身份來運行。當再連接後發現對方也是 primary 狀態,就會立刻自行又開連接。
手動恢復前,確認要保留哪一台的資料後,到另一台 DRBD 主機上執行下列指令:
pcs resource disable WebFS
pcs resource disable WebSite
drbdadm secondary wwwdata    #將該台 DRBD 設定為 Secondary
drbdadm disconnect wwwdata
drbdadm -- --discard-my-data connect wwwdata
確認是否正常連線,若依然是 StandAlone 則需手動執行下列指令連線:

drbdadm connect wwwdata

設定 Cluster 的 Filesystem,並設定 WebFS 必須在 Apache 啟動時先啟動:
已經有一個工作的DRBD設備,現在需要建一個掛載它的檔案系統:
pcs cluster cib fs_cfg
pcs -f fs_cfg resource create WebFS Filesystem device="/dev/drbd1" directory="/var/www/html" fstype="xfs"    #將運作中的 /dev/drbd1 掛載到 /var/www/html
pcs -f fs_cfg constraint colocation add WebFS with WebDataClone INFINITY with-rsc-role=Master
pcs -f fs_cfg constraint order promote WebDataClone then start WebFS

告訴 Cluster,Apache需要與檔案系統在相同的機器上運行,並且它必須在Apache可以啟動之前處於活動狀態:
pcs -f fs_cfg constraint colocation add WebSite with WebFS INFINITY
pcs -f fs_cfg constraint order WebFS then WebSite

檢查更新後的配置:
pcs -f fs_cfg constraint

pcs -f fs_cfg resource show

確認提交設定 fs_cfg 配置的設定:
pcs cluster cib-push fs_cfg
pcs status

測試 Cluster Failover 移轉:
pcs cluster standby c7-clusterb
或者
pcs cluster stop c7-clusterb

觀察移轉狀況:
pcs status

恢復 c7-clustera standby 狀態:
pcs cluster unstandby c7-clustera
pcs status --full


設定 Fence Server (STONITH: Shoot The Other Node In The Head,  aka. fencing)
保護數據,避免非預期同一 Cluster 主機同時重覆訪問同一資料庫而造成損壞。

設定 Fence Server 管理所有節點:
補充:
fence_xvm 需要 cpu 支持 kvm
檢查 CPU 是否支援KVM:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果輸出是 0,以下 Fence Server 的部份就不用做了

以下的步驟設定是成功了,但運作上還是有問題。可能真的是 CPU 不支援 KVM 或漏了哪個步驟吧?
留待日後再測試。

網路環境
主機名稱
ip 位址
fincing
eth0: 192.168.60.159/24 (和 virbr0 設定為 brige)
virbr0: 192.168.122.1/24
c7-clustera
192.168.60.156/24
c7-clusterb
192.168.60.157/24
fence_xvm_vip
192.168.60.180/24

Fence server 網路卡介面 ifcfg-eth0 設定修改為:
內容:
DEVICE=eth0
ONBOOT=yes
DOMAIN=tw.company
SEARCH=tw.company
#NM_CONTROLLED=no
HWADDR=00:0c:29:d8:82:17
BRIDGE=virbr0

新增網路卡介面 ifcfg-virbr0 設定修改為:
內容:
DEVICE="virbr0"
TYPE=BRIDGE
ONBOOT=yes
BOOTPROTO=static
IPADDR="192.168.60.159"
NETMASK="255.255.255.0"
GATEWAY="192.168.60.254"
DNS1="192.168.60.253"

網路 brige 功能需要開啟 multicast querier:
暫時開啟:
echo 1 > /sys/class/net/virbr0/bridge/multicast_querier
固定開啟:
touch /etc/sysconfig/network-scripts/vnet_querier_enable
chmod 755 /etc/sysconfig/network-scripts/vnet_querier_enable
vi /etc/sysconfig/network-scripts/vnet_querier_enable
內容:
#!/bin/sh
if [[ $INTERFACE == virbr* ]]; then
    /bin/echo 1 > /sys/devices/virtual/net/$INTERFACE/bridge/multicast_querier
fi

建立 udev 規則檔案:
vi /etc/udev/rules.d/61-virbr-querier.rules
內容:
ACTION=="add", SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/vnet_querier_enable"

檢查是否有載入 KVM 模組:
lsmod | grep 'kvm'


Fence server 安裝相關套件:
yum install -y fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicast fence-virtd-serial virt-manager

安裝套件後,查看 節點狀態:
virsh list

Fence Server 上產生 fence_xvm.key 金鑰:
mkdir -p /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=1k count=4

在 c7-clustera,c7-clusterb 建立 /etc/cluster
ssh c7-clustera -- 'mkdir -p /etc/cluster'
ssh c7-clusterb -- 'mkdir -p /etc/cluster'

複製 fence_xvm.key 到 c7-clustera,c7-clusterb 主機內的 /etc/cluster
scp /etc/cluster/fence_xvm.key c7-clustera:/etc/cluster
scp /etc/cluster/fence_xvm.key c7-clusterb:/etc/cluster

配置fence_virtd,fence_virt.conf 設定檔:
fence_virtd -c

產生的 fence 設定檔位置:
/etc/fence_virt.conf

啟動 fence Service:
systemctl start fence_virtd.service
systemctl enable fence_virtd.service

防火牆設定(fence 主機與各節點都要開啟):
確認是否有安裝 firewalld:
rpm -q firewalld
如何有:
firewall-cmd --permanent --add-port=1229/tcp
firewall-cmd --permanent --add-port=1229/udp
firewall-cmd --reload

顯示連線狀況:
virsh list

在 c7-clustera,c7-clusterb 節點設定 fence_xvm stonith resource:
安裝 fence-virt:
yum install -y fence-agents-all fence-virt

在 c7-clustera,c7-clusterb,fencing 主機上驗證設定:
fence_xvm -o list      #正確配置時,會顯示所有節點狀態

若出現下列訊息,表示前面的網路 brige 設定有問題:
# fence_xvm -o list
Timed out waiting for response
Operation failed

確認 c7-clustera,c7-clusterb 的 stonith-enabled 為 true 的狀態:
pcs property show stonith-enabled

如果為 false 狀態,使用下列指令啟用 stonith-enabled:
pcs property set stonith-enabled=true

在 c7-clustera 建立一個 fencd_xvm_fc 的 resource,並加入 fencd_xvm_group 群組:
pcs stonith create fence_xvm_fc fence_xvm key_file=/etc/cluster/fence_xvm.key --group fence_xvm_group

查看設定:
pcs stonith

在 c7-clustera 建立一個 fencd_xvm_vip 的 IPaddr2 resource,並加入 fencd_xvm_group 群組:
pcs resource create fence_xvm_vip IPaddr2 ip=192.168.60.180 cidr_netmask=24 --group fence_xvm_group

查看設定狀態:
pcs status

重啟 c7-clustera:
stonith_admin --reboot c7-clustera      #正確配置時,c7-clustera 應已經重新開機
pcs status

補充:
新增、移除 Cluster 主機:
新增:
在 c7-clustera 上將主機加入現有的 cluster:
pcs cluster auth -u hacluster -p hacluster c7-clusterc
pcs cluster node add c7-clusterc

c7-clusterc 驗證其他節點 hacluster 密碼:
pcs cluster auth -u hacluster -p redhat1

c7-clusterc 上設定重啟後可啟動 cluster sevice:
pcs cluster enable
pcs cluster start
pcs status

在 c7-clustera 上設定 fencing 加入 c7-clusterc:
pcs stonith create fence_c7-clusterc fence_xvm pcmk_host_list="c7-clusterc" multicast_address="255.0.0.12" key_file="/etc/cluster/fence_xvm.key"
或者
pcs stonith create fence_c7-clusterc fence_virt port="c7-clusterc" pcmk_host_list="c7-clusterc" ipaddr="fencing"

檢查 cluster 狀態:
pcs stonith show

fence server 重啟 fence_virtd 服務:
systemctl restart fence_virtd.service

重啟 c7-clusterc 確認服務正常運作:
reboot
pcs status

移除:
pcs cluster node remove c7-clusterc
移除 Cluster 主機後,有些 Resource 需要重設定。



採用 iSCSI 磁碟安裝 GFS2 Cluster 檔案系統:
使用 SELinux 時會有額外的檔案屬性,使用 GFS2 檔案系统時好關閉 SELinux,否則會降低其效能。

iSCSI 伺服器:
我的例子有新增一台提供 iSCSI 服務的伺服器,讓兩台 cluster 主機掛載同一共享資料夾:。
參考之前的步驟:

也可以不要用 iSCSI Server。
利用 cluster 主機剩餘的硬碟空間(或 VMWare 新增一個空磁碟)。

GFS2 Cluster 節點設定:
設定 no-quorum-policy :
pcs property set no-quorum-policy=freeze

安裝 GFS2 相關套件:
GFS2 (Global File System) 全球檔案系統
DLM(Distributed Lock Manager)鎖定管理程式

yum install -y gfs2-utils lvm2-cluster dlm

c7-clustera、c7-clusterb 上啟用 Cluster DLM:
lvmconf --enable-cluster
ssh c7-clusterb -- 'lvmconf --enable-cluster'

c7-clustera、c7-clusterb 確認 locking_type = 3:
grep 'locking_type' /etc/lvm/lvm.conf | grep -v '#'
結果為:
locking_type = 3

建立一個名稱為 gfs2_dlm 的 controld resource 並且 clone:
pcs resource create gfs2_dlm systemd:dlm op monitor interval=30s clone interleave=true ordered=true

建立一個名稱為 gfs2_clvmd 的 clvm resource 並且 clone:
pcs resource create gfs2_clvmd clvm op monitor interval=30s clone interleave=true ordered=true

觀察設定狀況:
pcs status

置 DLM CLVMD cluster resource 屬性:
pcs constraint order start gfs2_dlm-clone then gfs2_clvmd-clone

pcs constraint colocation add gfs2_clvmd-clone with gfs2_dlm-clone
pcs constraint colocation

c7-clustera、c7-clusterb 修改 /etc/lvm/lvm.conf:
[root@c7-clustera ~]# egrep 'volume_list' /etc/lvm/lvm.conf | grep -v '#'
    volume_list = [ "gfs2_vg", "testvg" ]    #gfs2_vg 是等下要建的 VG, testvg 是前面 DRBD 所建立的 VG

在 c7-clustera 上建立一個 LVM 或其他格式的磁區給 GFS2 使用:
說明:
1.這裡是利用 iSCSI 方式使用同一個共享的磁區。

建置 LVM 磁區:
參考之前做的步驟:

我在建立 LV 磁區時有可能會遇到一個錯誤,原因是節點間不會同步 PV、VG 資訊,可能是 lvm.conf 的檔案未修改
網路上還有其他原因,有的是說要用 clvmd -R 讓 PV、VG 同步資訊,也有要用 multipath -r 讓不同主機資料同步。



格式化 GFS2 磁區:
mkfs.gfs2 -p lock_dlm -t c7-cluster:gfs2fs -j 2 /dev/gfs2_vg/gfs2_lv

確認兩台節點所掛載的 iSCSI 磁區 UUID 是相同的:
blkid | grep '/dev/sdc1'

建立一個 GFS2 掛載目錄:
mkdir /gfs2_data
ssh c7-clusterb -- 'mkdir /gfs2_data'

建立一個 gfs2_res 的 Filesystem Resource:
pcs resource create gfs2_res Filesystem device="/dev/gfs2_vg/gfs2_lv" directory="/gfs2_data/" fstype="gfs2" options="noatime,nodiratime" op monitor interval=10s clone interleave=true

設定 GFS2 DLM resource 的啟動、停止順序:
pcs constraint order start gfs2_clvmd-clone then gfs2_res-clone

驗證 GFS2 掛載 iSCSI 目錄:


DRBD 重新配置為GFS2 檔案系統:
pcs resource disable WebFS
如果 WebSite 的運作在 c7-clusterb,而在 c7-clustera 執行下列指令:
[root@c7-clustera ~]# mkfs.gfs2 -p lock_dlm -j 2 -t c7-cluster:WebSite /dev/drbd1
則會出現下列錯誤訊息:
/dev/drbd1: Read-only file system

[root@c7-clusterb ~]# mount /dev/drbd1 /mnt
[root@c7-clusterb ~]# cat <<-END >/mnt/index.html
<html>
<body>My Test Site - GFS2</body>
</html>
END
[root@c7-clusterb ~]# umount /dev/drbd1
[root@c7-clusterb ~]# drbdadm verify wwwdata
[root@c7-clusterb ~]# pcs resource show WebFS

[root@c7-clusterb ~]# pcs resource update WebFS fstype=gfs2
[root@c7-clusterb ~]# pcs resource show WebFS

[root@c7-clusterb ~]# pcs constraint colocation add WebFS with gfs2_dlm-clone INFINITY
[root@c7-clusterb ~]# pcs constraint order gfs2_dlm-clone then WebFS
[root@c7-clusterb ~]# pcs resource enable WebFS
測試:


Clone Resource 配置:
因為無法同時訪問兩個 Cluster IP address,所以沒有必要讓這兩個 IP Active。所以設定一個 Clone IP address 綁定到 ClusterIP(VIP) Resource:
配置 loadbalance resource:
[root@c7-clustera ~]# pcs cluster cib loadbalance_cfg
[root@c7-clustera ~]# pcs -f loadbalance_cfg resource clone ClusterIP clone-max=2 clone-node-max=2 globally-unique=true
[root@c7-clustera ~]# pcs -f loadbalance_cfg constraint


現在設定resource如何決定哪些請求由哪些主機處理。這裡指定clusterip_hash參數。sourceip 的取值表示著進入的來源IP地址將被 hash
[root@c7-clustera ~]# pcs -f loadbalance_cfg resource update ClusterIP clusterip_hash=sourceip

提交確認 loadbalance_cfg 配置:
[root@c7-clustera ~]# pcs cluster cib-push loadbalance_cfg
[root@c7-clustera ~]# pcs status

查看兩台主機的網路介面會發現各綁定了 VIP address : 192.168.60.170


Clone Filesystem 和 Apache Resource:
現在有一個 Cluster Filesystem,可以將請求 Loadbalance 要求綁定到一個共享的 VIP address,配置 Cluster 讓兩個節點都掛載檔案系統並回應Web請求。
[root@c7-clustera ~]# pcs cluster cib active_cfg
[root@c7-clustera ~]# pcs -f active_cfg resource clone WebFS
[root@c7-clustera ~]# pcs -f active_cfg resource clone WebSite
[root@c7-clustera ~]# pcs -f active_cfg constraint

通知Cluster允許將二台主機提升為DRBD Primary:
[root@c7-clustera ~]# pcs -f active_cfg resource update WebDataClone master-max=2

提交確認 Clone resource active_cfg 配置:
[root@c7-clustera ~]# pcs cluster cib-push active_cfg
[root@c7-clustera ~]# pcs resource enable WebFS
[root@c7-clustera ~]# pcs resource






沒有留言:

張貼留言

Nutanix平台虛擬機(UBUNTU),利用Veeam備份移轉至VMware平台,安裝套件、系統更新出現錯誤

 mount: /var/lib/grub/esp: special device /dev/disk/by-id/scsi-SNUTANIX_VDISK_NFS_4_0_7672_2d41cbaa_025e_4fac_849c_9e620eff5bff-part1 does n...