一,安裝規划
1.1基本介紹
高可用性集群又稱Failover-cluster(主動-被動集群)是生產環境中使用最廣泛的集群類型之一。這種集群為您提供了服務的持續可用性,即使計算機組中的某個節點出現故障。如果服務器運行的應用程序由於某種原因(硬件故障)失敗,集群軟件(pacemaker)將在另一個節點上重新啟動應用程序。
在生產環境中,您會發現這種類型的集群主要用於數據庫、自定義應用程序和文件共享。故障轉移不僅僅是啟動一個應用程序;它有一系列的相關操作;像安裝文件系統一樣,配置網絡和啟動依賴應用程序。 CentOS 7 / RHEL 7使用pacemaker支持故障轉移集群,我們將在這里討論如何將apache (web)服務器配置為高可用的應用程序。正如我所說,故障轉移是一系列操作,因此我們需要將文件系統和網絡配置為資源。對於文件系統,我們將使用iSCSI存儲中的共享存儲。
1.2節點規划

| 節點 | Hostname | IP地址 |
|---|---|---|
| Node1 | node01.cluster.local | 172.16.10.11 |
| Node2 | node02.cluster.local | 172.16.10.12 |
| iSCSI-Server | iscsinode.cluster.local | 172.16.10.13 |
1.3 安裝環境

本次安裝采用VMware虛擬機的形式部署三個節點,所有節點OS版本為CentOS 7.5
二, 部署iSCSI節點
2.1 說明
共享存儲是高可用性集群中的重要資源之一,它包含運行中的應用程序的數據。集群中的所有節點都可以訪問共享存儲中的應用和數據,SAN是生產環境中使用最廣泛的共享存儲;在這里,我們將使用iSCSI存儲配置一個集群用於演示目的。
2.2 開始部署
在這里,我們將在iSCSI服務器上創建50GB的LVM磁盤,作為集群節點的共享存儲。
2.2.1 查看可用磁盤
fdisk –l |grep –i sd

我們將使用/dev/sdb來創建LVM
2.2.2 創建LVM
執行以下命令:
pvcreate /dev/sdb
vgcreate vg_iscsi /dev/sdb
lvcreate –l 100%FREE –n lv_iscsi vg_iscsi

2.2.3 創建iSCSI Target
安裝targetcli package,
yum install targetcli -y


配置iSCSI Target,執行以下命令:
targetcli
cd /backstores/block
create iscsi_shared_storage /dev/vg_iscsi/lv_iscsi
cd /iscsi
create iqn.2018-09.local.cluster.iscsinode:cluster
cd /iscsi/iqn.2018-09.local.cluster.iscsinode:cluster/tpg1/acls
create iqn.2018-09.local.cluster.iscsinode:node01node02
cd /iscsi/ iqn.2018-09.local.cluster.iscsinode:cluster/tp1/
set attribute authentication=0
set attribute generate_node_acls=1
cd /iscsi/iqn.2018-09.local.cluster.iscsinode:cluster/tp1/luns
create /backstores/block/iscsi_shared_storage

檢查配置並保存退出
cd /
ls
saveconfig
exit

Enable並重啟target服務

添加防火牆規則

三, 配置iSCSI Initiator
分別在兩台HA節點上執行以下操作配置iSCSI Initiator
3.1 安裝iSCSI Initiator
yum install iscsi-initiator-utils -y

3.2發現Target
iscsiadm -m discovery -t st -p 172.16.10.13

3.3 修改iscsi initiator名稱
vi /etc/iscsi/initiatorname.iscsi

3.4 注冊target
iscsiadm –m node –T iqn.2018-09.local.cluster.iscsinode:cluster –p 172.16.10.13 -l

3.5 重啟並Enable Initiator服務
systemctl restart iscsid.service
systemctl enable iscsid.service

四, 配置HA集群節點
4.1 配置LVM
執行以下操作,在兩個節點上創建LVM
確認兩個節點都已經可以看到iSCSI共享存儲


4.2 在節點1上創建LVM
執行以下操作:
pvcreate /dev/sdb
vgcreate vg_apache /dev/sdb
lvcreate -n lv_apache -l 100%FREE vg_apache
mkfs.ext4 /dev/vg_apache/lv_apache


4.3 在節點2上驗證LVM
pvscan
vgscan
lvscan

4.4 確認LVM配置正確


4.5 編輯Hosts
在每個節點上為所有節點創建一個主機條目,集群將使用主機名相互通信。在所有集群節點上執行任務。
vim /etc/hosts

4.6 安裝集群軟件pacemaker
在兩個節點上安裝pacemaker
yum install pcs fence-agents-all -y

4.7 添加防火牆規則
firewall-cmd –permanent –add-service=high-availability
firewall-cmd –add-service=high-availability
firewall-cmd –reload

firewall-cmd –list-service

4.8 集群管理賬號設置
為hacluster用戶設置密碼,此為群集管理帳戶。建議為所有節點設置相同的密碼。

4.9 啟動集群服務
執行以下命令啟動集群服務並設置為開機自動啟動
systemctl start pcsd.service
systemctl enable pcsd.service

五, 創建集群
5.1 節點授權
使用以下命令授權節點,在任何一個節點中運行該命令即可
pcs cluster auth node01.cluster.local node02.cluster.local

