備註:
- 此教學課程需要能夠存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure 免費層。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室之後,請將這些值取代為您雲端環境特有的值。
在 Oracle Cloud Infrastructure 上使用 Corosync/Pacemaker 設定 pfSense 高可用性主動 / 被動叢集
注意:Netgate 或 Oracle 不正式支援 Oracle Cloud Infrastructure 上的 pfSense。請先聯絡 pfSense 支援小組,再嘗試此教學課程。
簡介
Oracle Cloud Infrastructure (OCI) 是一組互補的雲端服務,可讓您在高可用性的託管環境中建置和執行各種應用程式和服務。Oracle Cloud Infrastructure (OCI) 提供高效能運算功能 (作為實體硬體執行處理) 和儲存容量,並可在從企業內部部署網路安全地存取的彈性重疊虛擬網路中提供。
pfSense 是自由且開放原始碼的防火牆和路由器,同時具有統一威脅管理、負載平衡、多 WAN 等功能。
目標
在 OCI 中協助設定 pfSense 虛擬設備的高可用性主動 / 被動組態和 Corosync/Pacemaker 。
必要條件
- 存取 Oracle Cloud 租用戶
- 租用戶的虛擬雲端網路設定
- Oracle Object Storage 、虛擬雲端網路、運算和自訂映像檔的所有必要原則設定。
指向備註
- 本教學課程將分成一個區域虛擬雲端網路,其中有兩個子網路:公用和專用,分別具有 192.0.2.0/29 和 192.0.2.8/29 的 CIDR
- 主要執行處理 - Node1,次要執行處理 - Node2
- Node1 主機名稱 - "pfSense-primary" 與 IP: 192.0.2.2/29
- Node2 主機名稱 - 「pfSense-secondary」與 IP: 192.0.2.5/29
- 您可以使用 pfSense 編輯檔案工具 (位於 pfSense 主控台、診斷、編輯檔案 ) 來進行檔案變更。
- 本教學課程使用 pfSense Shell 一詞,您可以透過 ssh 存取 Shell,然後在 pfSense 功能表中選取 8。
作業 1:在 Oracle Cloud 安裝兩個 pfSense 虛擬設備
在本教學課程中,我們將使用兩個 pfSense 虛擬設備來提供高可用性。您可以依需求設定多個節點。請依照本教學課程的步驟,在 Oracle Cloud Infrastructure 上安裝並設定 pfSense 。
注意:
- 兩個節點應該設定在不同的可用性網域中,而且應該能夠相互偵測。
- 您可以在不同的虛擬雲端網路或區域中設定這些節點,但請確定已定義適當的對等互連閘道和路由表,讓節點可以存取另一個節點。
- 如果您無法從另一個節點偵測節點,請確認您的 pfSense 防火牆規則及與執行處理關聯的 Oracle Cloud 安全清單,並允許 ICMP 流量。
安裝必要的套裝程式
-
預設會停用 FreeBSD 儲存區域。若要啟用 FreeBSD 儲存區域,請遵循下列步驟:
- 設定 FreeBSD:
{ enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
- 設定 FreeBSD:
{ enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
- 設定 FreeBSD:
-
啟用 FreeBSD 儲存庫之後,請更新套裝軟體管理員。
Node1@ pkg update Node2@ pkg update
注意:這會更新套裝軟體管理員與儲存區域描述資料。
-
必須安裝下列四個必要的套裝程式,才能設定高可用性叢集。
- 小精靈
- Corosync
- CRM
- OCI CLI
執行下列指令以進行安裝
Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
依照提示完成安裝。
作業 3:設定執行處理的 Pacemaker/Corosync
設定 Corosync
-
在這兩個執行處理中執行下列命令來建立新的 Corosync conf 檔案。
Node1@ touch /usr/local/etc/corosync/corosync.conf Node2@ touch /usr/local/etc/corosync/corosync.conf
-
將下列組態貼至兩個節點的命令檔。
注意:請確定您已取代節點清單中的 IP 位址。
# Please read the corosync.conf.5 manual page totem { version: 2 crypto_cipher: none crypto_hash: none transport: udpu } logging { fileline: off to_logfile: yes to_syslog: yes logfile: /var/log/cluster/corosync.log debug: on timestamp: on logger_subsys { subsys: QUORUM debug: on } } nodelist { node { ring0_addr: 192.0.2.2 # make sure to replace with your IP nodeid: 1 } node { ring0_addr: 192.0.2.5 # make sure to replace with your IP nodeid: 2 } } quorum { # Enable and configure quorum subsystem (default: of # see also corosync.conf.5 and votequorum.5 provider: corosync_votequorum }
如果您嘗試立即啟動 Corosync,錯誤訊息 「裝置上無剩餘空間」將失敗。
在兩個節點上啟用 RAM 磁碟
Corosync 和 Pacemaker 倚賴 /var
目錄執行時期,如果您進行預設安裝,則 /var
的可用空間非常有限。您必須為 /var
和 /tmp
目錄設定及使用記憶體 (RAM),這也有助於提升效能。
-
在您的 pfSense 主控台中,瀏覽至系統,按一下進階,然後按一下其他。
-
向下捲動至記憶體磁碟設定,然後選取使用 Ram 磁碟核取方塊。
-
輸入您要配置給
/tmp
和/var
目錄的 RAM 磁碟大小。 -
儲存組態。第一次啟用 RAM 磁碟時,系統會提示您重新啟動,您之後可以隨時增加或減少 RAM 磁碟大小。
注意: 由於我們使用 Ram 磁碟,因此在系統關機的情況下,我們
/tmp
和/var
中的所有檔案都將會遺失。我們必須設定啟動指令碼 (rc.d 檔案),這會建立 Corosync 與 Pacemaker 需要正常運作的目錄。 -
開啟
/usr/local/etc/rc.d/corosync
檔案,並將下列行新增至兩個節點上的第 17 行之後的程式碼。mkdir -p /var/lib/corosync mkdir -p /var/run/qb chmod 777 /var/run/qb
-
在您進行變更後,Jle 將看起來如下:
#!/bin/sh # PROVIDE: corosync # REQUIRE: LOGIN FILESYSTEMS # KEYWORD: shutdown . /etc/rc.subr name="corosync" rcvar="corosync_enable" start_precmd="corosync_precmd" corosync_precmd() { if [ `${SYSCTL_N} kern.ipc.maxsockbuf` -lt 18874368 ]; then err 3 "sysctl:kern.ipc.maxsockbuf must be at least 18874 fi mkdir -p /var/lib/corosync mkdir -p /var/run/qb chmod 777 /var/run/qb } load_rc_config $name : ${corosync_enable:=YES} command="/usr/local/sbin/corosync" run_rc_command "$1"
在所有節點上啟動 Corosync 與 Pacemaker 服務
現在可將 corosync_enable=YES
和 pacemaker_enable=YES
新增至 /etc/rc.conf
檔案。在所有節點上執行下列命令。
Node1@ sysrc corosync_enable=YES
Node2@ sysrc corosync_enable=YES
Node1@ sysrc pacemaker_enable=YES
Node2@ sysrc pacemaker_enable=YES
Node1@ service corosync start
Node2@ service corosync start
Node1@ service pacemaker start
Node2@ service pacemaker start
注意:
- 啟動 Pacemaker 需要幾秒鐘的時間。
- 如果您在嘗試啟動 Corosync 時收到錯誤訊息:E
RROR: sysctl:kern.ipc.maxsockbuf must be at least 18874368
,請前往 pfSense 主控台,按一下系統,然後按一下進階,再按一下系統調整項目,然後更新所有節點上sysctl:kern.ipc.maxsockbuf
的值。
檢查叢集狀態
-
我們已在所有節點上執行 Pacemaker 和 Corosync,請檢查叢集狀態。請執行下列命令來檢查狀態:
Node1@ crm status
-
現在就停用 Stonith,因為我們不在此自學課程中涵蓋 Stonith。
Node1@ crm configure property stonith-enabled=false Node2@ crm configure property stonith-enabled=false
如您在影像中所見,狀態會告訴您已設定並上線兩個節點。
注意:
- 如果您未見到兩個節點皆已配置且上線 (如圖像中所示),它代表只有一個實例已配置且在線上。這表示節點無法彼此交談。
- 若要解決此問題,請查看 pfSense 和 Oracle Cloud 安全清單以允許 UDP 和 ICMP 流量。
作業 4:設定 Oracle Cloud Infrastructure CLI
我們需要 OCI CLI 在基礎架構層級的節點之間移動並建立虛擬浮動 IP 的關聯。我們先前已在其他套裝程式安裝 OCI CLI,現在將設定此組態。我們想要使用執行處理主要項目來授權 CLI 命令。您可以進一步瞭解執行處理主體和 OCI 剪輯
請關注此部落格並設定 Oracle Cloud Infrastructure 執行處理主要項目。
設定虛擬浮動 IP
在本教學課程中,我們將使用 192.0.2.3/29 作為虛擬浮動 IP。無法在以 FreeBSD 為基礎的 pfSense 中設定 IPaddr2 活動訊號。如果我們仍然嘗試,將會發出錯誤「IP 無法使用」,套裝軟體 IP 僅限 linux。我們將改設定 IPaddr 散熱片。
-
在檔案編輯器中開啟
/usr/local/lib/ocf/resource.d/heartbeat/IPaddr
。 -
新增幾行程式碼,以起始 OCI CLI 將 IP 從一個 vNIC 移到另一個 vNIC。在指令碼的 add_interface() 方法中,於第 584 行後新增下列程式碼行。
-
在命令檔中指定 node1vnic、node2vnic、vnicip 和主機名稱值。您可以在 Oracle Cloud 主控台、運算、連附的 vNICs 功能表中找到您的 vNIC OCID。
else ##### OCI vNIC variables server="`hostname -s`" node1vnic="<node1vnic>" node2vnic="<node2vnic>" vnicip="<floating_IP>" export LC_ALL=C.UTF-8 export LANG=C.UTF-8 touch /tmp/ip_switch_error.log ##### OCI/IPaddr Integration if [ $server = "<host_name>" ]; then /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node1vnic --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1 else /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node2vnic --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1 fi
-
針對節點 1:在 Oracle Cloud 主控台中,前往運算,然後按一下 pfSense-primary ,再按一下連附的 vNIC 。選取主要 vNIC 並新增次要專用 IP (與上述命令檔中的 floating_IP 相同)
-
針對這兩個節點:在 pfSense 主控台中,前往防火牆,然後按一下虛擬 IP ,並新增 IP 別名 (與上述命令檔中的 floating_IP 相同)。
設定活動訊號
-
在 pfSense shell 中,對節點 1 執行下列指令。
crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3 cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
-
在此教學課程中,192.0.2.3 為浮動 IP。請確定將 ip、網路遮罩和 nic 值取代為您的值。這應該會在 Pacemaker 中建立 IP 資源。
如果您現在執行 crm status
,您將會在線上看到兩個節點,以及一個指向 pfSense-primary
的可用資源。您也可以執行 ipconfig vtnet0
,檢查虛擬 IP 現在是否與主要節點上的介面關聯。
測試容錯移轉
目前的狀態
-
執行下列命令強制切換:
crm resource move IP pfSense-secondary.example.com
-
執行
crm status
命令,您會看到浮動 IP 資源現在已移至 pfSense 次要。 -
查看您節點的 Oracle Cloud 主控台 vNIC 服務,您將會看到浮動 IP 現在已移至第二個節點。
注意: 如果您現在嘗試關閉,資源將會變成已停止狀態,因為它無法判斷要將哪個節點視為主要節點,因為 pfSense 至少需要 50% 的票數來指定主要節點。由於我們只有 2 個節點,其中其中一個節點已關閉,Pacemaker 將無法將一個節點設為主要節點。
-
執行下列命令以忽略 50% 投票原則:
crm configure property no-quorum-policy=ignore
-
現在測試關閉,您就可以看到浮動 IP 移動。
作業 5:設定 XLMRPC 與 pfsync
如果想要擁有真正高可用性的叢集,只要移動 IP 就不會進行同步,我們就會希望節點處於已同步狀態。我們必須在每個執行處理上設定另一組 vNIC 以進行同步。
設定 Sync 介面
-
針對兩個節點:前往運算,選取執行處理,開啟連附的 vnics ,然後按一下建立 vnic 。
-
建立並連附 vNIC 之後,請前往 pfSense 主控台、按一下介面,然後按一下指定項目,然後新增偵測到的新介面。
-
按一下新指定的介面並設定其組態。
-
在 OCI 主控台的先前步驟中,指定我們建立的靜態 IPv4 位址和子網路遮罩。
-
按一下儲存並套用變更。
在主要節點上設定高可用性
- 前往 pfSense 主控台,按一下系統,然後按一下高可用性同步。
- 啟用 pfsync 狀態同步 。
- 選擇同步介面。
- 新增次要節點 IP。
- XMLRPC 同步組態 :新增次要節點 IP。
- 設定使用者名稱與密碼,並檢查所有要同步的內容。
- 按一下儲存並套用。
在次要節點上設定高可用性
- 前往 pfSense 主控台,按一下系統,然後按一下高可用性同步。
- 啟用 pfsync 狀態同步 。
- 選擇同步介面。
- 新增主要節點 IP。
- 按一下儲存並套用。
防火牆狀態會在兩個節點之間同步,您可以嘗試在主要執行處理上新增防火牆規則,也會在您的次要節點上看到相同的狀態。現在藉由系統關閉,可以嘗試再次測試容錯移轉。
相關連結
致謝
作者 - Mayank Kakani (OCI 雲端架構師)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或是存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,造訪 education.oracle.com/learning-explorer 成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Configure a pfSense High Availability active/passive cluster with Corosync/Pacemaker on Oracle Cloud Infrastructure
F70197-02
September 2022
Copyright © 2022, Oracle and/or its affiliates.