適用対象:Linux 上の SQL Server
SQL Serverの2ノード共有ディスクフェイルオーバークラスターインスタンスは、高可用性のためのサーバーレベルの冗長性を提供します。 このチュートリアルでは、SQL Server on Linux の 2 ノード フェールオーバー クラスター インスタンスを作成する方法について説明します。 実行する具体的な手順は次のとおりです。
- Linux を設定および構成する
- SQL Server をインストールして構成する
- hosts ファイルを構成する
- 共有ストレージを構成してデータベース ファイルを移動する
- 各クラスター ノードに Pacemaker をインストールして構成する
- フェールオーバー クラスター インスタンスを構成する
この記事では、SQL Server の 2 ノード共有ディスクによるフェールオーバー クラスター インスタンス (FCI) を作成する方法について説明します。 この記事には、Red Hat Enterprise Linux (RHEL) 用の手順とスクリプト例が記載されています。
概念的な情報については、 Linuxのフェイルオーバークラスタインスタンスを参照してください。
前提条件
以下のエンドツーエンドシナリオを完了するには、2ノードクラスターを展開するために2台のマシンとストレージ用のもう1台のサーバーが必要です。 次の手順では、これらのサーバーを構成する方法を示します。
Linux を設定および構成する
最初の手順は、クラスター ノード上のオペレーティング システムを構成することです。 クラスタ内の各ノードでLinuxディストリビューションを設定しましょう。 両方のノードで同じディストリビューションとバージョンを使用します。 次のディストリビューションのどちらか一方だけを使用します。
- HA アドオン用の有効なサブスクリプションを備えた RHEL
SQL Server をインストールして構成する
両方のノードに SQL Server をインストールして設定します。 詳細については、「SQL Server on Linux のインストール」に関するページを参照してください。
構成のために、1つのノードをプライマリ、もう1つをセカンダリに指定します。 このガイド全体でこれらの用語を使用します。
セカンダリ ノードで SQL Server を停止して無効にします。 次の例では、SQL Server を停止して無効にしています。
sudo systemctl stop mssql-server sudo systemctl disable mssql-serverNote
設定時に、SQL Server インスタンスのサーバー マスター キーが生成され、
/var/opt/mssql/secrets/machine-keyに配置されます。 Linux では、SQL Server は常にmssqlというローカル アカウントとして実行されます。 ローカル アカウントであるため、その ID はノード間で共有されません。 したがって、各ローカルmssqlアカウントがそれにアクセスして Server Master Key を復号できるように、暗号化キーをプライマリ ノードからセカンダリ ノードにコピーする必要があります。プライマリ ノードで、Pacemaker の SQL Server ログインを作成し、
sp_server_diagnosticsを実行するログイン権限を付与します。 Pacemaker は、このアカウントを使用して、SQL Server が実行されているノードを確認します。sudo systemctl start mssql-servermasterアカウントを使用して SQL Serversaデータベースに接続し、次のように実行します。USE master; GO CREATE LOGIN [<loginName>] WITH PASSWORD = N'<password>'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];Caution
パスワードは SQL Server の既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 可能な限り長く複雑なパスワードを使用してください。
または、より細かなレベルでアクセス許可を設定することもできます。 Pacemakerのログインには、
VIEW SERVER STATEがsp_server_diagnostics、 setupadmin、ALTER ANY LINKED SERVERで健康状態を照会し、sp_dropserverとsp_addserverを実行することでFCIインスタンス名をリソース名で更新する必要があります。プライマリ ノードで SQL Server を停止して無効にします。
hosts ファイルを構成する
各クラスター ノード上で hosts ファイルを構成します。 hosts ファイルには、すべてのクラスター ノードの IP アドレスと名前が含まれている必要があります。
各ノードの IP アドレスを確認します。 次のスクリプトを実行すると、現在のノードの IP アドレスが表示されます。
sudo ip addr show各ノードのコンピューター名を設定します。 各ノードに 15 文字以下の一意の名前を指定します。 コンピューター名は
/etc/hostsに追加することで設定します。 次のスクリプトを使うと、/etc/hostsでviを編集できます。sudo vi /etc/hosts次の例では、
/etc/hostsおよびsqlfcivm1という名前の 2 つのノードが追加されたsqlfcivm2を示します。127.0.0.1 localhost localhost4 localhost4.localdomain4 ::1 localhost localhost6 localhost6.localdomain6 10.128.18.128 sqlfcivm1 10.128.16.77 sqlfcivm2
共有ストレージの構成とデータベース ファイルの移動
両方のノードがアクセスできるストレージを用意する必要があります。 iSCSI、NFS、または SMB を使用できます。 ストレージを構成し、そのストレージをクラスター ノード用に指定した後、データベース ファイルをその新しいストレージに移動します。 次の記事では、ストレージの種類ごとの手順について説明します。
- Linuxでフェイルオーバークラスタインスタンスを設定する(iSCSI)
- Linux(NFS)でフェイルオーバークラスタインスタンスを設定する
- Linux(SMB)でフェイルオーバークラスタインスタンスを設定する
各クラスター ノードに Pacemaker をインストールして構成する
両方のクラスター ノードで、Pacemaker にログインするための SQL Server のユーザー名とパスワードを格納するファイルを作成します。
次のコマンドは、このファイルを作成および設定します。
sudo touch /var/opt/mssql/secrets/passwd echo '<loginName>' | sudo tee -a /var/opt/mssql/secrets/passwd echo '<loginPassword>' | 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両方のクラスター ノードで、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
フェンス エージェントを構成する
STONITHデバイスはフェンシングエージェントを提供します。 本番クラスタの場合は、フェンシングエージェントを設定する必要があります。 AzureでSTONITHデバイスを作成する例については、「Red Hat Enterprise Linux in AzureでPacemakerの設定」をご覧ください。 あなたの環境に合わせて指示を変更します。
フェールオーバー クラスター インスタンスを構成する
FCI はリソース グループ内に作成されます。 リソース グループによって制約の必要性が軽減されるため、こちらの方が少し簡単になります。 ただし、リソースは、起動させる順番でリソース グループに追加する必要があります。 起動させる順番は次のとおりです。
- ストレージ リソース
- ネットワーク リソース
- アプリケーション リソース
この例では、グループ NewLinFCIGrp 内に FCI を作成します。 リソース グループの名前は、Pacemaker で作成されるすべてのリソースに対して一意である必要があります。
ディスク リソースを作成します。 問題がなければ、応答は返されません。 ディスク リソースを作成する方法は、ストレージの種類によって異なります。 次のセクションでは、各ストレージのタイプ (iSCSI、NFS、S MB) の例を示します。 ご自分のクラスター記憶域のストレージの種類に適用される例をお使いください。
sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group <RGName>-
<iSCSIDiskResourceName>は、iSCSI ディスクに関連付けられるリソースの名前です -
<VolumeGroupName>はボリューム グループの名前です -
<LogicalVolumeName>は、作成された論理ボリュームの名前です -
<FolderToMountiSCSIDisk>はディスクをマウントするフォルダーです (システム データベースや既定の場所の場合は、/var/opt/mssql/dataになります) -
<FileSystemType>は ext4 または XFS になります。これは、書式設定方法とディストリビューションでサポートされている内容に応じて異なります。
-
FCI によって使用される IP アドレスを作成します。 問題がなければ、応答は返されません。
sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>-
<IPResourceName>は、IP アドレスに関連付けられるリソースの名前です -
<IPAddress>は FCI の IP アドレスです -
<NetworkCard>はサブネットに関連付けられているネットワーク カードです (つまり eth0) -
<NetMask>はサブネットのネットマスクです (つまり 24) -
<RGName>はリソース グループの名前です
-
FCI リソースを作成します。 問題がなければ、応答は返されません。
sudo pcs resource create <FCIResourceName> ocf:mssql:fci op defaults timeout=60s --group <RGName>-
<FCIResourceName>は、リソースの名前であるだけでなく、FCI に関連付けられるフレンドリ名でもあります。 これは、ユーザーとアプリケーションが接続に使用するものです。 -
<RGName>はリソース グループの名前です。
-
コマンド
sudo pcs resourceを実行します。 FCI はオンラインである必要があります。FCI の DNS/リソース名を使用して、SSMS または sqlcmd で FCI に接続します。
ステートメント
SELECT @@SERVERNAMEを発行します。 FCI の名前を返す必要があります。ステートメント
SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')を発行します。 FCI が実行されているノードの名前が返されます。FCIを手動で別のノードに失敗させます。 Linux でフェイルオーバークラスタインスタンスを操作する手順を参照してください。
最後に、FCI を元のノードにフェールオーバーします。
Summary
このチュートリアルでは、以下のタスクを完了しました。
- Linux を設定および構成する
- SQL Server をインストールして構成する
- hosts ファイルを構成する
- 共有ストレージを構成してデータベース ファイルを移動する
- 各クラスター ノードに Pacemaker をインストールして構成する
- フェールオーバー クラスター インスタンスを構成する