第5章 ボリュームへのアクセス

この章では、Oracle LinuxまたはMicrosoft Windowsクライアント・システムからGlusterボリュームにアクセスするために使用できるオプションについて説明します。

ボリュームへのアクセスは、NFS、Samba、およびボリュームへのアクセスを提供するFile System in Userspace (FUSE)ソフトウェア・インタフェースを使用するGlusterネイティブ・クライアントなど、様々なネットワーク・ファイル・システム・テクノロジを介して提供されます。

ボリュームをいずれかのノードにローカルにマウントする必要がある場合は、リモート・ホストからマウントする場合とまったく同様に、追加マウントとして扱う必要があります。

警告

各ノードのファイル・システムでボリューム内のデータを直接編集すると、すぐにスプリット・ブレイン・シナリオと潜在的なファイル・システムの破損が発生する可能性があります。

5.1 iSCSIを使用したボリュームへのアクセス

この項では、ボリュームをiSCSIバックストアとして設定し、gluster-blockおよびtcmu-runnerパッケージを使用してブロック・ストレージを提供する方法について説明します。ボリュームのファイルは、ブロック・ストレージ(iSCSI LUN)としてエクスポートされます。ストレージ・イニシエータがLUNにログインし、ブロック・デバイスにアクセスします。

gluster-blockパッケージには、ボリュームへのiSCSIアクセスを作成および管理するためのCLIが含まれています。tcmu-runnerパッケージは、iSCSIプロトコルを使用してボリュームへのアクセスを処理します。

5.1.1 iSCSIサービスのインストール

この項では、iSCSIアクセスを有効にするための信頼できるストレージ・プールの設定について説明します。

iSCSIサービスをインストールするには:

信頼できるストレージ・プール内の各ノードで、次の手順を実行します。

  1. tcmu-runnerおよびgluster-blockパッケージをインストールします。

    sudo yum install tcmu-runner gluster-block
  2. tcmu-runnerおよびgluster-blockdサービスを起動して有効にします。

    sudo systemctl enable --now tcmu-runner gluster-blockd

5.1.2 ブロック・デバイスの作成

この項では、既存のボリュームでのブロック・デバイスの作成について説明します。ブロック・デバイスの作成および管理の詳細は、アップストリームのドキュメントを参照してください。gluster-blockコマンドの使用に関するヘルプを表示するには、gluster-block helpと入力します。

ブロック・デバイスを作成するには:

信頼できるストレージ・プール内の1つのノードで、次の手順を実行します。

  1. gluster-block createコマンドを使用してブロック・デバイスを作成します。この例では、myvolumeという名前のボリュームに対してmyvolume-blockという名前のブロック・デバイスを作成します。信頼できるストレージ・プールの3つのノードによって、ボリュームへの高可用性接続が確立されます。

    sudo gluster-block create myvolume/myvolume-block ha 3 prealloc no 192.168.1.51,192.168.1.52,192.168.1.53  20GiB
    IQN: iqn.2016-12.org.gluster-block:4a015741-f455-4568-a0ee-b333b595ba4f
    PORTAL(S):  10.147.25.88:3260 10.147.25.89:3260 10.147.25.90:3260
    RESULT: SUCCESS
  2. ボリュームのブロック・デバイスのリストを取得するには、gluster-block listコマンドを使用します。

    sudo gluster-block list myvolume
    myvolume-block
  3. ブロック・デバイスに関する情報は、gluster-block infoコマンドを使用して取得できます。

    sudo gluster-block info myvolume/myvolume-block
    NAME: myvolume-block
    VOLUME: myvolume
    GBID: 4a015741-f455-4568-a0ee-b333b595ba4f
    SIZE: 20.0 GiB
    HA: 3
    PASSWORD: 
    EXPORTED ON: 192.168.1.51 192.168.1.52 192.168.1.53
  4. iSCSIターゲットのリストを取得するには、targetcli lsコマンドを使用します。

    sudo targetcli  ls
    ...
      o- iscsi .................................................................... [Targets: 1]
      | o- iqn.2016-12.org.gluster-block:4a015741-f455-4568-a0ee-b333b595ba4f ........ [TPGs: 3]
      |   o- tpg1 .......................................................... [gen-acls, no-auth]
      |   | o- acls .................................................................. [ACLs: 0]
      |   | o- luns .................................................................. [LUNs: 1]
      |   | | o- lun0 ................................. [user/myvolume-block (glfs_tg_pt_gp_ao)]
      |   | o- portals ............................................................ [Portals: 1]
      |   |   o- 192.168.1.51:3260 ........................................................ [OK]
    ...

