本文へ移動

これはセクションの複数ページ印刷用ビューです。 .

このページの通常のビューに戻る.

タスク

このセクションでは、etcdを使用するアプリケーションの開発者と、etcdクラスターのデプロイ、構成、保守を担当する運用担当者に向けて、タスク別のガイドを提供します。

1 - 運用担当者向けタスク

etcdクラスターのデプロイ、構成、保守に関する運用ガイド。

1.1 - etcdクラスターでリーダー選出を行う方法

etcdctlクライアントを使用してリーダー選出を行う手順

前提条件

  • etcd とetcdctl がインストールされていることを確認します。
  • 稼働中のetcdクラスターを確認します。

リーダー選出を行う

etcdctlコマンドは、etcdクラスターでリーダー選出を行うために使用します。一度にリーダーになれるクライアントが1つだけであることを保証します。

etcdctl --endpoints=$ENDPOINTS elect <election-name> [proposal]

etcdctl --endpoints=$ENDPOINTS elect election-name p1

オプション

  • --endpoints : $ENDPOINTS

各etcdクラスターメンバーのアドレス。

  • election-name文字列

選出を識別する文字列です。リーダーの地位を競うすべての参加者は、同じ選出名を使用する必要があります。

  • leader-name文字列

新しいリーダーの提案値。

例

./etcdctl elect my-election proposal1
my-election/694d99fafea88404
proposal1

another election:
./etcdctl elect new-election proposal1
new-election/694d99fafea8840f
proposal1

1.2 - データベースの保存方法

etcdデータベースのスナップショットを取得するためのガイド

前提条件

データベースのスナップショットを取得する

etcdデータベースのある時点のスナップショットを保存するsnapshot:

etcdctl --endpoints=$ENDPOINT snapshot save DB_NAME

グローバルオプション

etcdctl

--endpoints=[127.0.0.1:2379], gRPC endpoints

スナップショットを要求できるetcdノードは1つだけなので、--endpointsフラグにはエンドポイントを1つだけ指定する必要があります。

etcdutl

-w, --write-out string   set the output format (fields, json, protobuf, simple, table) (default "simple")

例

11_etcdctl_snapshot_2016051001
ENDPOINTS=$HOST_1:2379
etcdctl --endpoints=$ENDPOINTS snapshot save my.db

Snapshot saved at my.db
etcdutl --write-out=table snapshot status my.db

+---------+----------+------------+------------+
|  HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+---------+----------+------------+------------+
| c55e8b8 |        9 |         13 | 25 kB      |
+---------+----------+------------+------------+

2 - 開発者向けタスク

アプリケーションでetcdをキー・バリューストアとして使用する開発者向けの段階的なガイド。

2.1 - etcdからの読み取り

etcdクラスターの値を読み取る

前提条件

  • etcdctlをインストールします。

手順

getサブコマンドを使用して、etcdから読み取ります。

$ etcdctl --endpoints=$ENDPOINTS get foo
foo
Hello World!
$

各要素の意味は次のとおりです。

  • fooは要求したキーです。
  • Hello World!は取得した値です。

出力形式を指定する場合は、次のように実行します。

$ etcdctl --endpoints=$ENDPOINTS --write-out="json" get foo
{"header":{"cluster_id":289318470931837780,"member_id":14947050114012957595,"revision":3,"raft_term":4,
"kvs":[{"key":"Zm9v","create_revision":2,"mod_revision":3,"version":2,"value":"SGVsbG8gV29ybGQh"}]}}
$

ここで、write-out="json"を指定すると、値はJSON形式で出力されます(キーは返されない点に注意してください)。

2.2 - etcdへの書き込み

etcdクラスターにキー・バリューペアを追加する

前提条件

  • etcdctlをインストールします。

手順

putサブコマンドを使用して、キー・バリューペアを書き込みます。

etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"

各要素の意味は次のとおりです。

  • fooはキーの名前です。
  • "Hello World!"は引用符で囲んだ値です。

