Skip to main content
NetApp virtualization solutions
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

Proxmox VEのビジネス継続性をNASストレージで構成する

共同作成者 sureshthoppay

ONTAP SnapMirror active sync for NASとProxmox VEストレッチクラスタを組み合わせることで、Proxmox仮想環境(VE)VMをサイト障害から保護します。NetApp Consoleでメディエーター(ONTAP MediatorまたはONTAP Cloud Mediator)を設定し、NFSストレージVM(SVM)を保護し、必要に応じて仮想IP(VIP)LIFとBorder Gateway Protocol(BGP)を使用してルーティングされたネットワーク全体でNFSアドレスをポータブルにし、QDeviceを使用してストレッチクラスタを構築してから、Storage Manager for Proxmoxを使用して共有ストレージをプロビジョニングし、高可用性(HA)とVMバックアップを構成します。その結果、データ損失はゼロとなり、生存サイトでのVMの自動復旧が実現します。

このワークフローについて

始める前に、"ソリューション アーキテクチャ、障害時の動作、およびcorosync設計上の考慮事項"を確認してください。 `<primary_svm>`などの山括弧内の値を、環境に合わせた値に置き換えてください。

開始する前に
  • サイトAに1つ、サイトBに1つの、計2つのAFF A-SeriesまたはC-Seriesの2ノードクラスタで、ONTAP 9.19.1以降を実行している必要があります。

  • ONTAP Oneに含まれるSnapMirrorおよびSnapMirror同期ライセンスを、両方のクラスタにインストールする必要があります。

  • クラスタはデフォルトのIPspaceでピアリングされている必要があり、クラスタ間の往復時間(RTT)は10 ms未満でなければなりません。

  • 調停者オプションを1つ選択する必要があります。比較については、"Mediatorオプション"を参照してください。

    • ONTAP Mediatorの場合、LinuxホストをサイトC、または別の第3の障害ドメインにインストールし、両方のクラスタのクラスタおよびノード管理LIFからアクセスできるようにする必要があります。

    • ONTAP Cloud Mediatorの場合、両方のクラスタからNetApp ConsoleへのアウトバウンドHTTPSアクセス(直接またはプロキシ経由)が必要であり、ping遅延は200ms未満である必要があります。また、NetApp Consoleの組織と、サービスアカウントを作成する権限も必要です。

  • サイトAのSVMは、Proxmox VEノードにNFSを提供する必要があります。SVMには、LUNを含まないNAS用のFlexVolボリュームのみを含める必要があり、そのエクスポートポリシーではすべてのProxmox VEノードを許可する必要があります。

  • Proxmox VE 9.0以降のノードを偶数個インストールし、サイトAとサイトBに均等に分散させ、すべてのノード間のcorosyncレイテンシを5ms未満にする必要があります。

  • サイトC、または別の第3の場所にあるLinuxホストは、corosync QDeviceデーモンに使用でき、すべてのProxmox VEノードからTCPポート5403でアクセス可能である必要があります。どちらのメディエーターオプションを使用する場合でも、このホストが必要です。

  • NFS VLANは、サイトAとサイトBの間でストレッチする必要があります。ルーテッドレイヤ3ネットワークの場合は、各サイトにBGP対応ルータが必要です。また、BGPを使用するVIP LIFがNAS向けSnapMirrorアクティブ同期でサポートされているかどうかをNetAppに確認する必要があります。

  • ONTAPおよびProxmox VEのバージョンが、"NetApp Interoperability Matrix Tool(IMT)"に一緒に記載されている必要があります。

  • 共有ストレージをプロビジョニングしてVMをバックアップするには、Proxmox VEノードと両方のONTAPクラスタへのネットワーク アクセスが可能な状態でStorage Manager for Proxmoxをインストールする必要があります。

ステップ1:メディエーターを設定する

SnapMirrorアクティブ同期関係を初期化する前に、クラスタ ピア関係にメディエーターを追加します。ONTAPが計画的および自動フェイルオーバーを実行するには、メディエーターが必要です。メディエーターはどちらのクラスタからでも追加でき、ONTAPがもう一方のクラスタに自動的に追加します。メディエーターのオプションは1つだけ使用し、両方は使用しないでください。

