如何在 RHEL 9/8 上設置高可用性 Apache(HTTP)集群
                                                    
                                                    Pacemaker 是適用於類 Linux 操作系統的高可用性集群軟體。Pacemaker 被稱為「集群資源管理器」,它通過在集群節點之間進行資源故障轉移來提供集群資源的最大可用性。Pacemaker 使用 Corosync 進行集群組件之間的心跳和內部通信,Corosync 還負責集群中的投票選舉(Quorum)。
先決條件
在我們開始之前,請確保你擁有以下內容:
- 兩台 RHEL 9/8 伺服器
 - Red Hat 訂閱或本地配置的倉庫
 - 通過 SSH 訪問兩台伺服器
 - root 或 sudo 許可權
 - 互聯網連接
 
實驗室詳情:
- 伺服器 1:node1.example.com(192.168.1.6)
 - 伺服器 2:node2.exaple.com(192.168.1.7)
 - VIP:192.168.1.81
 - 共享磁碟:
/dev/sdb(2GB) 
事不宜遲,讓我們深入了解這些步驟。
1、更新 /etc/hosts 文件
在兩個節點上的 /etc/hosts 文件中添加以下條目:
192.168.1.6  node1.example.com
192.168.1.7  node2.example.com
2、安裝高可用包 Pacemaker
Pacemaker 和其他必需的包在 RHEL 9/8 的默認包倉庫中不可用。因此,我們必須啟用高可用倉庫。在兩個節點上運行以下訂閱管理器命令。
對於 RHEL 9 伺服器:
$ sudo subscription-manager repos --enable=rhel-9-for-x86_64-highavailability-rpms
對於 RHEL 8 伺服器:
$ sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
啟用倉庫後,運行命令在兩個節點上安裝 pacemaker 包:
$ sudo dnf install pcs pacemaker fence-agents-all -y

3、在防火牆中允許高可用埠
要允許防火牆中的高可用埠,請在每個節點上運行以下命令:
$ sudo firewall-cmd --permanent --add-service=high-availability
$ sudo firewall-cmd --reload
4、為 hacluster 用戶設置密碼並啟動 pcsd 服務
在兩台伺服器上為 hacluster 用戶設置密碼,運行以下 echo 命令:
$ echo "<Enter-Password>" | sudo passwd --stdin hacluster
執行以下命令在兩台伺服器上啟動並啟用集群服務:
$ sudo systemctl start pcsd.service
$ sudo systemctl enable pcsd.service
5、創建高可用集群
使用 pcs 命令對兩個節點進行身份驗證,從任何節點運行以下命令。在我的例子中,我在 node1 上運行它:
$ sudo pcs host auth node1.example.com node2.example.com
使用 hacluster 用戶進行身份驗證。

使用下面的 pcs cluster setup 命令將兩個節點添加到集群,這裡我使用的集群名稱為 http_cluster。僅在 node1 上運行命令:
$ sudo pcs cluster setup http_cluster --start node1.example.com node2.example.com
$ sudo pcs cluster enable --all
這兩個命令的輸出如下所示:

從任何節點驗證初始集群狀態:
$ sudo pcs cluster status

注意:在我們的實驗室中,我們沒有任何防護設備,因此我們將其禁用。但在生產環境中,強烈建議配置防護。
$ sudo pcs property set stonith-enabled=false
$ sudo pcs property set no-quorum-policy=ignore
6、為集群配置共享卷
在伺服器上,掛載了一個大小為 2GB 的共享磁碟(/dev/sdb)。因此,我們將其配置為 LVM 卷並將其格式化為 XFS 文件系統。
在開始創建 LVM 卷之前,編輯兩個節點上的 /etc/lvm/lvm.conf 文件。
將參數 #system_id_source = "none" 更改為 system_id_source = "uname":
$ sudo sed -i 's/# system_id_source = "none"/ system_id_source = "uname"/g' /etc/lvm/lvm.conf
在 node1 上依次執行以下一組命令創建 LVM 卷:
$ sudo pvcreate /dev/sdb
$ sudo vgcreate --setautoactivation n vg01 /dev/sdb
$ sudo lvcreate -L1.99G -n lv01 vg01
$ sudo lvs /dev/vg01/lv01
$ sudo mkfs.xfs /dev/vg01/lv01