5.1.3 iSCSIブロック・デバイスへのアクセス

この項では、iSCSIブロック・デバイスへのアクセスについて説明します。

iSCSIブロック・デバイスにアクセスするには:

クライアント・ノードで、次の手順を実行します。

  1. ブロック・ストレージへのアクセスに必要なパッケージをインストールします。

    sudo yum install iscsi-initiator-utils device-mapper-multipath
  2. iscsidサービスを有効にします。

    sudo systemctl enable iscsid
  3. ブロック・デバイスをホストするように設定されている信頼できるストレージ・プールのいずれかのノードでiSCSIターゲットを検出してログインします。たとえば:

    sudo iscsiadm -m discovery -t st -p 192.168.1.51 -l
  4. iSCSIセッションのリストを表示するには、iscsiadm -m sessionコマンドを使用します。

    sudo iscsiadm -m session
    tcp: [1] 192.168.1.51:3260,1 iqn.2016-12.org.gluster-block:4a015741... (non-flash)
    tcp: [2] 192.168.1.52:3260,2 iqn.2016-12.org.gluster-block:4a015741... (non-flash)
    tcp: [3] 192.168.1.53:3260,3 iqn.2016-12.org.gluster-block:4a015741... (non-flash)
  5. (オプション)マルチパスを設定します。

    1. マルチパス・モジュールをロードして有効にします。

      sudo modprobe dm_multipath
      sudo mpathconf --enable
    2. multipathdサービスを再起動して有効にします。

      sudo systemctl restart multipathd
      sudo systemctl enable multipathd
  6. 追加された新しいiSCSIデバイスを表示するには、lsblkコマンドを使用します。

    sudo lsblk
    NAME                MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
    sdd                   8:48   0   20G  0 disk  
    └─mpatha            252:2    0   20G  0 mpath 
    sdb                   8:16   0   10G  0 disk  
    sde                   8:64   0   20G  0 disk  
    └─mpatha            252:2    0   20G  0 mpath 
    sdc                   8:32   0   20G  0 disk  
    └─mpatha            252:2    0   20G  0 mpath 
    sda                   8:0    0 36.5G  0 disk  
    ├─sda2                8:2    0   36G  0 part  
    │ ├─vg_main-lv_swap 252:1    0    4G  0 lvm   [SWAP]
    │ └─vg_main-lv_root 252:0    0   32G  0 lvm   /
    └─sda1                8:1    0  500M  0 part  /boot

    Glusterブロック・ストレージ用に新しいディスクが追加されます。この場合、ディスクはsddsdeおよびsdcです。

  7. デバイスにXFSファイル・システムを作成します。

    sudo mkfs.xfs /dev/mapper/mpatha
  8. ブロック・デバイスをマウントします。この例では、Glusterブロック・ストレージは/mntにマウントされています。

    sudo mount /dev/mapper/mpatha /mnt/

5.2 NFSを使用したボリュームへのアクセス

NFS-Ganeshaを使用してボリュームを公開できます。NFS-Ganeshaは、NFSプロトコルのユーザー空間ファイル・サーバーです。これにより、すべてのNFSクライアントからのアクセスを許可する、FUSE互換のFile System Abstraction Layer (FSAL)が提供されます。