次のいずれかのオプションを選択します。

ONTAP Mediator

サイトCのLinuxホストにメディエーターをインストールする場合は、このオプションを使用してください。インストールについては、"ONTAPメディエーターをインストールまたはアップグレードする"を参照してください。

手順
  1. いずれかのクラスタで、メディエーターを追加します:

    snapmirror mediator add -peer-cluster <peer_cluster> -type on-prem -mediator-address <mediator_ip> -username <mediator_user>

    プロンプトが表示されたら、メディエーターのパスワードを入力してください。

  2. メディエーターが接続されており、クォーラムのステータスが `true`であることを確認します:

    snapmirror mediator show
ONTAP Cloud Mediator

このオプションを使用して、メディエーターをNetApp Consoleのサービスとしてホストすることで、第3のサイトにメディエーターホストを用意する必要がなくなります。

開始する前に
  • 両サイトのファイアウォールで、両方のクラスタからNetApp Console APIエンドポイントへのHTTPSトラフィックを許可する必要があります。現在のエンドポイントのホスト名については、"ONTAP Cloud Mediatorの設定準備"を参照してください。

  • クラスタがプロキシ サーバを使用している場合は、プロキシのIPアドレス、ポート、およびクレデンシャルを用意してください。各クラスタには異なるプロキシ サーバを使用してください。プロキシのルートCA証明書がONTAPにインストールされている必要があります。

  • ONTAPにはよく知られているルートCA証明書が含まれているため、通常はNetApp Console証明書をインストールする必要はありません。確認するには、次を実行します security certificate show -common-name Sectigo*|USERTrust*|AAA*。

手順
  1. NetApp Consoleで、組織IDをコピーします。

  2. NetApp Consoleで、メンバーサービスアカウントを作成します:

    1. 組織を、ONTAP Cloud Mediatorを使用する組織に設定します。

    2. カテゴリを*アプリケーション*に設定します。

    3. 役割を*ONTAP Mediator Setup Role*に設定します。

    4. アカウントを作成する際に、クライアントIDとクライアントシークレットを保存してください。

  3. いずれかのクラスタで、メディエーターを追加します:

    snapmirror mediator add -peer-cluster <peer_cluster> -type cloud -org-id <console_org_id> -service-account-client-id <client_id> -use-http-proxy-local <true|false> -use-http-proxy-remote <true|false>

    プロンプトが表示されたら、クライアントシークレットを入力してください。

    System Managerを使用することもできます。保護 > 概要 > メディエーター > *追加*を選択し、メディエーターの種類として*クラウド*を選択して、組織ID、クライアントID、およびクライアントシークレットを入力します。

  4. メディエーターのタイプが cloud、接続ステータスが connected、クォーラムのステータスが `true`であることを確認します:

    snapmirror mediator show

ステップ2:SnapMirrorアクティブ同期を使用してNFS SVMを保護する

サイトBクラスタ上に休止状態の宛先SVMを作成し、サイトAのSVMをそこに複製します。ONTAPはデータを同期的に複製し、NFS LIFアドレスやエクスポートポリシーを含むSVM構成も複製します。System Managerで、SVMに対して*保護*を選択し、 `AutomatedFailOver`ポリシーを選択することで、この手順を完了することもできます。

手順
  1. サイトBクラスタで、宛先SVMを作成します:

    vserver create -vserver <secondary_svm> -sub-type dp-destination
  2. サイトBクラスタで、プライマリSVMとのSVMピア関係を作成します:

    vserver peer create -vserver <secondary_svm> -peer-vserver <primary_svm> -peer-cluster <site_a_cluster> -applications snapmirror
  3. サイトAクラスタで、SVMピアリクエストを承認します:

    vserver peer accept -vserver <primary_svm> -peer-vserver <secondary_svm>
  4. サイトBクラスタで、SnapMirrorアクティブ同期関係を作成します:

    snapmirror create -source-path <primary_svm>: -destination-path <secondary_svm>: -policy AutomatedFailOver
  5. 関係を初期化します:

    snapmirror initialize -destination-path <secondary_svm>:
  6. 関係が同期していることを確認してください:

    snapmirror show -destination-path <secondary_svm>:
    `Mirror State`は `Snapmirrored`であり、 `Relationship Status`は `InSync`です。
  7. 必要に応じて、スクラッチボリュームやテストボリュームなど、保護を必要としないボリュームを除外します:

    volume modify -vserver <primary_svm> -volume <volume_name> -smas-protection unprotected

