Linux上でフェイルオーバークラスタインスタンスを操作します

適用対象:Linux 上の SQL Server

この記事では、Linux で SQL Server フェールオーバー クラスター インスタンス (FCI) を操作する方法について説明します。 Linux上でSQL Server FCIを作成するには、「Linuxでフェイルオーバークラスタインスタンスを構成(RHEL)」をご覧ください。

アーキテクチャの説明

クラスタリング層は、Pacemakerの上に構築されたRed Hat Enterprise Linux(RHEL)HAアドオンに基づいています。 Corosync と Pacemaker によって、クラスターの通信とリソース管理が調整されます。 SQL Serverインスタンスは一度に1つのノードでアクティブです。

次の図では、SQL Server が含まれる Linux クラスターのコンポーネントが示されています。

Linux上の共有ディスクSQL Serverフェイルオーバークラスタの図。

クラスタ構成、リソースエージェントのオプション、管理に関する詳細は 、RHELの参考文献をご覧ください。

Failover

FCI のフェールオーバーは、Windows Server フェールオーバー クラスター (WSFC) に似ています。 FCI がホストされているクラスター ノードで何らかの障害が発生した場合、FCI を自動的に別のノードにフェールオーバーする必要があります。 WSFC とは異なり、優先所有者を設定する方法がないため、Pacemaker によって FCI の新しいホストとなるノードが選択されます。

時にはFCIを別のノードに手動でフェイルオーバーしたい場合もあります。 そのプロセスは、WSFC 上の FCI と同じではありません。 WSFC では、ロール レベルでリソースをフェールオーバーします。 Pacemakerでは、移動するリソースを選び、すべての制約が揃えば他のものも動きます。

フェイルオーバーの方法はLinuxディストリビューションによって異なります。 Linuxディストリビューションの指示に従ってください。

手動フェイルオーバー(RHELまたはUbuntu)

Red Hat Enterprise Linux (RHEL) サーバーまたは Ubuntu サーバーで手動フェールオーバーを実行するには、次の手順を実行します。

  1. 次のコマンドを実行します。

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName>はSQL Server FCIのPacemakerリソース名であり、<NewHostNode>はFCIをホストしたいクラスタノードの名前です。

  2. 手動フェールオーバーの間に、Pacemaker によって、手動で移動するように選択したリソースに対して場所の制約が作成されます。 この制約を見るには、sudo pcs constraint を実行します。

  3. フェイルオーバー完了後、次の制約を解除します:

    sudo pcs resource clear <FCIResourceName>
    

手動フェールオーバー (SLES)

Note

SQL Server 2025 (17.x) 以降、SUSE Linux Enterprise Server (SLES) はサポートされていません。 SQL Server 2022(16.x)以前のバージョンでは、SLES 15のみがサポートされています。

SUSE Linux Enterprise Server (SLES) では、SQL Server FCI を手動でフェールオーバーするには、migrate コマンドを使います。 例えば次が挙げられます。

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> はフェイルオーバークラスターインスタンスのリソース名であり、 <NewHostNode> は新しい宛先ホストの名前です。

フェイルオーバークラスターを監視する

クラスターの現在の状態を表示します。

sudo pcs status

クラスターとリソースのライブ状況をご覧いただけます:

sudo crm_mon

リソースエージェントのログは /var/log/cluster/corosync.logでご覧いただけます。

