第6章 Heketiを使用したボリューム・ライフサイクルの自動化

Heketiは、Gluster Storage for Oracle Linuxの信頼できるストレージ・プールおよびボリュームの完全なライフサイクルを管理するためのRESTfulインタフェース(Heketi API)を提供するサービスです。たとえば、Heketiにより、2.4.3項「信頼できるストレージ・プールの作成」および4.1項「ボリュームの作成」に定義されているステップを完全に自動化できます。Heketiが管理するクラスタおよびボリュームを動的に作成、変更および破棄するためのスクリプトを作成できます。

Heketiでは、Glusterの信頼できるストレージ・プールを表すクラスタという用語を使用します。この章で使用するクラスタという用語は、信頼できるストレージ・プールという用語と同じ意味になります。

Heketiは、システム管理を手動で行わずに、Heketi APIを使用して、高速で安定した完全に自動化された方法でボリュームを作成できる、管理されたクラウドベースのデプロイメントに特に役立ちます。

Heketiクライアントには、クラスタ、ノード、デバイス、およびボリュームを作成および管理するためのCLI (heketi-cli)が含まれています。Heketi CLIを使用できますが、クラスタおよびボリュームの自動管理にはHeketi APIを使用する必要があります。

最新のHeketiドキュメントは、アップストリーム(https://github.com/heketi/heketi/tree/master/docs)で利用可能です。

6.1 Heketi APIのインストール

Heketi APIを設定するには、提案されたクラスタ(信頼できるストレージ・プール)内のノード、またはクラスタの一部ではない別のサーバーにHeketiサービスをインストールします。

  1. ホストを準備し、Heketiクラスタで使用する各ノードでglusterdサービスが実行されていることを確認します。

    glusterコマンドを使用して、Glusterの信頼できるストレージ・プールやボリュームを作成しないでください。

    ボリュームに使用するディスクはフォーマットしないでください。ディスクは、Heketiで使用するために、RAW形式にする必要があります。

    ノードの準備とglusterdサービスのインストールの詳細は、2.4項「Glusterのインストールと構成」を参照してください。

  2. HeketiサーバーをHeketiクラスタ内のノードまたは別のサーバーにインストールします。

    sudo yum install heketi
  3. Heketiサーバー・ノードには、Heketiクラスタ内のすべてのノードへのパスワードなしのSSH鍵アクセスが必要です。

    Heketiクラスタ内の各ノードでrootユーザーを使用してSSHアクセスを設定することも、root以外のユーザーを使用することもできます。root以外のユーザーを使用する場合は、クラスタ内の各ノードでユーザーを設定し、ユーザーにsudo権限があることを確認します。Heketiサーバー・ノードではユーザーは不要です(Heketiサーバー・ノードもHeketiクラスタの一部である場合を除く)。

    Heketiサーバー・ノードで、パスワードなしのSSH鍵を生成します。たとえば:

    sudo ssh-keygen -f /mypath/heketi_key -t rsa -N ''

    Heketiクラスタの各ノードに公開鍵をコピーします。たとえば:

    sudo ssh-copy-id -i /mypath/heketi_key root@node1.example.com
    sudo ssh-copy-id -i /mypath/heketi_key root@node2.example.com
    sudo ssh-copy-id -i /mypath/heketi_key root@node3.example.com

    鍵を使用してHeketiサーバー・ノードからHeketiクラスタ・ノードにログインすることで、鍵が正しく設定されたことをテストできます。たとえば:

    sudo ssh -i /mypath/heketi_key root@node1.example.com

    Heketiサーバー・ノードで、Heketiサービス構成ファイル/etc/heketi/heketi.jsonsshexecセクションを変更して、このユーザーを指定します。たとえば、/mypath/heketi_keyにあるSSH秘密鍵を使用するrootユーザーの場合は、/etc/heketi/heketi.jsonファイルを変更して、rootユーザーおよびキー・ファイルへの正しいパスを指定します:

        "_sshexec_comment": "SSH username and private key file information",
        "sshexec": {
          "keyfile": "/mypath/heketi_key",
          "user": "root"
        },
  4. 必要に応じて、Heketiサービス構成ファイル/etc/heketi/heketi.jsonでその他のHeketiサービス・オプションを構成します。たとえば、APIサービスのポート番号(デフォルトは8080)を設定するか、ユーザー・アクセス資格証明を設定します。

  5. /etc/heketi/heketi.jsonファイルのデフォルト設定を確認します。

    このファイルは、heketiパッケージをインストールするとデフォルトで含まれます。ファイル内のエントリ例の一部が無効な変数または命令であり、変更しないと失敗します。たとえば、portおよびfstabエントリなどのオプション・エントリを削除または変更して、デフォルト値を置き換える必要があります。

    Heketiサービスが正しく実行されるように、このファイルの構成エントリが適切に設定されていることを確認してください。

  6. heketiサービスを起動して有効にします。

    sudo systemctl enable --now heketi
  7. Heketi APIにGETリクエストを送信することで、heketiサービスが実行中であることを確認できます。

    sudo curl http://localhost:8080/hello
    Hello from Heketi

6.2 Heketiクライアントのインストール

Heketiクライアント・パッケージには、Heketi APIを使用してボリュームを管理するためのCLIが含まれています。Heketiクライアントは、Heketiクラスタの一部であるホストではなく、クライアント・ノードにインストールする必要があります。

sudo yum install heketi-client

6.3 Heketi CLIの使用方法

この項では、Heketi CLIを使用してクラスタを作成し、ボリュームを作成および管理する方法について説明します。この項のステップは、Heketiクライアントをインストールしたノードで実行する必要があります。

Heketiでは、既存のクラスタに関する情報を取得できません。新しいクラスタは、Heketiで管理されるように作成される必要があります。様々なディスク・タイプ(SSD、SASまたはSATA)の複数のクラスタをニーズにあわせて作成できます。

クラスタを管理するようにHeketiが設定されたら、heketi-cliコマンドまたはHeketi APIのみを使用してクラスタとボリュームを管理します。Heketiデータベースで不整合が発生する可能性があるため、Heketiによって管理されるクラスタまたはボリュームの管理にはglusterコマンドを使用しないでください。

Heketiがボリュームを作成するために使用するRAWデバイスは、フォーマットしないでください。

この項の例で使用するホスト名とIPアドレスは次のとおりです。

  • node1.example.com (192.168.1.51)

  • node2.example.com (192.168.1.52)

  • node3.example.com (192.168.1.53)

heketi-cliコマンドを実行する場合は、Heketi APIサーバーの場所を指定し、さらに、認証が設定されている場合は認証情報を指定する必要があります。これを行うためにheketi-cliコマンドの実行時にこれらのオプションを渡すか、環境変数を設定します。使用するheketi-cli構文は次のとおりです。

heketi-cli --server=URL --user=username --secret=key command

環境変数を使用する場合は、環境変数名をこの例のようにします。

sudo export HEKETI_CLI_SERVER=http://node1.example.com:8080
sudo export HEKETI_CLI_USER=admin
sudo export HEKETI_CLI_KEY=key

この項の例では、コマンドが読みやすくなるように、環境変数を使用します。

6.3.1 クラスタの作成

Heketi CLIを使用してクラスタを作成するには、この手順に従います。

  1. Heketiトポロジ構成ファイルを作成して、クラスタを設定します。次のように、/usr/share/heketi/topology-sample.jsonを新しいファイルにコピーします。

    sudo cp /usr/share/heketi/topology-sample.json /usr/share/heketi/topology-mycluster.json
  2. トポロジ・ファイルはJSON形式であり、クラスタの配列を含めることができます。各クラスタにはノードの配列が含まれています。各ノードには、ノードのホスト名とIPアドレス、ノードで使用可能なデバイス、およびノードを含める必要がある障害ドメイン(ゾーン)が含まれます。

    環境にあわせて/usr/share/heketi/topology-mycluster.jsonファイルを編集します。たとえば:

    {
      "clusters": [
        {
          "nodes": [
            {
              "node": {
                "hostnames": {
                  "manage": [
                    "node1.example.com"
                  ],
                  "storage": [
                    "192.168.1.51"
                  ]
                },
                "zone": 1
              },
              "devices": [
                {
                  "name": "/dev/sdb",
                  "destroydata": false
                }
              ]
            },
            {
              "node": {
                "hostnames": {
                  "manage": [
                    "node2.example.com"
                  ],
                  "storage": [
                    "192.168.1.52"
                  ]
                },
                "zone": 1
              },
              "devices": [
                {
                  "name": "/dev/sdb",
                  "destroydata": false
                }
              ]
            },
            {
              "node": {
                "hostnames": {
                  "manage": [
                    "node3.example.com"
                  ],
                  "storage": [
                    "192.168.1.53"
                  ]
                },
                "zone": 1
              },
              "devices": [
                {
                  "name": "/dev/sdb",
                  "destroydata": false
                }
              ]
            }
          ]
        }
      ]
    }
  3. heketi-cli Topology loadコマンドを使用して、Heketiトポロジ・ファイルをHeketiにロードし、クラスタを作成します。JSONファイルで指定されたクラスタ、ノードおよびディスクが作成されます。

    sudo heketi-cli topology load --json=heketi-mycluster.json 
    Creating cluster ... ID: 7c1cf54ff4b5ab41f823ac592ba68ca5
    	Allowing file volumes on cluster.
    	Allowing block volumes on cluster.
    	Creating node node1.example.com ... ID: c35ba48b042555633b511f459f5aa157
    		Adding device /dev/sdb ... OK
    	Creating node node2.example.com ... ID: 7c899bc9f50e46efc993dc22263549e4
    		Adding device /dev/sdb ... OK
    	Creating node node3.example.com ... ID: 32755ad123c325f75c91aa963c4312f3
    		Adding device /dev/sdb ... OK
  4. Heketiによって管理されるクラスタのリストは、heketi-cli cluster listコマンドを使用して取得できます。

    sudo heketi-cli cluster list
    Clusters:
    Id:7c1cf54ff4b5ab41f823ac592ba68ca5 [file][block]
  5. Heketiによって管理される各クラスタの詳細は、heketi-cli topology infoコマンドを使用して取得できます。

    sudo heketi-cli topology info
    
    Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    
        File:  true
        Block: true
    
        Volumes:
    
        Nodes:
    
    	Node Id: 32755ad123c325f75c91aa963c4312f3
    	State: online
    	Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    	Zone: 1
    	Management Hostnames: node3.example.com
    	Storage Hostnames: 192.168.1.53
    	Devices:
    		Id:5917085ef4a7beca4f7c61138d152460   Name:/dev/sdb            State:online    
                 Size (GiB):500     Used (GiB):0       Free (GiB):500     
    			Bricks:
    
    	Node Id: 7c899bc9f50e46efc993dc22263549e4
    	State: online
    	Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    	Zone: 1
    	Management Hostnames: node2.example.com
    	Storage Hostnames: 192.168.1.52
    	Devices:
    		Id:855490c8fb09e4f21caae9f421f692b0   Name:/dev/sdb            State:online
                 Size (GiB):500     Used (GiB):0       Free (GiB):500     
    			Bricks:
    
    	Node Id: c35ba48b042555633b511f459f5aa157
    	State: online
    	Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    	Zone: 1
    	Management Hostnames: node1.example.com
    	Storage Hostnames: 192.168.1.51
    	Devices:
    		Id:fbf747dc6ccf811fce0196d8280a32e3   Name:/dev/sdb            State:online
                 Size (GiB):500     Used (GiB):0       Free (GiB):500     
    			Bricks:

6.3.2 ボリュームの作成

Heketi CLIを使用してボリュームを作成するには、この手順に従います。

  1. heketi-cli volume createコマンドを使用して、ボリュームを作成します。このコマンドでは、レプリカ数3を使用して、複製ボリューム(1つのブリックが3つのノードを横断)を作成します。ボリュームのサイズは10Gbです。

    sudo heketi-cli volume create --size=10 --replica=3
    Name: vol_2ab33ebc348c2c6dcc3819b2691d0267
    Size: 10
    Volume Id: 2ab33ebc348c2c6dcc3819b2691d0267
    Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    Mount: 192.168.1.51:vol_2ab33ebc348c2c6dcc3819b2691d0267
    Mount Options: backup-volfile-servers=192.168.1.52,192.168.1.53
    Block: false
    Free Size: 0
    Reserved Size: 0
    Block Hosting Restriction: (none)
    Block Volumes: []
    Durability Type: replicate
    Distributed+Replica: 3
  2. heketi-cli volume listコマンドを使用して、Heketiによって管理されるボリュームのリストを取得します。

    sudo heketi-cli volume list
    Id:2ab33ebc348c2c6dcc3819b2691d0267    Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5    
       Name:vol_2ab33ebc348c2c6dcc3819b2691d0267
  3. ボリュームのIdを使用して、heketi-cli volume infoコマンドを使用してボリュームに関する情報を取得します。

    sudo heketi-cli volume info 2ab33ebc348c2c6dcc3819b2691d0267
    Name: vol_2ab33ebc348c2c6dcc3819b2691d0267
    Size: 10
    Volume Id: 2ab33ebc348c2c6dcc3819b2691d0267
    Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    Mount: 192.168.1.51:vol_2ab33ebc348c2c6dcc3819b2691d0267
    Mount Options: backup-volfile-servers=192.168.1.52,192.168.1.53
    Block: false
    Free Size: 0
    Reserved Size: 0
    Block Hosting Restriction: (none)
    Block Volumes: []
    Durability Type: replicate
    Distributed+Replica: 3

6.3.3 ボリュームの拡張

Heketi CLIを使用してボリュームを拡張するには、この手順に従います。

  1. heketi-cli volume expandコマンドを使用して、ボリュームのサイズを拡張します。この例のボリューム・サイズでは、ボリューム・サイズに10Gbを追加しています。

    sudo heketi-cli volume expand --volume=2ab33ebc348c2c6dcc3819b2691d0267 --expand-size=10
    Name: vol_2ab33ebc348c2c6dcc3819b2691d0267
    Size: 20
    Volume Id: 2ab33ebc348c2c6dcc3819b2691d0267
    Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    Mount: 192.168.1.51:vol_2ab33ebc348c2c6dcc3819b2691d0267
    Mount Options: backup-volfile-servers=192.168.1.52,192.168.1.53
    Block: false
    Free Size: 0
    Reserved Size: 0
    Block Hosting Restriction: (none)
    Block Volumes: []
    Durability Type: replicate
    Distributed+Replica: 3

6.3.4 ボリュームの削除

Heketi CLIを使用してボリュームを削除するには、この手順に従います。

ボリュームを削除するには:
  1. heketi-cli volume listコマンドを使用して、Heketiによって管理されるボリュームのリストを取得します。

    sudo heketi-cli volume list
    Id:2ab33ebc348c2c6dcc3819b2691d0267    Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5    
      Name:vol_2ab33ebc348c2c6dcc3819b2691d0267
  2. ボリュームのIdを使用して、heketi-cli volume deleteコマンドを使用してボリュームを削除します。

    sudo heketi-cli volume delete 2ab33ebc348c2c6dcc3819b2691d0267
    Volume 2ab33ebc348c2c6dcc3819b2691d0267 deleted

6.3.5 デバイスの削除

Heketi CLIを使用してデバイスを削除するには、この手順に従います。削除する前に、(heketi-cli topology infoコマンドを使用して) Heketiトポロジにリストされたボリュームがデバイスにないことを確認します。

  1. heketi-cli node listコマンドを使用して、Heketiによって管理されるノードのリストを取得します。

    sudo heketi-cli node list
    Id:32755ad123c325f75c91aa963c4312f3	Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
    Id:7c899bc9f50e46efc993dc22263549e4	Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
    Id:c35ba48b042555633b511f459f5aa157	Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
  2. ノードのIdを使用して、heketi-cli node infoコマンドを使用してノードのデバイスに関する情報を取得します。

    sudo heketi-cli node info c35ba48b042555633b511f459f5aa157
    Node Id: c35ba48b042555633b511f459f5aa157
    State: online
    Cluster Id: 7c1cf54ff4b5ab41f823ac592ba68ca5
    Zone: 1
    Management Hostname: node3.example.com
    Storage Hostname: 192.168.1.53
    Devices:
    Id:fbf747dc6ccf811fce0196d8280a32e3   Name:/dev/sdb  State:online   Size (GiB):500  
       Used (GiB):20  Free (GiB):478     Bricks:3
  3. デバイスのIdを使用して、heketi-cli device disableコマンドを使用してデバイスを無効に(オフラインに)します。

    sudo heketi-cli device disable fbf747dc6ccf811fce0196d8280a32e3
    Device fbf747dc6ccf811fce0196d8280a32e3 is now offline
  4. デバイスのIdを使用して、heketi-cli device removeコマンドを使用してデバイスを削除します。

    sudo heketi-cli device remove fbf747dc6ccf811fce0196d8280a32e3
    Device fbf747dc6ccf811fce0196d8280a32e3 is now removed
  5. デバイスのIdを使用して、heketi-cli device deleteコマンドを使用してデバイスを削除します。

    sudo heketi-cli device delete fbf747dc6ccf811fce0196d8280a32e3
    Device fbf747dc6ccf811fce0196d8280a32e3 deleted

6.3.6 ノードの削除

Heketi CLIを使用してノードを削除するには、この手順に従います。ノードを削除する前に、heketi-cli Topology infoを実行して、Heketiトポロジにリストされたボリュームとデバイスがいずれもノードにないことを確認します。

  1. heketi-cli node listコマンドを使用して、Heketiによって管理されるノードのリストを取得します。

    sudo heketi-cli node list
    Id:32755ad123c325f75c91aa963c4312f3	Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
    Id:7c899bc9f50e46efc993dc22263549e4	Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
    Id:c35ba48b042555633b511f459f5aa157	Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
  2. ノードのIdを使用して、heketi-cli node disableコマンドを使用してデバイスを無効にします。

    sudo heketi-cli node disable c35ba48b042555633b511f459f5aa157
    Node c35ba48b042555633b511f459f5aa157 is now offline
  3. ノードのIdを使用して、heketi-cli node removeコマンドを使用してノードを削除します。

    sudo heketi-cli node remove c35ba48b042555633b511f459f5aa157
    Node c35ba48b042555633b511f459f5aa157 is now removed
  4. ノードのIdを使用して、heketi-cli node deleteコマンドを使用してノードを削除します。

    sudo heketi-cli node delete c35ba48b042555633b511f459f5aa157
    Node c35ba48b042555633b511f459f5aa157 deleted

6.3.7 クラスタの削除

Heketi CLIを使用してクラスタを削除するには、この手順に従います。クラスタを削除する前に、heketi-cli Topology infoコマンドを実行して、Heketiトポロジにリストされたボリューム、ノード、デバイスがいずれもクラスタにないことを確認します。

  1. heketi-cli cluster listコマンドを使用して、Heketiによって管理されるクラスタのリストを取得します。

    sudo heketi-cli cluster list
    Clusters:
    Id:7c1cf54ff4b5ab41f823ac592ba68ca5 [file][block]
  2. クラスタのIdを使用して、heketi-cli cluster deleteコマンドを使用してクラスタを削除します。

    sudo heketi-cli cluster delete 7c1cf54ff4b5ab41f823ac592ba68ca5
    Cluster 7c1cf54ff4b5ab41f823ac592ba68ca5 deleted

6.3.8 Heketiトポロジのクリーン・アップ

Heketi CLIを使用してHeketiトポロジをクリーニングするには、この手順に従います。heketi-cli topology infoコマンドを使用して、Heketiトポロジを表示します。

  1. すべてのボリュームを削除します。6.3.4項「ボリュームの削除」を参照してください。

  2. 各ノードのすべてのデバイスを削除します。6.3.5項「デバイスの削除」を参照してください。

  3. 各クラスタのすべてのノードを削除します。6.3.6項「ノードの削除」を参照してください。

  4. すべてのクラスタを削除します。6.3.7項「クラスタの削除」を参照してください。