ステップ3:レイヤ3ネットワーク用にBGPを使用したVIP LIFを設定する

注意 出版時点では、NetAppはNAS向けSnapMirrorアクティブ同期の認定構成としてBGPを使用したVIP LIFを文書化していません。この手順を完了する前に、NetAppに現在のサポート状況を確認してください。そうでない場合は、NFS VLANをサイト間で拡張し、この手順をスキップしてください。

NFS VLANがサイトAとサイトBの間で拡張されている場合は、この手順をスキップしてください。サイトがルーティングされたネットワークで接続されている場合は、両方のクラスタのすべてのノードにBGP LIFを作成し、プライマリSVMのVIP LIFにNFSアドレスをホストします。VIPアドレスは、Proxmox VEノードのサブネットに属していてはいけません。

開始する前に
  • 各ルータは、そのサイトのBGP LIFからのBGPセッションを受け入れ、/32ホストルートを受け入れ、ONTAPにルートアップデートを送信しないように設定する必要があります。

  • 各ONTAPノードと各ルータは一意のプライベートASNを持つ必要があり、各BGP LIFとルータのペアは/31サブネットを持つ必要があります。

手順
  1. 各クラスタで、高度な権限レベルに変更します:

    set -privilege advanced
  2. 両方のクラスタの各ノードで、ノードに一意のONTAP ASN、3秒のホールドタイム、およびルータIDとしてのノード管理IPアドレスを指定して、BGP設定を作成します:

    network bgp config create -node <node_name> -asn <node_asn> -holdtime 3 -routerid <node_mgmt_ip>
  3. 必要に応じて、両クラスタの各ノードにおいて、ルータに接続する2つのポートそれぞれにVLANポートを作成します:

    network port vlan create -node <node_name> -vlan-name <port_name>-<vlan_id>

    物理ポート、インターフェースグループ、またはインターフェースグループ上のVLANをBGP LIFホームポートとして使用することもできます。ポートはIPspace内のブロードキャストドメインに属している必要があります。

  4. 両クラスタの各ノードにおいて、システムSVM内に2つのBGP LIFを作成します。各ポートに1つずつ作成し、そのポート上のルータへのサブネットを/31に設定します:

    network interface create -vserver <system_svm> -lif <bgp_lif_name> -service-policy default-route-announce -home-node <node_name> -home-port <vlan_or_port> -address <bgp_lif_ip> -netmask-length 31

    デフォルトのIPspaceの場合、 `<system_svm>`はクラスタ名です。カスタムIPspaceの場合は、IPspace名です。BGP LIFはノードごとに1回作成され、IPspace内のすべてのデータSVMのVIP LIFにサービスを提供します。

  5. 各BGP LIFについて、そのルータとのBGPピアグループを作成し、そのルータからデフォルトルートを学習します:

    network bgp peer-group create -peer-group <peer_group_name> -ipspace <ipspace> -bgp-lif <bgp_lif_name> -peer-address <router_ip> -peer-asn <router_asn> -use-peer-as-next-hop true
  6. 各ピアグループが稼働していることを確認してください:

    network bgp peer-group show -ipspace <ipspace>
  7. 各クラスタで、マルチパスルーティングを有効にします:

    network options multipath-routing modify -is-enabled true
  8. サイトAクラスタで、プライマリSVMにNFS VIP LIFを作成します:

    network interface create -vserver <primary_svm> -lif <vip_lif_name> -role data -data-protocol nfs -home-node <node_name> -address <vip_address> -is-vip true -failover-policy broadcast-domain-wide
  9. サイトAのクラスタで、すべてのノードのプライマリSVMのBGPステータスが `up`であることを確認します:

    network bgp vserver-status show
  10. 両方のルーターで、VIPアドレスの/32ルートがクラスタAから学習されていることを確認してください。

ステップ4:QDeviceを使用してProxmox VEストレッチクラスタを作成する

