備註:

在 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

必要條件

指向備註

作業 1:在 Oracle Cloud 安裝兩個 pfSense 虛擬設備

在本教學課程中,我們將使用兩個 pfSense 虛擬設備來提供高可用性。您可以依需求設定多個節點。請依照本教學課程的步驟,在 Oracle Cloud Infrastructure 上安裝並設定 pfSense

注意:

安裝必要的套裝程式

  1. 預設會停用 FreeBSD 儲存區域。若要啟用 FreeBSD 儲存區域,請遵循下列步驟:

    1. 設定 FreeBSD:{ enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. 設定 FreeBSD:{ enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. 啟用 FreeBSD 儲存庫之後,請更新套裝軟體管理員。

    Node1@ pkg update
    Node2@ pkg update
    

    注意:這會更新套裝軟體管理員與儲存區域描述資料。

  3. 必須安裝下列四個必要的套裝程式,才能設定高可用性叢集。

    1. 小精靈
    2. Corosync
    3. CRM
    4. OCI CLI

    執行下列指令以進行安裝

    Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    

    依照提示完成安裝。

作業 3:設定執行處理的 Pacemaker/Corosync

設定 Corosync

  1. 在這兩個執行處理中執行下列命令來建立新的 Corosync conf 檔案。

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. 將下列組態貼至兩個節點的命令檔。

    注意:請確定您已取代節點清單中的 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 設定

如果您嘗試立即啟動 Corosync,錯誤訊息 「裝置上無剩餘空間」將失敗。

在兩個節點上啟用 RAM 磁碟

Corosync 和 Pacemaker 倚賴 /var 目錄執行時期,如果您進行預設安裝,則 /var 的可用空間非常有限。您必須為 /var/tmp 目錄設定及使用記憶體 (RAM),這也有助於提升效能。

  1. 在您的 pfSense 主控台中,瀏覽至系統,按一下進階,然後按一下其他

    Ramdisk 功能表

  2. 向下捲動至記憶體磁碟設定,然後選取使用 Ram 磁碟核取方塊。

  3. 輸入您要配置給 /tmp/var 目錄的 RAM 磁碟大小。

  4. 儲存組態。第一次啟用 RAM 磁碟時,系統會提示您重新啟動,您之後可以隨時增加或減少 RAM 磁碟大小。

    Ramdisk 組態

    注意: 由於我們使用 Ram 磁碟,因此在系統關機的情況下,我們 /tmp/var 中的所有檔案都將會遺失。我們必須設定啟動指令碼 (rc.d 檔案),這會建立 Corosync 與 Pacemaker 需要正常運作的目錄。

  5. 開啟 /usr/local/etc/rc.d/corosync 檔案,並將下列行新增至兩個節點上的第 17 行之後的程式碼。

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. 在您進行變更後,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 設定

在所有節點上啟動 Corosync 與 Pacemaker 服務

現在可將 corosync_enable=YESpacemaker_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

注意:

檢查叢集狀態

  1. 我們已在所有節點上執行 Pacemaker 和 Corosync,請檢查叢集狀態。請執行下列命令來檢查狀態:

    Node1@ crm status
    

    Corosync 狀態

  2. 現在就停用 Stonith,因為我們不在此自學課程中涵蓋 Stonith。

    Node1@ crm configure property stonith-enabled=false
    Node2@ crm configure property stonith-enabled=false
    

    Ramdisk 功能表

    如您在影像中所見,狀態會告訴您已設定並上線兩個節點。

    注意:

    • 如果您未見到兩個節點皆已配置且上線 (如圖像中所示),它代表只有一個實例已配置且在線上。這表示節點無法彼此交談。
    • 若要解決此問題,請查看 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 散熱片。

  1. 在檔案編輯器中開啟 /usr/local/lib/ocf/resource.d/heartbeat/IPaddr

  2. 新增幾行程式碼,以起始 OCI CLI 將 IP 從一個 vNIC 移到另一個 vNIC。在指令碼的 add_interface() 方法中,於第 584 行後新增下列程式碼行。

  3. 在命令檔中指定 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
    
    

    活動訊號組態

  4. 針對節點 1:在 Oracle Cloud 主控台中,前往運算,然後按一下 pfSense-primary ,再按一下連附的 vNIC 。選取主要 vNIC 並新增次要專用 IP (與上述命令檔中的 floating_IP 相同)

    Vnic 新增 ip

  5. 針對這兩個節點:在 pfSense 主控台中,前往防火牆,然後按一下虛擬 IP ,並新增 IP 別名 (與上述命令檔中的 floating_IP 相同)。

    pfSense 虛擬 IP

設定活動訊號

  1. 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"
    
  2. 在此教學課程中,192.0.2.3 為浮動 IP。請確定將 ip、網路遮罩和 nic 值取代為您的值。這應該會在 Pacemaker 中建立 IP 資源。

    吸煙者狀態

如果您現在執行 crm status,您將會在線上看到兩個節點,以及一個指向 pfSense-primary 的可用資源。您也可以執行 ipconfig vtnet0,檢查虛擬 IP 現在是否與主要節點上的介面關聯。

測試容錯移轉

目前的狀態

容錯移轉測試時間早於

  1. 執行下列命令強制切換:

    crm resource move IP pfSense-secondary.example.com  
    
  2. 執行 crm status 命令,您會看到浮動 IP 資源現在已移至 pfSense 次要。

  3. 查看您節點的 Oracle Cloud 主控台 vNIC 服務,您將會看到浮動 IP 現在已移至第二個節點。

    容錯移轉測試時間

    注意: 如果您現在嘗試關閉,資源將會變成已停止狀態,因為它無法判斷要將哪個節點視為主要節點,因為 pfSense 至少需要 50% 的票數來指定主要節點。由於我們只有 2 個節點,其中其中一個節點已關閉,Pacemaker 將無法將一個節點設為主要節點。

  4. 執行下列命令以忽略 50% 投票原則:

    crm configure property no-quorum-policy=ignore
    
  5. 現在測試關閉,您就可以看到浮動 IP 移動。

作業 5:設定 XLMRPC 與 pfsync

如果想要擁有真正高可用性的叢集,只要移動 IP 就不會進行同步,我們就會希望節點處於已同步狀態。我們必須在每個執行處理上設定另一組 vNIC 以進行同步。

設定 Sync 介面

  1. 針對兩個節點:前往運算,選取執行處理,開啟連附的 vnics ,然後按一下建立 vnic

    建立次要 vnic

  2. 建立並連附 vNIC 之後,請前往 pfSense 主控台、按一下介面,然後按一下指定項目,然後新增偵測到的新介面。

    pfSense 介面

  3. 按一下新指定的介面並設定其組態。

  4. 在 OCI 主控台的先前步驟中,指定我們建立的靜態 IPv4 位址和子網路遮罩。

    pfSense 同步介面

  5. 按一下儲存並套用變更。

在主要節點上設定高可用性

  1. 前往 pfSense 主控台,按一下系統,然後按一下高可用性同步
  2. 啟用 pfsync 狀態同步 。
  3. 選擇同步介面。
  4. 新增次要節點 IP。
  5. XMLRPC 同步組態 :新增次要節點 IP。
  6. 設定使用者名稱與密碼,並檢查所有要同步的內容。 pfSense HA 同步組態
  7. 按一下儲存並套用

在次要節點上設定高可用性

  1. 前往 pfSense 主控台,按一下系統,然後按一下高可用性同步
  2. 啟用 pfsync 狀態同步 。
  3. 選擇同步介面。
  4. 新增主要節點 IP。
  5. 按一下儲存並套用

防火牆狀態會在兩個節點之間同步,您可以嘗試在主要執行處理上新增防火牆規則,也會在您的次要節點上看到相同的狀態。現在藉由系統關閉,可以嘗試再次測試容錯移轉。

致謝

作者 - Mayank Kakani (OCI 雲端架構師)

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或是存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,造訪 education.oracle.com/learning-explorer 成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center