適用対象: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 クラスターのコンポーネントが示されています。
クラスタ構成、リソースエージェントのオプション、管理に関する詳細は 、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 サーバーで手動フェールオーバーを実行するには、次の手順を実行します。
次のコマンドを実行します。
sudo pcs resource move <FCIResourceName> <NewHostNode><FCIResourceName>はSQL Server FCIのPacemakerリソース名であり、<NewHostNode>はFCIをホストしたいクラスタノードの名前です。手動フェールオーバーの間に、Pacemaker によって、手動で移動するように選択したリソースに対して場所の制約が作成されます。 この制約を見るには、
sudo pcs constraintを実行します。フェイルオーバー完了後、次の制約を解除します:
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でご覧いただけます。
クラスターにノードを追加する
各ノードの IP アドレスを確認します。 次のスクリプトを実行すると、現在のノードの IP アドレスが表示されます。
ip addr show新しいノードは15文字以内のユニークな名前が必要です。 コンピューター名は
/etc/hostsに追加することで設定します。 次のスクリプトを使うと、/etc/hostsでviを編集できます。sudo vi /etc/hosts次の例は、
/etc/hosts、sqlfcivm1、および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ファイルは、すべてのノードで同じである必要があります。
新しいノードで SQL Server サービスを停止します。
データベースファイルディレクトリを共有場所にマウントする手順に従ってください。
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,intrmount -aを実行して、変更を有効にします。新しいノードで、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/passwdCaution
パスワードは SQL Server の既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 可能な限り長く複雑なパスワードを使用してください。
新しいノードで、Pacemaker のファイアウォール ポートを開きます。
firewalldを使用してこれらのポートを開くには、次のコマンドを実行します。sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reloadもし他のファイアウォールを使っていて、そのファイアウォールに組み込みの高可用性設定がない場合は、Pacemakerがクラスタ内の他のノードと通信できるように以下のポートを開いてください。
- TCP: ポート 2224、3121、21064
- UDP: ポート 5405
新しいノードに Pacemaker パッケージをインストールします。
sudo yum install pacemaker pcs fence-agents-all resource-agentsPacemaker と Corosync のパッケージをインストールしたときに作成された既定のユーザー用のパスワードを設定します。 既存のノードと同じパスワードを使います。
sudo passwd haclusterpcsdサービスと Pacemaker を有効にし、起動します。 新しいノードは再起動後にクラスターに再加入できます。 新しいノードで次のコマンドを実行します。sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemakerSQL Server の FCI リソース エージェントをインストールします。 新しいノードで次のコマンドを実行します。
sudo yum install mssql-server-haクラスタ内の既存のノードで、新しいノードを認証してクラスタに追加します:
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 status が partition WITHOUT quorum を返し、すべてのリソースが停止します。
Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] では、クラスターに現在参加しているすべてのノードの名前が返されます。 参加していないノードがある場合は、pcs status は OFFLINE: [<nodename>] を返します。
PCSD Status では、各ノードのクラスターの状態が示されます。
ノードがオフラインになる理由
ノードがオフラインのときは、次の項目を確認してください。
ファイアウォール
Pacemakerが通信できるように、すべてのノードで以下のポートを開いてください:
- TCP: ポート 2224、3121、21064
- UDP: ポート 5405
Pacemaker または Corosync サービスが実行されていること
ノードの通信
ノード名のマッピング