次の方法で共有


フェールオーバー クラスター インスタンスの構成 - 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 イニシエーターの詳細については、次のリンクを参照してください。

  1. FCI の構成に参加するいずれかのサーバーを選択します。 どれを選んでも問題ありません。 iSCSI は専用ネットワーク上に配置する必要があるため、そのネットワークを認識および使用するように iSCSI を構成します。 sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new を実行します。ここで、<iSCSIIfaceName> はネットワークの一意またはフレンドリ名です。 iSCSINIC の使用例を次に示します。

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    iface コマンドとコマンドへの応答のスクリーンショット。

  2. /var/lib/iscsi/ifaces/iSCSIIfaceName を編集します。 次の値が完全に入力されていることを確認します。

    • iface.net_ifacename は、OS に表示されるネットワーク カードの名前です。
    • iface.hwaddress は、次のインターフェイス用に作成される一意の名前の MAC アドレスです。
    • iface.ipaddress
    • iface.subnet_Mask

    次の例を参照してください。

    値が完全に入力された状態のファイルのスクリーンショット。

  3. iSCSI ターゲットを検索します。

    sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
    

    <iSCSINetName> はネットワークの一意/フレンドリ名、<TargetIPAddress> は iSCSI ターゲットの IP アドレス、<TargetPort> はiSCSI ターゲットのポートです。

    discovery コマンドとコマンドへの応答のスクリーンショット。

  4. ターゲットにサインインします。

    sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
    

    <iSCSIIfaceName> はネットワークの一意/フレンドリ名、<TargetIPAddress> は iSCSI ターゲットの IP アドレスです。

    iSCSITargetLogin のスクリーンショット。

  5. iSCSI ターゲットに接続されていることを確認します。

    sudo iscsiadm -m session
    

    iSCSIVerify のスクリーンショット。

  6. iSCSI 接続されたディスクを確認します。

    sudo grep "Attached SCSI" /var/log/messages
    

    grep コマンドと接続された SCSI ディスクを示すコマンドへの応答のスクリーンショット。

  7. iSCSI ディスク上に物理ボリュームを作成します。

    sudo pvcreate /dev/<devicename>
    

    <devicename> は、前の手順からのデバイスの名前です。

  8. iSCSI ディスク上にボリューム グループを作成します。 1 つのボリューム グループに割り当てられたディスクは、プールまたはコレクションと見なされます。

    sudo vgcreate <VolumeGroupName> /dev/devicename
    

    <VolumeGroupName> はボリューム グループの名前、<devicename> は手順 6 のデバイスの名前です。

  9. ディスクの論理ボリュームを作成して確認します。

    sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
    

    <size> は作成するボリュームのサイズです。「G」(ギガバイト)、「T」(テラバイト) などを使って指定できます。<LogicalVolumeName> は論理ボリュームの名前、<VolumeGroupName> は前の手順のボリューム グループの名前です。

    次の例では、25 GB のボリュームを作成します。

    25 GB で作成されたボリュームのスクリーンショット。

  10. sudo lvs を実行して、作成された LVM を確認します。

  11. サポートされているファイル システムで論理ボリュームをフォーマットします。 EXT4 の場合は、次の例を使用します。

    sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
    

    <VolumeGroupName> は、前の手順のボリューム グループの名前です。 <LogicalVolumeName> は、前の手順の論理ボリュームの名前です。

  12. システム データベース、またはデフォルトのデータの場所に格納されているものについては、以下の手順に従います。 それ以外の場合は、手順 13 に進みます。

    1. 作業中のサーバーで SQL Server が停止していることを確認します。

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. 完全にスーパーユーザーに切り替えます。 成功した場合は、受信確認を何も受け取りません。

      sudo -i
      
    3. mssql ユーザーに切り替えます。 成功した場合は、受信確認を何も受け取りません。

      su mssql
      
    4. SQL Server のデータ ファイルとログ ファイルを格納するための一時ディレクトリを作成します。 成功した場合は、受信確認を何も受け取りません。

      mkdir <TempDir>
      

      <TempDir> はフォルダーの名前です。 次の例では、/var/opt/mssql/TempDir という名前のフォルダーを作成します。

      mkdir /var/opt/mssql/TempDir
      
    5. SQL Server のデータ ファイルとログ ファイルを一時ディレクトリにコピーします。 成功した場合は、受信確認を何も受け取りません。

      cp /var/opt/mssql/data/* <TempDir>
      

      <TempDir> は、前の手順で指定したフォルダーの名前です。

    6. ファイルがディレクトリ内にあることを確認します。

      ls <TempDir>
      

      <TempDir> は、前の手順のフォルダーの名前です。

    7. 既存の SQL Server データ ディレクトリからファイルを削除します。 成功した場合は、受信確認を何も受け取りません。

      rm - f /var/opt/mssql/data/*
      
    8. ファイルが削除されていることを確認します。 次の画像は、c から h までのシーケンス全体の例を示しています。

      ls /var/opt/mssql/data
      

      ls コマンドとコマンドへの応答のスクリーンショット。

    9. exit」と入力して、root ユーザーに切り替えます。

    10. iSCSI 論理ボリュームを SQL Server データ フォルダーにマウントします。 成功した場合は、受信確認を何も受け取りません。

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
      

      <VolumeGroupName> はボリューム グループの名前、<LogicalVolumeName> は作成された論理ボリュームの名前です。 次の構文の例は、前のコマンドのボリューム グループと論理ボリュームに一致しています。

      mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
      
    11. マウントの所有者を mssql に変更します。 成功した場合は、受信確認を何も受け取りません。

      chown mssql /var/opt/mssql/data
      
    12. マウントのグループの所有権を mssql に変更します。 成功した場合は、受信確認を何も受け取りません。

      chgrp mssql /var/opt/mssql/data
      
    13. mssql ユーザーに切り替えます。 成功した場合は、受信確認を何も受け取りません。

      su mssql
      
    14. 一時ディレクトリ /var/opt/mssql/data からファイルをコピーします。 成功した場合は、受信確認を何も受け取りません。

      cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
      
    15. ファイルがあることを確認します。

      ls /var/opt/mssql/data
      
    16. exit を入力して mssql にならないようにします。

    17. exit を入力して root にならないようにします。

    18. SQL Server を起動します。 すべてが正しくコピーされ、セキュリティが正しく適用されている場合、SQL Server は起動済みと表示されます。

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    19. SQL Server を停止し、シャットダウンしていることを確認します。

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
  13. ユーザー データベースやバックアップなどのシステム データベース以外のものについては、次の手順に従います。 デフォルトの場所のみを使用する場合は、手順 14 に進みます。

    1. スーパーユーザーになるように切り替えます。 成功した場合は、受信確認を何も受け取りません。

      sudo -i
      
    2. SQL Server によって使用されるフォルダーを作成します。

      mkdir <FolderName>
      

      <FolderName> はフォルダーの名前です。 正しい場所にない場合は、フォルダーの完全なパスを指定する必要があります。 次の例では、/var/opt/mssql/userdata という名前のフォルダーを作成します。

      mkdir /var/opt/mssql/userdata
      
    3. 前の手順で作成したフォルダーに iSCSI 論理ボリュームをマウントします。 成功した場合は、受信確認を何も受け取りません。

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> はボリューム グループの名前、<LogicalVolumeName> は作成された論理ボリュームの名前、<FolderName> はフォルダーの名前です。 構文の例を次に示します。

      mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
    4. 作成されたフォルダーの所有権を mssql に変更します。 成功した場合は、受信確認を何も受け取りません。

      chown mssql <FolderName>
      

      <FolderName> は、作成されたフォルダーの名前です。 例を次に示します。

      chown mssql /var/opt/mssql/userdata
      
    5. 作成されたフォルダーのグループを mssql に変更します。 成功した場合は、受信確認を何も受け取りません。

      chown mssql <FolderName>
      

      <FolderName> は、作成されたフォルダーの名前です。 例を次に示します。

      chown mssql /var/opt/mssql/userdata
      
    6. スーパーユーザーではなくなるよう、「exit」と入力します。

    7. テストするには、そのフォルダーにデータベースを作成します。 次の例では、sqlcmd を使用してデータベースを作成し、コンテキストをそれに切り替え、ファイルが OS レベルで存在することを確認した後、一時的な場所を削除します。 SSMS を使用できます。

      sqlcmd コマンドとコマンドへの応答のスクリーンショット。

    8. 共有のマウントを解除します

      sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> はボリューム グループの名前、<LogicalVolumeName> は作成された論理ボリュームの名前、<FolderName> はフォルダーの名前です。 構文の例を次に示します。

      sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
  14. Pacemaker のみがボリューム グループをアクティブ化できるようにサーバーを構成します。

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. サーバー上のボリューム グループの一覧を生成します。 一覧表示されたもののうち iSCSI ディスクでないものは、システムによって使用されます (OS ディスク用など)。

    sudo vgs
    
  16. ファイル /etc/lvm/lvm.conf のアクティブ化の構成セクションを変更します。 次の行を構成します。

    volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
    

    <ListOfVGsNotUsedByPacemaker> は、FCI によって使用されない、手順 20 の出力からのボリューム グループの一覧です。 それぞれを引用符で囲み、コンマで区切ります。 例を次に示します。

    volume_list 値の例を示すスクリーンショット。

  17. Linux が起動すると、ファイル システムがマウントされます。 Pacemaker だけが iSCSI ディスクをマウントできるようにするために、ルート ファイルシステムのイメージをリビルドします。

    次のコマンドを実行します。完了するまでにしばらく時間がかかる場合があります。 成功した場合、メッセージは返されません。

    sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  18. サーバーを再起動します。

  19. FCI に参加する別のサーバー上で、手順 1-6 を実行します。 これにより、SQL Server に対して iSCSI ターゲットが提示されます。

  20. サーバー上のボリューム グループの一覧を生成します。 前に作成したボリューム グループが表示されます。

    sudo vgs
    
  21. SQL Server を起動し、それがこのサーバー上で起動できることを確認します。

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. SQL Server を停止し、シャットダウンしていることを確認します。

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  23. FCI に参加するその他のすべてのサーバー上で、手順 1-6 を繰り返します。

これで、FCI を構成する準備が整いました。