サイトAのノードからクラスタを作成して、サイトAのノードに最小のノードIDが割り当てられるようにし、サイトCにQDeviceを追加します。サイト間リンクに障害が発生した場合、QDeviceはサイトAに投票権を与えます。これは、ONTAPがアクティブに維持するSVMと一致します。

手順
  1. 最初のサイトAノードで、別々のネットワーク上に2つのcorosyncリンクを持つクラスタを作成します:

    pvecm create <cluster_name> --link0 <node_link0_ip> --link1 <node_link1_ip>
  2. 残りの各サイトAノード、そして各サイトBノードで、クラスタに参加します:

    pvecm add <first_node_ip> --link0 <node_link0_ip> --link1 <node_link1_ip>
  3. サイトAのノードのノードIDが最も小さいことを確認してください:

    pvecm nodes
  4. サイトCまたは別の第三の場所にあるQDeviceホストに、QDeviceデーモンをインストールします:

    apt install corosync-qnetd
  5. すべての Proxmox VE ノードに QDevice クライアントをインストールします:

    apt install corosync-qdevice
  6. 1つのProxmox VEノードで、QDeviceをクラスタに追加します:

    pvecm qdevice setup <qdevice_ip>
  7. QDeviceの投票によってクラスタがクォーラムを満たしていることを確認します:

    pvecm status

    4ノードのクラスタの場合、 Expected votes`は `5、 `Quorum`は `3`であり、 `Flags`には `Quorate Qdevice`が含まれます。

ステップ5:保護されたNFS共有ストレージをプロビジョニングする

プライマリSVMにNFSストレージをプロビジョニングし、両方のSVMが共有するNFS LIFまたはVIPアドレスを使用して、両サイトのすべてのProxmox VEノードにマウントします。Storage Manager for Proxmox(SMP)は、ONTAPボリューム、エクスポート ポリシー、およびProxmox VEストレージ定義を1つのワークフローで作成します。SMPを使用しない場合は、ONTAPでボリュームを作成し、Proxmox VE CLIを使用してNFSストレージとして追加します。

ストレージをプロビジョニングするには、以下のいずれかの方法を選択してください。

Proxmox用ストレージマネージャー

ストレージのプロビジョニングにはSMPを使用します。SMPがインストールされており、Proxmox VEクラスタと両方のONTAPクラスタがプランとして追加されている必要があります。詳細については、"Proxmox用Storage Managerの設定と使用"を参照してください。

  1. SMPで、プロビジョニング > *ボリュームの追加*を選択し、次に*NFS*を選択します。

  2. ONTAP詳細 で、プライマリSVMを選択し、ボリューム名とサイズを入力して、優先LIFとしてNFS LIFまたはVIP LIFを選択します。

  3. 両方のサイトの Proxmox VE ノードを許可するエクスポート ポリシーを選択するか、新しいポリシーを作成してください。

  4. *Proxmoxの詳細*で、クラスタと両サイトのすべてのノードを選択し、NFS v3またはNFS v4.1を選択して、コンテンツタイプを選択します。

  5. 「データストアをマウントする」が選択されていることを確認し、「プロビジョニング」を選択します。

  6. サイトAのクラスタで、ボリュームがSnapMirrorアクティブ同期保護に含まれていることを確認します:

    volume show -vserver <primary_svm> -volume <volume_name> -fields smas-protection
CLI

Proxmox VE CLIを使用して、プライマリSVMに既に存在するボリュームをNFSストレージとして追加します。

  1. Proxmox VEノードの1つにNFSストレージを追加します:

    pvesm add nfs <storage_id> --server <nfs_lif_or_vip_address> --export <export_path> --content images,rootdir --options vers=<nfs_version>,nconnect=4
    `3`または `4.1`を `<nfs_version>`に使用してください。 `soft`マウント オプションを追加しないでください。
  2. すべてのノードでストレージがアクティブになっていることを確認してください:

    pvesm status --storage <storage_id>

NFSマウントオプションを設定します

