ノート:

Oracle Cloud InfrastructureでCorosync/Pacemakerを使用してpfSense高可用性アクティブ/パッシブ・クラスタを構成する

ノート: pfSenseは、NetgateまたはOracleによってOracle Cloud Infrastructureで公式にサポートされていません。このチュートリアルを試す前に、pfSenseサポートチームに連絡してください。

イントロダクション

Oracle Cloud Infrastructure (OCI)は、可用性の高いホスト環境で幅広いアプリケーションおよびサービスを構築および実行できる、補完的なクラウド・サービスのセットです。Oracle Cloud Infrastructure (OCI)は、オンプレミス・ネットワークからセキュアにアクセスできる柔軟なオーバーレイ仮想ネットワークにおいて、高パフォーマンスな計算機能(物理ハードウェア・インスタンスとして)とストレージ容量を提供します。

pfSenseは、統合された脅威管理、ロード・バランシング、マルチWANなども機能する、無料のオープン・ソースのファイアウォールおよびルーターです。

目標

OCIでCorosync/Pacemakerを利用して、高可用性アクティブ/パッシブ構成でpfSense仮想アプライアンスを設定します。

前提条件

注意点

タスク1: Oracle Cloudへの2つのpfSense仮想アプライアンスのインストール

このチュートリアルでは、高可用性に2つの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. 高可用性クラスタの設定に必要な次の4つのパッケージをインストールします。

    1. Pacemaker
    2. コロ同期
    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を起動しようとすると、エラーメッセージ「No space left on device」で失敗します。

両方のノードでRAMディスクを有効化

CorosyncおよびPacemakerは、実行時に/varディレクトリに依存し、デフォルトのインストールを実行した場合、/varで使用可能な領域は非常に制限されます。/varおよび/tmpディレクトリにメモリー(RAM)を設定して使用する必要があり、パフォーマンス向上にも役立ちます。

  1. pfSenseコンソールで、「システム」に移動し、「拡張」「その他」の順にクリックします。

    RAMディスク・メニュー

  2. Ram Disk Settings」までスクロールし、「Use Ram Disks」チェックボックスを選択します。

  3. /tmpおよび/varディレクトリに割り当てるRAMディスク・サイズを入力します。

  4. 構成を保存します。RAMディスクを初めて有効にするときに再起動するように求められます。後で、移動時にRAMディスク・サイズを増減できます。

    RAMディスク構成

    ノート: Ramディスクを使用しているため、システム停止の場合、/tmpおよび/var内のすべてのファイルが失われます。CorosyncおよびPacemakerが適切に機能するために必要なディレクトリを作成する起動スクリプト(rc.dファイル)を設定する必要があります。

  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=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

ノート:

クラスタのステータスの確認

  1. すべてのノードでPacemakerとCorosyncが実行されるようになったので、クラスタのステータスを確認します。ステータスを確認するには、次のコマンドを実行します。

    Node1@ crm status
    

    相関ステータス

  2. このチュートリアルではStonithをカバーしていないため、Stonithを無効にします。

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

    RAMディスク・メニュー

    画像に示されているように、ステータスは2つのノードが構成され、オンラインであることが示されます。

    ノート:

    • イメージに示されているように両方のノードが構成され、オンラインになっていない場合は、1つのインスタンスのみが構成され、オンラインであることを示します。つまり、ノードは相互に通信できません。
    • これを解決するには、pfSenseおよびOracle Cloudセキュリティ・リストをチェックして、UDPおよびICMPトラフィックを許可します。

タスク4: Oracle Cloud Infrastructure CLIの設定

インフラストラクチャ・レベルのノード間で仮想フローティングIPを移動および関連付けるには、OCI CLIが必要です。すでにOCI CLIを他のパッケージとともにインストールしました。ここでは構成を設定します。インスタンス・プリンシパルを使用してCLIコマンドを認可します。Instance PrincipalsおよびOCI cliについてさらに学習できます

このブログに従って、Oracle Cloud Infrastructureインスタンス・プリンシパルを設定します。

仮想フローティングIPの設定

