フェールオーバー クラスター インスタンスの構成 - iSCSI - SQL Server on Linux
適用対象: SQL Server - Linux
この記事では、Linux 上のフェールオーバー クラスター インスタンス (FCI) 用の iSCSI ストレージを構成する方法について説明します。
iSCSI の構成
iSCSI では、ネットワークを使用して、ターゲットと呼ばれるサーバーから、サーバーに対してディスクを提示します。 iSCSI ターゲットに接続しているサーバーでは、iSCSI イニシエーターが構成されている必要があります。 ターゲット上のディスクには、それらにアクセスすべきイニシエーターだけがアクセスできるように、明示的なアクセス許可が付与されています。 そのターゲット自体が、高可用性と信頼性を備えている必要があります。
iSCSI ターゲットに関する重要な情報
iSCSI ターゲットを構成する方法は、使用するソースの種類に固有のものであるため、このセクションでは説明しませんが、クラスター ノードで使用されるディスクのセキュリティは必ず構成するようにしてください。
Linux ベースの iSCSI ターゲットを使用する場合は、FCI ノード上でターゲットを構成しないでください。 パフォーマンスと可用性のために、iSCSI ネットワークは、ソース サーバー、クライアント サーバーの両方で通常のネットワーク トラフィックによって使用されるものとは別にする必要があります。 iSCSI 用に使用するネットワークは高速である必要があります。 ネットワークによってプロセッサの帯域幅の一部が消費されることに注意してください。そのため、通常のサーバーを使用する場合はそれに応じて計画を行います。
ターゲット上で完了していることを確認する必要がある、最も重要なことは、FCI に参加しているサーバーのみがアクセスできるよう、作成されるディスクに適切なアクセス許可が割り当てられていることです。 Microsoft iSCSI ターゲットの例を次に示します。ここで linuxnodes1
は作成される名前であり、この場合は、NewFCIDisk1.vhdx
にアクセスできるようにノードの IP アドレスが割り当てられています。
手順
このセクションでは、FCI のノードとして機能するサーバー上で iSCSI イニシエーターを構成する方法について説明します。 その手順は、Red Hat Enterprise Linux (RHEL) および Ubuntu 上でそのまま使用できるはずです。
サポートされているディストリビューションに向けた iSCSI イニシエーターの詳細については、次のリンクを参照してください。
FCI の構成に参加するいずれかのサーバーを選択します。 どれを選んでも問題ありません。 iSCSI は専用ネットワーク上に配置する必要があるため、そのネットワークを認識および使用するように iSCSI を構成します。
sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new
を実行します。ここで、<iSCSIIfaceName>
はネットワークの一意またはフレンドリ名です。iSCSINIC
の使用例を次に示します。sudo iscsiadm -m iface -I iSCSINIC -o new
予想される出力を次に示します。
New interface iSCSINIC added
/var/lib/iscsi/ifaces/iSCSIIfaceName
を編集します。 次の値が完全に入力されていることを確認します。iface.net_ifacename
は、OS に表示されるネットワーク カードの名前です。iface.hwaddress
は、次のインターフェイス用に作成される一意の名前の MAC アドレスです。iface.ipaddress
iface.subnet_Mask
次の例を参照してください。
iSCSI ターゲットを検索します。
sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
<iSCSINetName>
はネットワークの一意/フレンドリ名、<TargetIPAddress>
は iSCSI ターゲットの IP アドレス、<TargetPort>
はiSCSI ターゲットのポートです。予想される出力を次に示します。
10.181.182.1:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target 10.201.202.1:3260,1 iqn.1991-05.com.contoso:dc1-linuxnodes1-target [2002:b4b5:b601::b4b5:b601]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target [2002:8c9:ca01::c8c9:ca01]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
ターゲットにサインインします。
sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
<iSCSIIfaceName>
はネットワークの一意/フレンドリ名、<TargetIPAddress>
は iSCSI ターゲットの IP アドレスです。予想される出力を次に示します。
Logging in to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] (multiple) Login to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] successful.
iSCSI ターゲットに接続されていることを確認します。
sudo iscsiadm -m session
出力は次の例のようになります。
tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
iSCSI 接続されたディスクを確認します。
sudo grep "Attached SCSI" /var/log/messages
iSCSI ディスク上に物理ボリュームを作成します。
sudo pvcreate /dev/<devicename>
<devicename>
は、前の手順からのデバイスの名前です。iSCSI ディスク上にボリューム グループを作成します。 1 つのボリューム グループに割り当てられたディスクは、プールまたはコレクションと見なされます。
sudo vgcreate <VolumeGroupName> /dev/devicename
<VolumeGroupName>
はボリューム グループの名前、<devicename>
は手順 6 のデバイスの名前です。ディスクの論理ボリュームを作成して確認します。
sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
<size>
は作成するボリュームのサイズです。「G」(ギガバイト)、「T」(テラバイト) などを使って指定できます。<LogicalVolumeName>
は論理ボリュームの名前、<VolumeGroupName>
は前の手順のボリューム グループの名前です。予想される出力を次に示します。
Logical volume "FCIDataLV1" created.
次の例では、25 GB のボリュームを作成します。
sudo lvs
を実行して、作成された LVM を確認します。サポートされているファイル システムで論理ボリュームをフォーマットします。 EXT4 の場合は、次の例を使用します。
sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
<VolumeGroupName>
は、前の手順のボリューム グループの名前です。<LogicalVolumeName>
は、前の手順の論理ボリュームの名前です。システム データベース、またはデフォルトのデータの場所に格納されているものについては、以下の手順に従います。 それ以外の場合は、手順 13 に進みます。
作業中のサーバーで SQL Server が停止していることを確認します。
sudo systemctl stop mssql-server sudo systemctl status mssql-server
完全にスーパーユーザーに切り替えます。 成功した場合は、受信確認を何も受け取りません。
sudo -i
mssql
ユーザーに切り替えます。 成功した場合は、受信確認を何も受け取りません。su mssql
SQL Server のデータ ファイルとログ ファイルを格納するための一時ディレクトリを作成します。 成功した場合は、受信確認を何も受け取りません。
mkdir <TempDir>
<TempDir>
はフォルダーの名前です。 次の例では、/var/opt/mssql/TempDir という名前のフォルダーを作成します。mkdir /var/opt/mssql/TempDir
SQL Server のデータ ファイルとログ ファイルを一時ディレクトリにコピーします。 成功した場合は、受信確認を何も受け取りません。
cp /var/opt/mssql/data/* <TempDir>
<TempDir>
は、前の手順で指定したフォルダーの名前です。ファイルがディレクトリ内にあることを確認します。
ls <TempDir>
<TempDir>
は、前の手順のフォルダーの名前です。既存の SQL Server データ ディレクトリからファイルを削除します。 成功した場合は、受信確認を何も受け取りません。
rm - f /var/opt/mssql/data/*
ファイルが削除されていることを確認します。 次の画像は、c から h までのシーケンス全体の例を示しています。
ls /var/opt/mssql/data
「
exit
」と入力して、root
ユーザーに切り替えます。iSCSI 論理ボリュームを SQL Server データ フォルダーにマウントします。 成功した場合は、受信確認を何も受け取りません。
mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
<VolumeGroupName>
はボリューム グループの名前、<LogicalVolumeName>
は作成された論理ボリュームの名前です。 次の構文の例は、前のコマンドのボリューム グループと論理ボリュームに一致しています。mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
マウントの所有者を
mssql
に変更します。 成功した場合は、受信確認を何も受け取りません。chown mssql /var/opt/mssql/data
マウントのグループの所有権を
mssql
に変更します。 成功した場合は、受信確認を何も受け取りません。chgrp mssql /var/opt/mssql/data
mssql
ユーザーに切り替えます。 成功した場合は、受信確認を何も受け取りません。su mssql
一時ディレクトリ
/var/opt/mssql/data
からファイルをコピーします。 成功した場合は、受信確認を何も受け取りません。cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
ファイルがあることを確認します。
ls /var/opt/mssql/data
exit
を入力してmssql
にならないようにします。exit
を入力してroot
にならないようにします。SQL Server を起動します。 すべてが正しくコピーされ、セキュリティが正しく適用されている場合、SQL Server は起動済みと表示されます。
sudo systemctl start mssql-server sudo systemctl status mssql-server
SQL Server を停止し、シャットダウンしていることを確認します。
sudo systemctl stop mssql-server sudo systemctl status mssql-server
ユーザー データベースやバックアップなどのシステム データベース以外のものについては、次の手順に従います。 デフォルトの場所のみを使用する場合は、手順 14 に進みます。
スーパーユーザーになるように切り替えます。 成功した場合は、受信確認を何も受け取りません。
sudo -i
SQL Server によって使用されるフォルダーを作成します。
mkdir <FolderName>
<FolderName>
はフォルダーの名前です。 正しい場所にない場合は、フォルダーの完全なパスを指定する必要があります。 次の例では、/var/opt/mssql/userdata という名前のフォルダーを作成します。mkdir /var/opt/mssql/userdata
前の手順で作成したフォルダーに iSCSI 論理ボリュームをマウントします。 成功した場合は、受信確認を何も受け取りません。
mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
<VolumeGroupName>
はボリューム グループの名前、<LogicalVolumeName>
は作成された論理ボリュームの名前、<FolderName>
はフォルダーの名前です。 構文の例を次に示します。mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
作成されたフォルダーの所有権を
mssql
に変更します。 成功した場合は、受信確認を何も受け取りません。chown mssql <FolderName>
<FolderName>
は、作成されたフォルダーの名前です。 例を次に示します。chown mssql /var/opt/mssql/userdata
作成されたフォルダーのグループを
mssql
に変更します。 成功した場合は、受信確認を何も受け取りません。chown mssql <FolderName>
<FolderName>
は、作成されたフォルダーの名前です。 例を次に示します。chown mssql /var/opt/mssql/userdata
スーパーユーザーではなくなるよう、「
exit
」と入力します。テストするには、そのフォルダーにデータベースを作成します。 次のスクリプトでデータベースを作成し、コンテキストをそれに切り替え、ファイルが OS レベルで存在することを確認した後、一時的な場所を削除します。 SSMS または sqlcmd を使用して、このスクリプトを実行できます。
DROP DATABASE TestDB; GO CREATE DATABASE TestDB ON (NAME = TestDB_Data, FILENAME = '/var/opt/mssql/userdata/TestDB_Data.mdf') LOG ON (NAME = TestDB_Log, FILENAME = '/var/opt/mssql/userdata/TestDB_Log.ldf'); GO USE TestDB; GO
シェルで次のコマンドを実行して、新しいデータベース ファイルを表示します。
sudo ls /var/opt/mssal/userdata
予想される出力を次に示します。
lost+found TestDB_Data.mdf TestDB_Log.ldf
データベースを削除してクリーンアップします。
DROP DATABASE TestDB; GO
sudo ls /var/opt/mssal/userdata
予想される出力を次に示します。
lost+found
共有のマウントを解除します
sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
<VolumeGroupName>
はボリューム グループの名前、<LogicalVolumeName>
は作成された論理ボリュームの名前、<FolderName>
はフォルダーの名前です。 構文の例を次に示します。sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
Pacemaker のみがボリューム グループをアクティブ化できるようにサーバーを構成します。
sudo lvmconf --enable-halvm --services -startstopservices
サーバー上のボリューム グループの一覧を生成します。 一覧表示されたもののうち iSCSI ディスクでないものは、システムによって使用されます (OS ディスク用など)。
sudo vgs
ファイル /etc/lvm/lvm.conf のアクティブ化の構成セクションを変更します。 次の行を構成します。
volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
<ListOfVGsNotUsedByPacemaker>
は、FCI によって使用されない、手順 20 の出力からのボリューム グループの一覧です。 それぞれを引用符で囲み、コンマで区切ります。 例を次に示します。Linux が起動すると、ファイル システムがマウントされます。 Pacemaker だけが iSCSI ディスクをマウントできるようにするために、ルート ファイルシステムのイメージをリビルドします。
次のコマンドを実行します。完了するまでにしばらく時間がかかる場合があります。 成功した場合、メッセージは返されません。
sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
サーバーを再起動します。
FCI に参加する別のサーバー上で、手順 1-6 を実行します。 これにより、SQL Server に対して iSCSI ターゲットが提示されます。
サーバー上のボリューム グループの一覧を生成します。 前に作成したボリューム グループが表示されます。
sudo vgs
SQL Server を起動し、それがこのサーバー上で起動できることを確認します。
sudo systemctl start mssql-server sudo systemctl status mssql-server
SQL Server を停止し、シャットダウンしていることを確認します。
sudo systemctl stop mssql-server sudo systemctl status mssql-server
FCI に参加するその他のすべてのサーバー上で、手順 1-6 を繰り返します。
これで、FCI を構成する準備が整いました。