NFSアクセスを有効にする信頼できるストレージ・プールの各ノードで、次のステップを実行します。

  1. Gluster NFS-Ganeshaクライアント・パッケージをインストールします。

    sudo yum install nfs-ganesha-gluster
  2. /etc/ganesha/exportsディレクトリにエクスポート構成ファイルを作成します。このファイルには、NFS GaneshaのNFSエクスポート情報が含まれています。この例では、ファイル名export.myvolume.confを使用して、myvolumeという名前のボリュームを、ノードの/myvolumeにあるNFS共有にエクスポートします。

    EXPORT{
        Export_Id = 1 ;   # Export ID unique to each export
        Path = "/myvolume";  # Path of the volume to be exported. Eg: "/test_volume"
    
        FSAL {
            name = GLUSTER;
            hostname = "localhost";  # IP of one of the nodes in the trusted pool
            volume = "myvolume";  # Volume name. Eg: "test_volume"
        }
    
        Access_type = RW;    # Access permissions
        Squash = No_root_squash; # To enable/disable root squashing
        Disable_ACL = TRUE;  # To enable/disable ACL
        Pseudo = "/myvolume";  # NFSv4 pseudo path for this export. Eg: "/test_volume_pseudo"
        Protocols = "3","4" ;    # NFS protocols supported
        Transports = "UDP","TCP" ; # Transport protocols supported
        SecType = "sys";     # Security flavors supported
    }

    次のように、/etc/ganesha/ganesha.confファイルを編集して、新しいエクスポート構成ファイルを含めます。

    ...
    %include "/etc/ganesha/exports/export.myvolume.conf"
  3. nfs-ganeshaサービスを有効にして起動します。

    sudo systemctl enable --now nfs-ganesha
    ノート

    NFSを使用してアクセスを設定したでボリュームが作成された場合、nfs-ganeshaサービスをリロードする必要があります。

    sudo systemctl reload-or-restart nfs-ganesha
  4. ボリュームがエクスポートされていることを確認します。

    sudo showmount -e localhost
    Export list for localhost:
    /myvolume (everyone)
  5. NFSクライアントからボリュームに接続するには、次のようにNFS共有をマウントします。

    sudo mkdir /gluster-storage
    sudo mount node1:/myvolume /gluster-storage

    NFSクライアントのこの/gluster-storageディレクトリに作成されたファイルはすべてボリュームに書き込まれます。

5.3 Glusterネイティブ・クライアント(FUSE)を使用したボリュームへのアクセス

Oracle LinuxホストのGlusterネイティブ・クライアントを使用して、ボリュームにアクセスできます。ネイティブ・クライアントは、カーネル・ドライバやモジュールを必要とせずにボリュームをマウントできる、File System in Userspace (FUSE)ソフトウェア・インタフェースを活用します。