このチュートリアルでは、仮想浮動IPとして192.0.2.3/29を使用します。FreeBSDベースのpfSenseには、IPaddr2ハートビートを設定できません。試してみると、「IP is not available」というエラーがスローされ、パッケージIPはlinuxのみです。かわりに、IPaddrヒートビートを設定します。

  1. ファイル・エディタで/usr/local/lib/ocf/resource.d/heartbeat/IPaddrを開きます。

  2. OCI CLIを開始してIPをvNIC間で移動するコード行をいくつか追加します。スクリプトのadd_interface()メソッドで、行584の後に次のコード行を追加します。

  3. スクリプトでnode1vnic、node2vnic、vnicipおよびホスト名の値を割り当てます。vNIC OCIDは、「Oracle Cloudコンソール」「コンピュート」「アタッチされたvNICs」メニューにあります。

    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シェルで、ノード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、netmaskおよびnicの値を必ず値に置き換えてください。これにより、PacemakerにIPリソースが作成されます。

    pacemakerの状態

crm statusを今すぐ実行すると、オンラインの2つのノードと、pfSense-primaryを指している1つのリソースが表示されます。ipconfig vtnet0を実行して、仮想IPがプライマリ・ノードのインタフェースに関連付けられているかどうかを確認することもできます。

テスト・フェイルオーバー

現行の状態

前にフェイルオーバー・テスト

  1. 強制的にスイッチオーバーするには、次のコマンドを実行します。

    crm resource move IP pfSense-secondary.example.com  
    
  2. crm statusコマンドを実行すると、浮動IPリソースがpfSenseセカンダリに移動されたことがわかります。

  3. ノードのOracle CloudコンソールのvNICデバイスを確認します。浮動IPが2番目のノードに移動したことがわかります。

    フェイルオーバー・テスト

    ノート: ここで停止しようとすると、マスターとみなすノードを特定できないため、リソースは停止状態に移行します。これは、pfSenseがマスターを割り当てるには50%以上の投票が必要であるためです。2つのノードのみがあり、そのうち1つが停止しているため、Pacemakerは1つをマスターとして設定できません。

  4. 50%投票ポリシーを無視するには、次のコマンドを実行します。

    crm configure property no-quorum-policy=ignore
    
  5. シャットダウンをテストすると、浮動IPの移動を確認できます。

タスク5: XLMRPCおよびpfsyncの設定

本当に可用性の高いクラスタが必要な場合は、ノードが同期状態になり、IPを移動するだけでは同期しません。同期のために、各インスタンスに別のvNICのセットを設定する必要があります。

同期インタフェースの設定

  1. 「両方のノード: コンピュートに移動」でインスタンスを選択し、「アタッチされたvnics」を開いて「vnicの作成」をクリックします。

    セカンダリvnicの作成

  2. vNICを作成して接続したら、pfSenseコンソールに移動し、「インタフェース」をクリックしてから、「割り当て」をクリックし、新しく検出されたインタフェースを追加します。

    pfSenseインタフェース

  3. 新しく割り当てられたインタフェースをクリックし、その構成を設定します。

  4. OCIコンソールの前のステップで作成した静的IPv4アドレスおよびサブネット・マスクを割り当てます。

    pfSense同期インタフェース

  5. 「保存」をクリックし、変更を適用します。

プライマリ・ノードでの高可用性の設定

  1. pfSenseコンソールに移動し、「システム」「高可用性同期」の順にクリックします。
  2. pfsync状態同期を有効にします。
  3. 同期インタフェースを選択します。
  4. セカンダリ・ノードIPを追加します。
  5. XMLRPC sync config : セカンダリ・ノードIPを追加します。
  6. ユーザー名とパスワードを設定し、同期するすべてを確認します。 pfSense HA同期構成
  7. 「Save and Apply」をクリックします。

セカンダリ・ノードでの高可用性の設定

  1. pfSenseコンソールに移動し、「システム」「高可用性同期」の順にクリックします。
  2. pfsync状態同期を有効にします。
  3. 同期インタフェースを選択します。
  4. プライマリ・ノードIPを追加します。
  5. 「Save and Apply」をクリックします。

ファイアウォール状態は両方のノード間で同期され、プライマリ・インスタンスでファイアウォール・ルールを追加しようとすると、セカンダリ・ノードにも同じことが表示されます。システムのシャットダウンでフェイルオーバーを再試行およびテストできるようになりました。

謝辞

著者 - Mayank Kakani(OCI Cloud Architect)

その他の学習リソース

docs.oracle.com/learnで他のラボを探すか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。