ノート:
- このチュートリアルではOracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructure資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
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仮想アプライアンスを設定します。
前提条件
- Oracle Cloudテナントへのアクセス
- テナンシのVirtual Cloud Network設定
- Oracle Object Storage、Virtual Cloud Networks、ComputeおよびCustom Imagesに必要なすべてのポリシー設定。
注意点
- In this tutorial, we have one regional Virtual Cloud Network setup with two subnets: public and private with the CIDR of 192.0.2.0/29 and 192.0.2.8/29 respectively
- プライマリ・インスタンス- Node1、セカンダリ・インスタンス- Node2
- Node1ホスト名- "pfSense- primary"およびIP: 192.0.2.2/29
- Node2ホスト名- "pfSense- secondary"およびIP: 192.0.2.5/29
- pfSenseコンソール、Diagnostics、Edit fileにある pfSense Edit Fileツールを使用して、ファイルを変更できます。
- このチュートリアルではpfSenseシェルという用語を使用します。シェルにアクセスするには、インスタンスにsshを入れ、pfSenseメニューで8を選択します。
タスク1: Oracle Cloudへの2つのpfSense仮想アプライアンスのインストール
このチュートリアルでは、高可用性に2つのpfSense仮想アプライアンスを使用します。要件に基づいて複数のノードを設定できます。このチュートリアルのOracle Cloud InfrastructureでのpfSenseのインストールおよび構成のステップに従います。
ノート:
- 2つのノードは異なるアベイラビリティ・ドメインに設定する必要があり、相互にpingできる必要があります。
- これらのノードを異なるVirtual Cloud Networksまたはリージョンで設定できますが、ノードが相互にアクセスできるように適切なピアリング・ゲートウェイおよびルート表が定義されていることを確認してください。
- ノードを相互にpingできない場合は、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
ノート: これにより、パッケージ・マネージャおよびリポジトリ・メタデータが更新されます。
-
高可用性クラスタの設定に必要な次の4つのパッケージをインストールします。
- Pacemaker
- コロ同期
- 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を起動しようとすると、エラーメッセージ「No space left on device」で失敗します。
両方のノードでRAMディスクを有効化
CorosyncおよびPacemakerは、実行時に/var
ディレクトリに依存し、デフォルトのインストールを実行した場合、/var
で使用可能な領域は非常に制限されます。/var
および/tmp
ディレクトリにメモリー(RAM)を設定して使用する必要があり、パフォーマンス向上にも役立ちます。
-
pfSenseコンソールで、「システム」に移動し、「拡張」、「その他」の順にクリックします。
-
「Ram Disk Settings」までスクロールし、「Use Ram Disks」チェックボックスを選択します。
-
/tmp
および/var
ディレクトリに割り当てるRAMディスク・サイズを入力します。 -
構成を保存します。RAMディスクを初めて有効にするときに再起動するように求められます。後で、移動時にRAMディスク・サイズを増減できます。
ノート: Ramディスクを使用しているため、システム停止の場合、
/tmp
および/var
内のすべてのファイルが失われます。CorosyncおよびPacemakerが適切に機能するために必要なディレクトリを作成する起動スクリプト(rc.dファイル)を設定する必要があります。 -
ファイル
/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
画像に示されているように、ステータスは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ヒートビートを設定します。
-
ファイル・エディタで
/usr/local/lib/ocf/resource.d/heartbeat/IPaddr
を開きます。 -
OCI CLIを開始してIPをvNIC間で移動するコード行をいくつか追加します。スクリプトのadd_interface()メソッドで、行584の後に次のコード行を追加します。
-
スクリプトで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
-
ノード1の場合: Oracle Cloudコンソールで「コンピュート」に移動し、pfSense- primaryをクリックして、「アタッチされたvNIC」をクリックします。プライマリvNICを選択し、セカンダリ・プライベートIPを追加します(前述のスクリプトのfloating_IPと同じ)。
-
両方のノードの場合: pfSenseコンソールでファイアウォールに移動し、「仮想IP」をクリックしてIP別名(前述のスクリプトではfloating_IPと同じ)を追加します。
ハートビートの設定
-
pfSenseシェルで、ノード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、netmaskおよびnicの値を必ず値に置き換えてください。これにより、PacemakerにIPリソースが作成されます。
crm status
を今すぐ実行すると、オンラインの2つのノードと、pfSense-primary
を指している1つのリソースが表示されます。ipconfig vtnet0
を実行して、仮想IPがプライマリ・ノードのインタフェースに関連付けられているかどうかを確認することもできます。
テスト・フェイルオーバー
現行の状態
-
強制的にスイッチオーバーするには、次のコマンドを実行します。
crm resource move IP pfSense-secondary.example.com
-
crm status
コマンドを実行すると、浮動IPリソースがpfSenseセカンダリに移動されたことがわかります。 -
ノードのOracle CloudコンソールのvNICデバイスを確認します。浮動IPが2番目のノードに移動したことがわかります。
ノート: ここで停止しようとすると、マスターとみなすノードを特定できないため、リソースは停止状態に移行します。これは、pfSenseがマスターを割り当てるには50%以上の投票が必要であるためです。2つのノードのみがあり、そのうち1つが停止しているため、Pacemakerは1つをマスターとして設定できません。
-
50%投票ポリシーを無視するには、次のコマンドを実行します。
crm configure property no-quorum-policy=ignore
-
シャットダウンをテストすると、浮動IPの移動を確認できます。
タスク5: XLMRPCおよびpfsyncの設定
本当に可用性の高いクラスタが必要な場合は、ノードが同期状態になり、IPを移動するだけでは同期しません。同期のために、各インスタンスに別のvNICのセットを設定する必要があります。
同期インタフェースの設定
-
「両方のノード: コンピュートに移動」でインスタンスを選択し、「アタッチされたvnics」を開いて「vnicの作成」をクリックします。
-
vNICを作成して接続したら、pfSenseコンソールに移動し、「インタフェース」をクリックしてから、「割り当て」をクリックし、新しく検出されたインタフェースを追加します。
-
新しく割り当てられたインタフェースをクリックし、その構成を設定します。
-
OCIコンソールの前のステップで作成した静的IPv4アドレスおよびサブネット・マスクを割り当てます。
-
「保存」をクリックし、変更を適用します。
プライマリ・ノードでの高可用性の設定
- pfSenseコンソールに移動し、「システム」、「高可用性同期」の順にクリックします。
- pfsync状態同期を有効にします。
- 同期インタフェースを選択します。
- セカンダリ・ノードIPを追加します。
- XMLRPC sync config : セカンダリ・ノードIPを追加します。
- ユーザー名とパスワードを設定し、同期するすべてを確認します。
- 「Save and Apply」をクリックします。
セカンダリ・ノードでの高可用性の設定
- pfSenseコンソールに移動し、「システム」、「高可用性同期」の順にクリックします。
- pfsync状態同期を有効にします。
- 同期インタフェースを選択します。
- プライマリ・ノードIPを追加します。
- 「Save and Apply」をクリックします。
ファイアウォール状態は両方のノード間で同期され、プライマリ・インスタンスでファイアウォール・ルールを追加しようとすると、セカンダリ・ノードにも同じことが表示されます。システムのシャットダウンでフェイルオーバーを再試行およびテストできるようになりました。
関連リンク
- pfSenseウェブサイト
- 可用性ドメイン
- ピアリング・ゲートウェイ
- セキュリティ・リスト
- ファイルシステム全体またはiノードエラーのトラブルシューティング
- インスタンスからのサービスのコール
- Instance Principalを使用したOCI CLIのコール
謝辞
著者 - Mayank Kakani(OCI Cloud Architect)
その他の学習リソース
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.