次を実行します。

  1. ボリュームをマウントするホストで、Gluster Storage for Oracle Linuxパッケージへのアクセスを有効にします。アクセスの有効化の詳細は、2.3項「Gluster Storage for Oracle Linuxパッケージへのアクセスの有効化」を参照してください。

  2. Glusterネイティブ・クライアント・パッケージをインストールします。

    Oracle Linux 8を実行している場合は、次のコマンドを入力します。

    sudo dnf install @glusterfs/client

    それ以外の場合は、次のように入力します。

    sudo yum install glusterfs glusterfs-fuse
  3. ボリュームをマウントするディレクトリを作成します。たとえば:

    sudo mkdir /gluster-storage
  4. ボリュームに対してTLSを構成した場合は、クライアント・システムがボリュームをマウントできるように、追加のステップを実行する必要がある場合があります。詳細は、2.4.4項「トランスポート層セキュリティの設定」を参照してください。TLSのクライアント構成を完了するには、次のステップが必要です。

    Glusterネイティブ・クライアント(FUSE)を使用してTLSを設定するには、次の手順を実行します。
    1. クライアント・システムで証明書と秘密鍵を設定します。CA署名証明書を使用するか、次のように自己署名証明書を作成できます。

      sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/glusterfs.key -x509 -days 365 -out /etc/ssl/glusterfs.pem
    2. 信頼できるサーバー・プールの各ノードの/etc/ssl/glusterfs.caファイルにクライアント証明書を追加します。同様に、クライアントに、各ノードの証明書に署名したCA証明書が含まれている、または各ノードの自己署名証明書がすべて含まれている/etc/ssl/glusterfs.caファイルのコピーがあることを確認します。Glusterで相互認証が実行されるため、クライアントとサーバー・ノードの両方が互いの証明書を検証できることが不可欠です。

    3. 管理トラフィックで暗号化を有効にした場合、クライアント・システムでこの機能を有効にして、初期マウントを実行できるようにする必要があります。これを行うために、Glusterは/var/lib/glusterfs/secure-accessでファイルを検索します。このディレクトリはクライアント・システムに存在しない可能性があるため、ファイルにアクセスする前に作成する必要がある場合があります。

      sudo mkdir -p /var/lib/glusterfs
      sudo touch /var/lib/glusterfs/secure-access
    4. クライアント証明書を/etc/ssl/glusterfs.caに追加する前に、ボリュームがすでに設定されて実行されている場合は、ボリュームを停止し、Glusterサービスを再起動して、新しい証明書を登録するためにボリュームを再度起動する必要があります。

      sudo gluster volume stop myvolume
      sudo systemctl restart glusterd
      sudo gluster volume start myvolume 
  5. glusterfsマウント・タイプを使用し、プール内のノードとともにボリューム名を指定して、ディレクトリにボリュームをマウントします。たとえば:

    sudo mount -t glusterfs node1:myvolume /gluster-storage

    サブディレクトリのマウントを有効にするようにボリュームを設定した場合は、Glusterファイル・システムのパスにサブディレクトリ名を追加できます。

    sudo mount -t glusterfs node1:myvolume/subdirectory /gluster-storage
  6. 新しいマウントに対する権限を確認して、適切なユーザーがストレージに対して読取りおよび書込みを実行できることを確認します。たとえば:

    sudo chmod 777 /gluster-storage
  7. マウントを永続的にするには、/etc/fstabファイルを編集してマウントを含めます。たとえば:

    node1:/myvolume /gluster-storage glusterfs defaults,_netdev 0 0

    ボリュームにサブディレクトリをマウントする場合は、Glusterファイル・システムのパスにサブディレクトリ名を追加します。たとえば:

    node1:/myvolume/subdirectory /gluster-storage glusterfs defaults,_netdev 0 0

ボリュームのマウントで問題が発生した場合は、/var/log/glusterfs/にあるクライアント・システムのログを確認して接続の問題のデバッグを試行できます。たとえば、TLSが正しく構成されておらず、サーバー・ノードがクライアントを検証できない場合、ログに次のようなエラーが表示されることがあります。

… error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca

5.4 Sambaを使用したボリュームへのアクセス

Sambaを使用すると、Common Internet File System (CIFS)またはServer Message Block (SMB)を使用してボリュームを公開できます。このファイル共有サービスは、通常、Microsoft Windowsシステムで使用されます。

Glusterは、Samba仮想ファイル・システム(VFS)モジュール・プラグインを使用して、ボリュームを自動的に事前構成してエクスポートするためのフックを提供します。これにより、共有をエクスポートするようにSambaを構成する複雑さが軽減し、さらにFUSEクライアントを使用してボリュームを事前にマウントする必要がなくなることも意味するため、パフォーマンスがある程度改善されます。フックはボリュームが起動されるたびにトリガーされるため、Gluster内でボリュームが起動された時点でSamba構成が更新されます。

Sambaの詳細は、Oracle® Linux 7: 管理者ガイドを参照してください。

