第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サービスをインストールします。
-
ホストを準備し、Heketiクラスタで使用する各ノードで
glusterd
サービスが実行されていることを確認します。glusterコマンドを使用して、Glusterの信頼できるストレージ・プールやボリュームを作成しないでください。
ボリュームに使用するディスクはフォーマットしないでください。ディスクは、Heketiで使用するために、RAW形式にする必要があります。
ノードの準備と
glusterd
サービスのインストールの詳細は、2.4項「Glusterのインストールと構成」を参照してください。 -
HeketiサーバーをHeketiクラスタ内のノードまたは別のサーバーにインストールします。
sudo yum install heketi
-
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.json
のsshexec
セクションを変更して、このユーザーを指定します。たとえば、/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" },
-
必要に応じて、Heketiサービス構成ファイル
/etc/heketi/heketi.json
でその他のHeketiサービス・オプションを構成します。たとえば、APIサービスのポート番号(デフォルトは8080
)を設定するか、ユーザー・アクセス資格証明を設定します。 -
/etc/heketi/heketi.json
ファイルのデフォルト設定を確認します。このファイルは、
heketi
パッケージをインストールするとデフォルトで含まれます。ファイル内のエントリ例の一部が無効な変数または命令であり、変更しないと失敗します。たとえば、port
およびfstab
エントリなどのオプション・エントリを削除または変更して、デフォルト値を置き換える必要があります。Heketiサービスが正しく実行されるように、このファイルの構成エントリが適切に設定されていることを確認してください。
-
heketi
サービスを起動して有効にします。sudo systemctl enable --now heketi
-
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を使用してクラスタを作成するには、この手順に従います。
-
Heketiトポロジ構成ファイルを作成して、クラスタを設定します。次のように、
/usr/share/heketi/topology-sample.json
を新しいファイルにコピーします。sudo cp /usr/share/heketi/topology-sample.json /usr/share/heketi/topology-mycluster.json
-
トポロジ・ファイルは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 } ] } ] } ] }
-
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
-
Heketiによって管理されるクラスタのリストは、heketi-cli cluster listコマンドを使用して取得できます。
sudo heketi-cli cluster list Clusters: Id:7c1cf54ff4b5ab41f823ac592ba68ca5 [file][block]
-
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を使用してボリュームを作成するには、この手順に従います。
-
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
-
heketi-cli volume listコマンドを使用して、Heketiによって管理されるボリュームのリストを取得します。
sudo heketi-cli volume list Id:2ab33ebc348c2c6dcc3819b2691d0267 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5 Name:vol_2ab33ebc348c2c6dcc3819b2691d0267
-
ボリュームの
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を使用してボリュームを拡張するには、この手順に従います。
-
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を使用してボリュームを削除するには、この手順に従います。
-
heketi-cli volume listコマンドを使用して、Heketiによって管理されるボリュームのリストを取得します。
sudo heketi-cli volume list Id:2ab33ebc348c2c6dcc3819b2691d0267 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5 Name:vol_2ab33ebc348c2c6dcc3819b2691d0267
-
ボリュームの
Id
を使用して、heketi-cli volume deleteコマンドを使用してボリュームを削除します。sudo heketi-cli volume delete 2ab33ebc348c2c6dcc3819b2691d0267 Volume 2ab33ebc348c2c6dcc3819b2691d0267 deleted
6.3.5 デバイスの削除
Heketi CLIを使用してデバイスを削除するには、この手順に従います。削除する前に、(heketi-cli topology infoコマンドを使用して) Heketiトポロジにリストされたボリュームがデバイスにないことを確認します。
-
heketi-cli node listコマンドを使用して、Heketiによって管理されるノードのリストを取得します。
sudo heketi-cli node list Id:32755ad123c325f75c91aa963c4312f3 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5 Id:7c899bc9f50e46efc993dc22263549e4 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5 Id:c35ba48b042555633b511f459f5aa157 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
-
ノードの
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
-
デバイスの
Id
を使用して、heketi-cli device disableコマンドを使用してデバイスを無効に(オフラインに)します。sudo heketi-cli device disable fbf747dc6ccf811fce0196d8280a32e3 Device fbf747dc6ccf811fce0196d8280a32e3 is now offline
-
デバイスの
Id
を使用して、heketi-cli device removeコマンドを使用してデバイスを削除します。sudo heketi-cli device remove fbf747dc6ccf811fce0196d8280a32e3 Device fbf747dc6ccf811fce0196d8280a32e3 is now removed
-
デバイスの
Id
を使用して、heketi-cli device deleteコマンドを使用してデバイスを削除します。sudo heketi-cli device delete fbf747dc6ccf811fce0196d8280a32e3 Device fbf747dc6ccf811fce0196d8280a32e3 deleted
6.3.6 ノードの削除
Heketi CLIを使用してノードを削除するには、この手順に従います。ノードを削除する前に、heketi-cli Topology infoを実行して、Heketiトポロジにリストされたボリュームとデバイスがいずれもノードにないことを確認します。
-
heketi-cli node listコマンドを使用して、Heketiによって管理されるノードのリストを取得します。
sudo heketi-cli node list Id:32755ad123c325f75c91aa963c4312f3 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5 Id:7c899bc9f50e46efc993dc22263549e4 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5 Id:c35ba48b042555633b511f459f5aa157 Cluster:7c1cf54ff4b5ab41f823ac592ba68ca5
-
ノードの
Id
を使用して、heketi-cli node disableコマンドを使用してデバイスを無効にします。sudo heketi-cli node disable c35ba48b042555633b511f459f5aa157 Node c35ba48b042555633b511f459f5aa157 is now offline
-
ノードの
Id
を使用して、heketi-cli node removeコマンドを使用してノードを削除します。sudo heketi-cli node remove c35ba48b042555633b511f459f5aa157 Node c35ba48b042555633b511f459f5aa157 is now removed
-
ノードの
Id
を使用して、heketi-cli node deleteコマンドを使用してノードを削除します。sudo heketi-cli node delete c35ba48b042555633b511f459f5aa157 Node c35ba48b042555633b511f459f5aa157 deleted
6.3.7 クラスタの削除
Heketi CLIを使用してクラスタを削除するには、この手順に従います。クラスタを削除する前に、heketi-cli Topology infoコマンドを実行して、Heketiトポロジにリストされたボリューム、ノード、デバイスがいずれもクラスタにないことを確認します。
-
heketi-cli cluster listコマンドを使用して、Heketiによって管理されるクラスタのリストを取得します。
sudo heketi-cli cluster list Clusters: Id:7c1cf54ff4b5ab41f823ac592ba68ca5 [file][block]
-
クラスタの
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トポロジを表示します。
-
すべてのボリュームを削除します。6.3.4項「ボリュームの削除」を参照してください。
-
各ノードのすべてのデバイスを削除します。6.3.5項「デバイスの削除」を参照してください。
-
各クラスタのすべてのノードを削除します。6.3.6項「ノードの削除」を参照してください。
-
すべてのクラスタを削除します。6.3.7項「クラスタの削除」を参照してください。