5.2 創建集群
pcs cluster setup –start –name centos_cluster node01.cluster.local node02.cluster.local

設置開機自動啟用集群,否則每次重新啟動系統時都需要手動啟動集群。
pcs cluster enable –all

5.3 查看集群狀態
pcs cluster status

運行下面的命令以獲得關於集群的詳細信息,包括其資源、pacemaker狀態和節點詳細信息
pcs status

六, 配置Apache
經過上面的配置,HA高可用集群已經創建完成,下面我們通過配置簡單的Apache服務來驗證集群的高可用。
6.1 安裝Apache
在兩個節點上安裝Apache
yum install –y httpd


編輯Apache配置文件,在配置文件中添加下圖中的內容,兩個節點上都要編輯
vi /etc/httpd/conf/httpd.conf

6.2 配置Apache使用共享存儲
配置使用共享存儲來存儲web內容(HTML)文件。在Node01上執行以下操作
mount /dev/vg_apache/lv_apache /var/www/
mkdir /var/www/html
mkdir /var/www/cgi-bin
mkdir /var/www/error
restorecon –R /var/www

編輯index.html,這里使用輸入重定向的方式簡單編輯了一下, 也可以通過VIM直接編輯

編輯完成后,umount /var/www 注意如果不執行此操作,集群中的其它節點將無法正常訪問apache目錄

添加防火牆規則
firewall-cmd –add-service=http
firewall-cmd –permanent –add-service=http
firewall-cmd –reload

6.3 創建共享資源
為Apache服務器創建一個文件系統資源,並使用iSCSI服務器的共享存儲。
pcs resource create httpd_fs Filesystem device=”/dev/mapper/vg_apache-lv_apache” directory=”/var/www” fstype=”ext4″ –group apache

6.4 配置Floating IP
創建一個IP地址資源,該 IP為訪問Apache的虛擬IP。用戶將使用此ip地址訪問Apache web內容,而不是訪問單個節點的IP地址。 將地址設置為172.16.10.10
pcs resource create httpd_vip IPaddr2 ip=172.16.10.10 cidr_netmask=24 –group apache

6.5 配置heartbeat
創建一個Apache資源,它將監視Apache服務器的狀態,並在出現任何故障時將資源移動到另一個節點
pcs resource create httpd_ser apache configfile=”/etc/httpd/conf/httpd.conf” statusurl=”http://127.0.0.1/server-status” –group apache

6.6 檢查集群狀態
在兩個節點上檢查集群狀態,如下圖,可以看到節群中兩個節點都是在線狀態,並且Apache運行在node01上。

七, 驗證集群
7.1訪問Apache
確認集群啟動並運行后,通過瀏覽器訪問Apache的虛擬ip,確認可以正常訪問

7.2 停止node01的集群服務
因為當前Apache服務是運行在node01上,所以我們現在關閉node01的集群服務,來模擬節點1出現故障不可訪問
pcs cluster stop node01.cluster.local

在節點2上查看集群狀態,可以看到現在只有node02是在線狀態,並且Apache服務已經切換到node02上

關閉瀏覽器,並重新打開訪問Apache虛擬IP地址,確認Apache依然可以正常訪問。 這說明HA高可用是有效的,web服務已經從node01切換到node02上。

7.3 資源回切
當故障節點修復后,如果我們需要將服務重新切換到修復的節點上運行,可按以下方 式操作
重新啟動Node01的集群服務

可以看到兩個節點都已經處於在線狀態,但是Apache服務還是運行在node02上,並沒有自動切換回node01

在node02上運行使用以下命令,將node02節點設置為備用,Apache服務將會切換回node01
pcs node standby

八, 關於隔離設備(Fencing Devices)
隔離設備是一種硬件/軟件設備,它通過重置節點/斷開問題節點訪問共享存儲的連接。由於我這里的實驗是以VM的方式搭建的集群環境,所以沒有配置隔離設備。對於實際的生產環境,或者以物理機部署的高可用集群來說,隔離設備(Fencing Devices)是集群的重要組成部分。使用隔離設備可以防止“腦裂”現象的產生,從而保證集群的正常運行。
關於“腦裂”:
當集群中的兩個節點(或者多個節點)同時認為自已是唯一處於活動狀態的服務器時,就會出現爭用資源的情況,這種爭用資源的場景即是所謂的“腦裂”(split-brain)或”區間集群“(partitioned cluster)。
導致“腦裂”的原因通常有以下幾點:
● 心跳鏈路故障:比如當聯系2個節點的“心跳線”斷開時,由於相互失去了聯系,都以為是對方出了故障,這時兩個節點都開始控制服務和資源,出現資源爭搶,導致業務服務不可用
● 活動節點假死:當活動節點負載過高,系統響應變慢,這時有可能對心跳的回應也出現停止或延遲,備用節點再接收不到主節點的回應后,判斷主節點已經出現故障,開始接管資源和服務,出現資源爭搶,導致業務服務不可用
● 磁盤故障:如果心跳方式采用的是共享磁盤的方式,當共享磁盤出現故障時,節點之間失去聯系,同樣會導致各節點之間開始資源爭搶,導致業務服務不可用。產生腦裂現象
關於隔離設備(Fencing Devices)的詳細配置,可通過以下鏈接進行了解:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/high_availability_add-on_administration/s1-fenceconfig-haaa
