6.4.2. Samba への CTDB の設定

SMB を使用してレプリケーションを使用するボリュームを共有する場合は、高可用性とロック同期を提供するように CTDB (Cluster Trivial Database) を設定する必要があります。
CTDB は、仮想 IP アドレス (VIP) およびハートビートサービスを追加して高可用性を提供します。信頼されたストレージプールのノードに障害が発生した場合、CTDB により、障害が発生したノードがホストしていた仮想 IP アドレスを別のノードを引き継ぐことができます。これにより、提供されるサービスの IP アドレスが常に利用できるようになります。
重要
Amazon Elastic Compute Cloud (EC2) は仮想 IP をサポートしないため、このソリューションとの互換性はありません。

前提条件

  • 古いバージョンの CTDB (バージョン <= ctdb1.x) がすでにある場合は、以下のコマンドを実行して CTDB を削除します。
    # yum remove ctdb
    古いバージョンを削除したら、最新の CTDB のインストールに進みます。
    注記
    最新の CTDB パッケージを取得するには、システムが samba チャンネルにサブスクライブしていることを確認してください。
  • 以下のコマンドを実行して、Samba サーバーとして使用されるすべてのノードに CTDB をインストールします。
    # yum install ctdb
  • Samba の CTDB ベースの高可用性環境では、ロックはフェイルオーバー時に移行されません。
  • ランタイムおよび永続モードのアクティブなゾーンで CTDB ファイアウォールサービスを有効にします。以下のコマンドは、Red Hat Enterprise Linux 7 をベースとするシステムを対象にしています。
    アクティブゾーンの一覧を取得するには、以下のコマンドを実行します。
    # firewall-cmd --get-active-zones
    アクティブゾーンにポートを追加するには、次のコマンドを実行します。
    # firewall-cmd --zone=zone_name --add-port=4379/tcp
    # firewall-cmd --zone=zone_name --add-port=4379/tcp  --permanent

ベストプラクティス

  • CTDB には、Gluster 内部ネットワークとは異なるブロードキャストドメインが必要です。Samba でエクスポートされた Gluster ボリュームにアクセスするために Windows クライアントが使用するネットワークは、内部の Gluster ネットワークとは異なります。これを実行できないと、ノード間に CTDB のフェイルオーバーがある場合や、Windows のファイル共有にアクセスするパフォーマンスが低下した場合に多すぎる可能性があります。
    たとえば、CTDB がネットワーク 192.168.10.X で実行されている誤った設定例を以下に示します。
    Status of volume: ctdb
    Gluster process                             TCP Port  RDMA Port  Online  Pid
    Brick node1:/rhgs/ctdb/b1                   49157     0          Y       30439
    Brick node2:/rhgs/ctdb/b1                   49157     0          Y       3827
    Brick node3:/rhgs/ctdb/b1                   49157     0          Y       89421
    Self-heal Daemon on localhost                N/A      N/A        Y       183026
    Self-heal Daemon on sesdel0207               N/A      N/A        Y       44245
    Self-heal Daemon on segotl4158               N/A      N/A        Y       110627
    
    cat ctdb_listnodes
    
    192.168.10.1
    192.168.10.2
    
    cat ctdb_ip
    Public IPs on node 0
    192.168.10.3 0
    
    注記
    ホスト名 node1、node2、および node3 は、ブリックを設定し、同じネットワーク 192.168.10.X の IP を解決するために使用されます。Windows クライアントは内部 Gluster ネットワークを使用してファイル共有にアクセスしているため、これは当てはまらないはずです。
  • また、CTDB ネットワークと Gluster 内部ネットワークは、別の物理インターフェースで実行する必要があります。Red Hat では、パフォーマンスを向上させるために 10GbE インターフェースを推奨します。
  • Gluster ネットワークおよび CTDB ネットワークに同じネットワーク帯域幅を使用することが推奨されます。異なるネットワーク速度を使用すると、パフォーマンスのボトルネックが生じる可能性があります。内部ネットワークと外部ネットワークの両方で同じネットワークトラフィックが予想されます。

Red Hat Gluster Storage サーバーでの CTDB の設定

  1. CTDB ロックファイルを格納するために、複製されたボリュームを新たに作成します。ロックファイルのサイズはゼロバイトであるため、小さいブリックを使用してください。
    複製されたボリュームを作成するには、以下のコマンドを実行します。N は、複製するノード数に置き換えます。
    # gluster volume create volname replica N ip_address_1:brick_path ... ip_address_N:brick_path
    以下に例を示します。
    # gluster volume create ctdb replica 3 10.16.157.75:/rhgs/brick1/ctdb/b1 10.16.157.78:/rhgs/brick1/ctdb/b2 10.16.157.81:/rhgs/brick1/ctdb/b3
  2. 以下のファイルで、META="all"" のステートメントの all を、すべて 新たに作成されたボリューム名に置き換えます (例: META="ctdb")。
    /var/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh
    /var/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh
  3. /etc/samba/smb.conf ファイルで、全ノードの global セクションに以下の行を追加します。
    clustering=yes
  4. ボリュームを起動します。
    # gluster volume start ctdb
    S29CTDBsetup.sh スクリプトはすべての Red Hat Gluster Storage サーバーで実行され、マウント用に /etc/fstab のエントリーを追加し、Samba サーバーがあるすべてのノードで /gluster/lock にボリュームをマウントします。また、起動時に CTDB サービスの自動起動も有効にします。
    注記
    特別な CTDB ボリュームを停止すると、S29CTDB-teardown.sh スクリプトはすべての Red Hat Gluster Storage サーバーで実行し、マウント用に /etc/fstab のエントリーを削除し、/gluster/lock でボリュームをアンマウントします。
  5. /etc/crdb ディレクトリーが Samba サーバーとして使用されるすべてのノードに存在することを確認します。このファイルには、Red Hat Gluster Storage に推奨される CTDB 設定情報が含まれます。
  6. Samba サーバーとして使用されるすべてのノードに /etc/ctdb/nodes ファイルを作成し、これらのノードの IP アドレスをファイルに追加します。
    10.16.157.0
    10.16.157.3
    10.16.157.6
    ここに一覧表示される IP アドレスは、Samba サーバーのプライベート IP アドレスです。
  7. Samba サーバーとして使用されるノードで、IP フェイルオーバーが必要なノードで /etc/ctdb/public_addresses ファイルを作成します。CTDB が作成する仮想 IP アドレスを以下の形式でファイルに追加します。
    VIP/routing_prefix network_interface
    以下に例を示します。
    192.168.1.20/24 eth0
    192.168.1.21/24 eth0
  8. すべてのノードで CTDB サービスを起動します。
    RHEL 7 および RHEL 8 で以下を実行します。
    # systemctl start ctdb
    RHEL 6 で以下を実行します。
    # service ctdb start