5.4.1 Sambaアクセスのためのボリュームの設定

次の手順では、Sambaクライアントからボリュームにアクセスできるように、信頼できるストレージ・プール内のノードを設定します。このサービスを使用するには、sambaパッケージとsamba-vfs-glusterfsパッケージの両方が、Sambaを使用してクライアントをボリュームに接続するプール内のいずれかのノードにインストールされるようにする必要があります。

Sambaアクセスを有効にする信頼できるストレージ・プールの各ノードで、次の手順を実行します。

  1. Gluster用のSambaパッケージをインストールします。

    sudo yum install samba samba-vfs-glusterfs
  2. ファイアウォール・サービスを実行している場合は、ノードでSambaへのアクセスを有効にします。たとえば:

    sudo firewall-cmd --permanent --add-service=samba 
    sudo firewall-cmd --reload
  3. Sambaサービスを有効にして起動します。

    sudo systemctl enable --now smb
  4. (オプション)認証システム(LDAPサーバーなど)が構成されていない場合は、Sambaユーザーを作成して、クライアントからSamba共有へのアクセスを有効にできます。このユーザーは、Samba共有をエクスポートするように設定されているすべてのノードで作成する必要があります。たとえば:

    sudo adduser myuser
    sudo smbpasswd -a myuser
    New SMB password:
    Retype new SMB password:
    Added user myuser.

    Sambaサービスを再起動します。

    sudo systemctl restart smb
  5. (オプション) Samba共有へのゲスト・アクセスを許可する場合(認証は不要)、Samba共有をエクスポートするように設定されている各ノードの/etc/samba/smb.confファイルの[global]セクションに、map to guest = Bad Userを含む新しい行を追加します。たとえば:

    [global]
           workgroup = SAMBA
           security = user
    
           passdb backend = tdbsam
    
           printing = cups
           printcap name = cups
           load printers = yes
           cups options = raw
           map to guest = Bad User

    ゲスト・アクセスを許可するには、[gluster-volume_name]セクションにguest ok = yesオプションが含まれている必要もあり、これは次のステップでGlusterフック・スクリプトによって自動的に設定されます。

    Sambaサービスを再起動します。

    sudo systemctl restart smb
  6. 実行中のボリュームがある場合は、それを停止し、ボリュームでSMBまたはCIFSを有効にして、再度起動します。信頼できるストレージ・プール内の任意のノードで、次を実行します。

    sudo gluster volume stop myvolume
    sudo gluster volume set myvolume user.smb enable
    sudo gluster volume start myvolume

    ボリュームでSMBまたはCIFSオプションを設定する場合は、user.smbまたはuser.cifsのいずれかを使用して、必要なエクスポートのタイプを有効にできます。両方のオプションが有効な場合、user.smbが優先されます。

    ボリュームを起動すると、Glusterフックがトリガーされてボリュームの構成エントリが各ノードの/etc/samba/smb.confファイルに自動的に追加され、そのボリュームにuser.smbまたはuser.cifsオプションが設定されている場合は、Sambaサービスがリロードされます。このスクリプトでは、次のようなSamba構成エントリが生成されます。

    [gluster-myvolume]
    comment = For samba share of volume myvolume
    vfs objects = glusterfs
    glusterfs:volume = myvolume
    glusterfs:logfile = /var/log/samba/glusterfs-myvolume.%M.log
    glusterfs:loglevel = 7
    path = /
    read only = no
    guest ok = yes
    kernel share modes = no
    ノート

    [gluster-myvolume]エントリの値によって、接続文字列で、Samba共有に接続するために使用する名前が設定されます。

  7. (オプション) Glusterでボリュームに対して共有をエクスポートするようにSambaを自動的に構成しない場合は、この動作を制御するフック・スクリプトを削除するか、名前変更できます。Samba共有を無効にする各ノードで、次のようにフック・スクリプトの名前を変更します。

    sudo rename S30 disabled-S30 $(find /var/lib/glusterd -type f -name S30samba*)

    フックを再度有効にするには、次を実行します。

    sudo rename disabled-S30 S30 $(find /var/lib/glusterd -type f -name *S30samba*)