2.3 - プレフィックスでキーを取得する方法

プレフィックスでetcdのキーを抽出するためのガイド

前提条件

プレフィックスでキーを取得する

$ etcdctl --endpoints=$ENDPOINTS get PREFIX --prefix

グローバルオプション

--endpoints=[127.0.0.1:2379], gRPC endpoints

オプション

--prefix, get a range of keys with matching prefix

例

03_etcdctl_get_by_prefix_2016050501
etcdctl --endpoints=$ENDPOINTS put web1 value1
etcdctl --endpoints=$ENDPOINTS put web2 value2
etcdctl --endpoints=$ENDPOINTS put web3 value3

etcdctl --endpoints=$ENDPOINTS get web --prefix

2.4 - キーの削除方法

etcdのキーを削除する方法を説明します

前提条件

キーの追加と削除

指定したキーまたはキー範囲を削除するdel:

etcdctl del $KEY [$END_KEY]

オプション

--prefix[=false]: delete keys with matching prefix
--prev-kv[=false]: return deleted key-value pairs
--from-key[=false]: delete keys that are greater than or equal to the given key using byte compare
--range[=false]: delete range of keys without delay

親コマンドから継承されるオプション

--endpoints="127.0.0.1:2379": gRPC endpoints

例

04_etcdctl_delete_2016050601
etcdctl --endpoints=$ENDPOINTS put key myvalue
etcdctl --endpoints=$ENDPOINTS del key

etcdctl --endpoints=$ENDPOINTS put k1 value1
etcdctl --endpoints=$ENDPOINTS put k2 value2
etcdctl --endpoints=$ENDPOINTS del k --prefix

2.5 - キーの監視方法

etcdのキーを監視するためのガイド

前提条件

キーの監視

今後の変更の通知を受け取るwatch:

etcdctl watch $KEY [$END_KEY]

オプション

-i, --interactive[=false]: interactive mode
--prefix[=false]: watch on a prefix if prefix is set
--rev=0: Revision to start watching
--prev-kv[=false]: get the previous key-value pair before the event happens
--progress-notify[=false]: get periodic watch progress notification from server

親コマンドから継承されるオプション

--endpoints="127.0.0.1:2379": gRPC endpoints

例

06_etcdctl_watch_2016050501
etcdctl --endpoints=$ENDPOINTS watch stock1
etcdctl --endpoints=$ENDPOINTS put stock1 1000

etcdctl --endpoints=$ENDPOINTS watch stock --prefix
etcdctl --endpoints=$ENDPOINTS put stock1 10
etcdctl --endpoints=$ENDPOINTS put stock2 20

2.6 - リースの作成方法

etcdでリースを作成するためのガイド

TTLを指定した書き込みに使用するlease:

07_etcdctl_lease_2016050501
etcdctl --endpoints=$ENDPOINTS lease grant 300
# lease 2be7547fbc6a5afa granted with TTL(300s)

etcdctl --endpoints=$ENDPOINTS put sample value --lease=2be7547fbc6a5afa
etcdctl --endpoints=$ENDPOINTS get sample

etcdctl --endpoints=$ENDPOINTS lease keep-alive 2be7547fbc6a5afa
etcdctl --endpoints=$ENDPOINTS lease revoke 2be7547fbc6a5afa
# or after 300 seconds
etcdctl --endpoints=$ENDPOINTS get sample

2.7 - ロックの作成方法

etcdで分散ロックを作成するためのガイド

LOCKは、指定された名前の分散ミューテックスを取得します。取得したロックは、etcdctlが終了するまで保持されます。

前提条件

ロックの作成

分散ロックに使用するlock:

08_etcdctl_lock_2016050501
etcdctl --endpoints=$ENDPOINTS lock mutex1

オプション

  • endpoints - クラスター内のマシンのアドレスを、コンマ区切りのリストで指定します。
  • ttl - ロックセッションのタイムアウトを秒単位で指定します。