パフォーマンスと耐障害性を向上させるために、nConnectを使用してNFS LIFまたはVIPアドレスへの複数のTCP接続を開きます。保護対象のSVMに、両方のサイトでクライアントがアクセスできる複数のデータLIFがある場合は、代わりにNFSv4.1セッション トランキングを使用できます。nConnectまたはセッション トランキングのいずれかを使用し、両方は使用しないでください。詳細については、"Proxmox VEのNFSストレージを構成する"を参照してください。

手順
  1. SMPを使用して、またはnConnectなしでストレージをプロビジョニングした場合は、1つのProxmox VEノードでマウントオプションを設定します:

    pvesm set <storage_id> --options vers=<nfs_version>,nconnect=4

    代わりにセッション トランキングを使用するには、次を設定します:

    pvesm set <storage_id> --options vers=4.1,trunkdiscovery,max_connect=16

    Proxmox VEは、ストレージが次回マウントされる際に、新しいマウントオプションを適用します。VMをそのノードから移行した後、メンテナンス時間中に各ノードでストレージを再マウントしてください。

  2. `/etc/pve/storage.cfg`のオプションを確認します。

  3. 各Proxmox VEノードで、NFSサーバ アドレスへの複数の接続があることを確認します:

    ss -an | grep :2049

ステップ6:HAとVMバックアップの設定

プライマリSVMがデータを提供するサイトAを優先するノードアフィニティルールを使用して、VMをHAに追加します。次に、SMPバックアップポリシーを使用して、誤削除やランサムウェアなどの論理的な障害からVMを保護します。SnapMirror active syncはこれらの障害を同期的にレプリケートするため、ポイントインタイム バックアップの代わりにはなりません。

手順
  1. 保護対象の各仮想マシンをHAに追加します:

    ha-manager add vm:<vm_id> --state started
  2. サイトAのノードを優先し、サイトBのノードへのフェイルオーバーを許可するノードアフィニティルールを作成します:

    ha-manager rules add node-affinity <rule_name> --resources vm:<vm_id>,vm:<vm_id> --nodes "<site_a_node1>:2,<site_a_node2>:2,<site_b_node1>:1,<site_b_node2>:1"
  3. 必要に応じて、各ゲストオペレーティングシステムのディスクタイムアウトを、想定されるストレージフェイルオーバー時間よりも長く設定してください。

  4. SMPでは、保護 > バックアップ > *リソースグループ*を選択し、各テナントまたはアプリケーションのVMまたはストレージ用のリソースグループを作成します。

  5. 保護 > バックアップ > ポリシー > *追加*を選択し、リソースグループのバックアップ頻度と保持期間を設定したポリシーを作成します。

    QEMUゲストエージェントを実行するVMの場合は、*詳細オプション*で*VMの一貫性*を選択してください。

  6. オンデマンドバックアップを実行し、そこからテストVMを復元してポリシーを検証します。

ステップ7:計画されたフェイルオーバーをテストする

本番環境のVMを共有ストレージに配置する前に、設計を検証してください。計画的なフェイルオーバーでは、データ損失なしでアクティブなSVMをサイトBに移動するため、メンテナンスウィンドウ中にテストして、その後フェイルバックすることができます。

手順
  1. テスト用仮想マシンをサイトBのノードにライブマイグレーションします。

  2. フェイルオーバーの前に、HAがVMをサイトAノードに戻さないようにします:

    ha-manager set vm:<vm_id> --failback 0
  3. サイトBのクラスタで、計画的なフェイルオーバーを開始します:

    snapmirror failover start -destination-path <secondary_svm>:
  4. フェイルオーバーが完了するまで監視してください:

    snapmirror failover show
  5. すべてのProxmox VEノードで、VMのI/Oが継続し、ストレージがアクティブな状態を維持していることを確認してください。

  6. VIP LIFを使用する場合は、両方のルーターがクラスタBから/32ルートを学習していることを確認してください。

  7. SMPで、ONTAPプランの検出を実行してから、オンデマンドバックアップを実行して、SMPがサイトBのSVMからVMを保護していることを確認します。

  8. テストが完了したらサイトAにフェイルバックし、テストVMの `failback`を `1`に戻します。

結果

Proxmox VE VMは、アクティブなSVMがサイト間を移動している間も同じNFS共有ストレージ上で実行され続け、クラスタは計画外のサイト障害から自動的に復旧します。