5.4.2 ボリュームへのSMBアクセスのテスト

次の手順では、Samba共有をエクスポートするように設定されているボリュームへのSMBアクセスのテストについて説明します。Oracle LinuxホストからボリュームへのSMBアクセスをテストできます。このホストは、Glusterプールの一部である必要はありません。

  1. Oracle Linuxホストで、Sambaクライアント・パッケージをインストールします。

    sudo yum install samba-client
  2. smbclientコマンドを使用して、Sambaを設定した信頼できるストレージ・プール内のノードのSamba共有をリストします。たとえば:

    sudo smbclient -N -U% -L node1

    ボリュームのコンテンツを直接確認するには、次を実行します。

    sudo smbclient -N -U% //node1/gluster-myvolume -c ls

    このコマンドでは、ボリュームのSamba共有名を指定します。この名前は、Samba共有を設定するホストの/etc/samba/smb.confファイルで見つかります。通常、Samba共有名はgluster-volume_nameです。

5.4.3 ボリュームへのCIFSアクセスのテスト

次の手順では、Samba共有をエクスポートするように設定されているボリュームへのCIFSアクセスのテストについて説明します。Oracle LinuxホストからボリュームへのCIFSアクセスをテストできます。このホストは、Glusterプールの一部である必要はありません。

CIFSを使用してボリュームへのアクセスをテストするには:
  1. Oracle Linuxホストで、cifs-utilsパッケージをインストールします。

    sudo yum install cifs-utils
  2. ボリュームをマウントするマウント・ディレクトリを作成します。たとえば:

    sudo mkdir /gluster-storage
  3. cifsマウント・タイプを使用し、プール内のノードとともにボリュームのSamba共有名を指定して、ディレクトリにボリュームをマウントします。この名前は、Samba共有を設定するホストの/etc/samba/smb.confファイルで見つかります。通常、Samba共有名はgluster-volume_nameです。たとえば:

    sudo mount -t cifs -o guest //node1/gluster-myvolume /gluster-storage

    サブディレクトリのマウントを有効にするようにボリュームを設定した場合は、Glusterファイル・システムのパスにサブディレクトリ名を追加できます。

    sudo mount -t cifs -o guest //node1/gluster-myvolume/subdirectory /gluster-storage

    Samba共有に認証資格証明を渡す場合は、まずそれらをローカル・ファイルに追加します。この例では、資格証明はファイル/credfileに保存されます。

    username=value
    password=value

    他のユーザーがアクセスできないように、資格証明ファイルの権限を設定します。

    sudo chmod 600 /credfile

    その後、次のように、資格証明ファイルを使用してSamba共有に接続できます。

    sudo mount -t cifs -o credentials=/credfile //node1/gluster-myvolume /gluster-storage
  4. 新しいマウントに対する権限を確認して、適切なユーザーがストレージに対して読取りおよび書込みを実行できることを確認します。たとえば:

    sudo chmod 777 /gluster-storage

5.4.4 Microsoft Windowsからのボリュームへのアクセス

Microsoft Windowsホストでは、Samba共有を使用してボリュームをマウントできます。デフォルトでは、Samba共有は、SAMBAという名前のワークグループ(Samba共有ノードの/etc/samba/smb.confファイルで定義)で使用できます。

次のように\\node\volumeという形式を使用して、Windowsエクスプローラを使用してネットワーク・ドライブをマッピングすることで、ボリュームをマップできます。

\\node1\gluster-myvolume

Windowsコマンドラインを使用して新しいドライブをマップすることもできます。コマンド・プロンプトを起動します。次のようにコマンドを入力します。

net use z: \\node1\gluster-myvolume