將共享設備添加到集群第二個節點(node2.example.com)上的 LVM 設備文件中,僅在 node2 上運行以下命令:
[sysops@node2 ~]$ sudo lvmdevices --adddev /dev/sdb
7、安裝和配置 Apache Web 伺服器(httpd)
在兩台伺服器上安裝 Apache web 伺服器(httpd),運行以下 dnf 命令:
$ sudo dnf install -y httpd wget
並允許防火牆中的 Apache 埠,在兩台伺服器上運行以下 firewall-cmd 命令:
$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload
在兩個節點上創建 status.conf 文件,以便 Apache 資源代理獲取 Apache 的狀態:
$ sudo bash -c 'cat <<-END > /etc/httpd/conf.d/status.conf
<Location /server-status>
    SetHandler server-status
    Require local
</Location>
END'
$
修改兩個節點上的 /etc/logrotate.d/httpd:
替換下面的行
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
為
/usr/bin/test -f /run/httpd.pid >/dev/null 2>/dev/null &&
/usr/bin/ps -q $(/usr/bin/cat /run/httpd.pid) >/dev/null 2>/dev/null &&
/usr/sbin/httpd -f /etc/httpd/conf/httpd.conf 
-c "PidFile /run/httpd.pid" -k graceful > /dev/null 2>/dev/null || true
保存並退出文件。

8、為 Apache 創建一個示例網頁
僅在 node1 上執行以下命令:
$ sudo lvchange -ay vg01/lv01
$ sudo mount /dev/vg01/lv01 /var/www/
$ sudo mkdir /var/www/html
$ sudo mkdir /var/www/cgi-bin
$ sudo mkdir /var/www/error
$ sudo bash -c ' cat <<-END >/var/www/html/index.html
<html>
<body>High Availability Apache Cluster - Test Page </body>
</html>
END'
$
$ sudo umount /var/www
注意:如果啟用了 SElinux,則在兩台伺服器上運行以下命令:
$ sudo restorecon -R /var/www
9、創建集群資源和資源組
為集群定義資源組和集群資源。在我的例子中,我們使用 webgroup 作為資源組。
web_lvm是共享 LVM 卷的資源名稱(/dev/vg01/lv01)web_fs是將掛載在/var/www上的文件系統資源的名稱VirtualIP是網卡enp0s3的 VIP(IPadd2)資源Website是 Apache 配置文件的資源。
從任何節點執行以下命令集。
$ sudo pcs resource create web_lvm ocf:heartbeat:LVM-activate vgname=vg01 vg_access_mode=system_id --group webgroup
$ sudo pcs resource create web_fs Filesystem device="/dev/vg01/lv01" directory="/var/www" fstype="xfs" --group webgroup
$ sudo pcs resource create VirtualIP IPaddr2 ip=192.168.1.81 cidr_netmask=24 nic=enp0s3 --group webgroup
$ sudo pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group webgroup

現在驗證集群資源狀態,運行:
$ sudo pcs status

很好,上面的輸出顯示所有資源都在 node1 上啟動。
10、測試 Apache 集群
嘗試使用 VIP(192.168.1.81)訪問網頁。
使用 curl 命令或網路瀏覽器訪問網頁:
$ curl http://192.168.1.81

或者

完美!以上輸出確認我們能夠訪問我們高可用 Apache 集群的網頁。
讓我們嘗試將集群資源從 node1 移動到 node2,運行:
$ sudo pcs node standby node1.example.com
$ sudo pcs status

完美,以上輸出確認集群資源已從 node1 遷移到 node2。
要從備用節點(node1.example.com)中刪除節點,運行以下命令:
$ sudo pcs node unstandby node1.example.com

以上就是這篇文章的全部內容,我希望你發現它提供了豐富的信息,請在下面的評論部分中發表你的疑問和反饋。
(題圖:MJ/3bf8c775-72ed-4e44-a28d-c872c7c8632f)
via: https://www.linuxtechi.com/high-availability-apache-cluster-on-rhel/
作者:Pradeep Kumar 選題:lkxed 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive
                    
                                            
                                        
                                            
                
