クラスターにノードを追加する

  1. 各ノードの IP アドレスを確認します。 次のスクリプトを実行すると、現在のノードの IP アドレスが表示されます。

    ip addr show
    
  2. 新しいノードは15文字以内のユニークな名前が必要です。 コンピューター名は /etc/hosts に追加することで設定します。 次のスクリプトを使うと、/etc/hostsvi を編集できます。

    sudo vi /etc/hosts
    

    次の例は、/etc/hostssqlfcivm1、および sqlfcivm2 という名前の 3 つのノードに対して追加されたsqlfcivm3を示しています。

    127.0.0.1      localhost localhost4 localhost4.localdomain4
    ::1            localhost localhost6 localhost6.localdomain6
    10.128.18.128  sqlfcivm1
    10.128.16.77   sqlfcivm2
    10.128.14.26   sqlfcivm3
    

    ファイルは、すべてのノードで同じである必要があります。

  3. 新しいノードで SQL Server サービスを停止します。

  4. データベースファイルディレクトリを共有場所にマウントする手順に従ってください。

    NFS サーバーから、次の nfs-utilsをインストールします。

    sudo yum -y install nfs-utils
    

    クライアントと NFS サーバーでファイアウォールを開きます。

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

    /etc/fstab ファイルを編集して、mount コマンドを入れます。

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    mount -a を実行して、変更を有効にします。

  5. 新しいノードで、Pacemaker のログインのために SQL Server のユーザー名とパスワードを格納するファイルを作成します。 次のコマンドは、このファイルを作成および設定します。

    sudo touch /var/opt/mssql/secrets/passwd
    echo "<loginName>" | sudo tee -a /var/opt/mssql/secrets/passwd
    echo "<password>" | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Caution

    パスワードは SQL Server の既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 可能な限り長く複雑なパスワードを使用してください。

  6. 新しいノードで、Pacemaker のファイアウォール ポートを開きます。 firewalld を使用してこれらのポートを開くには、次のコマンドを実行します。

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    もし他のファイアウォールを使っていて、そのファイアウォールに組み込みの高可用性設定がない場合は、Pacemakerがクラスタ内の他のノードと通信できるように以下のポートを開いてください。

    • TCP: ポート 2224、3121、21064
    • UDP: ポート 5405
  7. 新しいノードに Pacemaker パッケージをインストールします。

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  8. Pacemaker と Corosync のパッケージをインストールしたときに作成された既定のユーザー用のパスワードを設定します。 既存のノードと同じパスワードを使います。

    sudo passwd hacluster
    
  9. pcsd サービスと Pacemaker を有効にし、起動します。 新しいノードは再起動後にクラスターに再加入できます。 新しいノードで次のコマンドを実行します。

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  10. SQL Server の FCI リソース エージェントをインストールします。 新しいノードで次のコマンドを実行します。

    sudo yum install mssql-server-ha
    
  11. クラスタ内の既存のノードで、新しいノードを認証してクラスタに追加します:

    sudo pcs cluster auth <nodeName3> -u hacluster
    sudo pcs cluster node add <nodeName3>
    

クラスターからノードを削除する

クラスターからノードを削除するには、次のコマンドを実行します。

sudo pcs cluster node remove <nodeName>

リソースの監視頻度を変更

sudo pcs resource op monitor interval=<interval>s <sqlResourceName>

以下の例では、 mssqlha リソースのモニタリング間隔を2秒に設定しています:

sudo pcs resource op monitor interval=2s mssqlha

Troubleshoot

クラスターのトラブルシューティングでは、3 つのデーモンの連携によってクラスター リソースが管理される方法を理解すると役に立ちます。

Daemon Description
Corosync クラスター ノード間のクォーラム メンバーシップとメッセージングを提供します。
ペースメーカー Corosync の上に存在し、リソースのステート マシンを提供します。
PCSD pcs ツールで Pacemaker と Corosync の両方を管理します。

pcs ツールを使うには、PCSD が実行されている必要があります。

クラスターの現在の状態

sudo pcs status では、各ノードのクラスター、クォーラム、ノード、リソース、デーモンの状態に関する基本情報が返されます。

以下の例は、健全な Pacemaker クォーラムの出力を示しています。

Cluster name: MyAppSQL
Last updated: Wed Oct 31 12:00:00 2024  Last change: Wed Oct 31 11:00:00 2024 by root via crm_resource on sqlvmnode1
Stack: corosync
Current DC: sqlvmnode1  (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
3 nodes and 1 resource configured

Online: [ sqlvmnode1 sqlvmnode2 sqlvmnode3 ]

Full list of resources:

mssqlha (ocf::sql:fci): Started sqlvmnode1

PCSD Status:
sqlvmnode1: Online
sqlvmnode2: Online
sqlvmnode3: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/enabled

この例では、 partition with quorum はノードの過半数がオンラインであることを意味します。 クラスターでノードの過半数のクォーラムが失われると、pcs statuspartition WITHOUT quorum を返し、すべてのリソースが停止します。

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] では、クラスターに現在参加しているすべてのノードの名前が返されます。 参加していないノードがある場合は、pcs statusOFFLINE: [<nodename>] を返します。

PCSD Status では、各ノードのクラスターの状態が示されます。

ノードがオフラインになる理由

ノードがオフラインのときは、次の項目を確認してください。

  • ファイアウォール

    Pacemakerが通信できるように、すべてのノードで以下のポートを開いてください:

    • TCP: ポート 2224、3121、21064
    • UDP: ポート 5405
  • Pacemaker または Corosync サービスが実行されていること

  • ノードの通信

  • ノード名のマッピング