本文へ移動

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

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

開発者ガイド

開発者向けのetcdガイド

1 - 検出サービスのプロトコル

クラスターの初期構築時に他のetcdメンバーを検出する
注記

このページでは、etcd 3.7で削除された旧v2ディスカバリープロトコルを説明しています。新しいv3.7環境のデプロイには、v3ディスカバリープロトコル を使用してください。

検出サービスのプロトコルは、共有の検出URLを使い、クラスターの初期構築時に新しいetcdメンバーが他のすべてのメンバーを検出するためのものです。

検出サービスのプロトコルは、クラスターの初期構築時にのみ使用します。実行時の再構成やクラスターの監視には使用できません。

このプロトコルは、新しい検出トークンを使って、一意のetcdクラスターを1つ初期構築します。1つの検出トークンが表せるetcdクラスターは1つだけです。そのトークンで検出プロトコルを開始した後は、途中で失敗した場合でも、別のetcdクラスターの初期構築に再利用してはいけません。

以降では、自前でホストする検出クラスターの例を使って、検出の流れを説明します。公開検出サービスのdiscovery.etcd.ioも同じ仕組みで動作しますが、複雑なURLを隠し、UUIDを自動生成し、過剰なリクエストをある程度防ぐための層が追加されています。公開検出サービスも、内部ではこのドキュメントで説明するようにetcdクラスターをデータストアとして使用しています。

プロトコルの処理の流れ

検出プロトコルは、内部のetcdクラスターを使って、新しいクラスターの初期構築を調整します。まず、すべての新しいメンバーが検出サービスとやり取りして、予定されたメンバーの一覧を作成します。次に、各新規メンバーはこの一覧を使ってサーバーを初期構築します。これは-initial-clusterフラグと同じ役割を果たします。

以下の処理例では、理解しやすいように、プロトコルの各手順をcurl形式で示します。

慣例として、etcdの検出プロトコルはキーの接頭辞_etcd/registryを使用します。http://example.comで検出サービス用のetcdクラスターをホストしている場合、検出キー空間の完全なURLはhttp://example.com/v2/keys/_etcd/registryです。この例では、これをURLの接頭辞として使用します。

新しい検出トークンの作成

新しいクラスターを識別する一意のトークンを生成します。以降の手順では、検出キー空間内の一意の接頭辞として使用します。uuidgenを使うと簡単に生成できます。

UUID=$(uuidgen)

予定するクラスターサイズの指定

検出トークンには、予定するクラスターサイズを指定する必要があります。検出サービスはこのサイズを使い、クラスターを初期構成するすべてのメンバーが見つかったかどうかを判断します。

curl -X PUT http://example.com/v2/keys/_etcd/registry/${UUID}/_config/size -d value=${cluster_size}

クラスターサイズは通常、3、5、7のいずれかです。詳細は最適なクラスターサイズ を参照してください。

etcdプロセスの起動

検出URLを-discoveryフラグに指定して、etcdプロセスを起動します。-discoveryフラグが指定された各etcdプロセスは、内部で以下の手順を実行します。

自身の登録

etcdプロセスは最初に、検出URLに自身をメンバーとして登録します。検出URL内にメンバーIDをキーとして作成することで登録します。

curl -X PUT http://example.com/v2/keys/_etcd/registry/${UUID}/${member_id}?prevExist=false -d value="${member_name}=${member_peer_url_1}&${member_name}=${member_peer_url_2}"

状態の確認

検出URLから予定されたクラスターサイズと登録状態を確認し、次の動作を決めます。

curl -X GET http://example.com/v2/keys/_etcd/registry/${UUID}/_config/size
curl -X GET http://example.com/v2/keys/_etcd/registry/${UUID}

登録済みのメンバーがまだ足りなければ、残りのメンバーが現れるのを待ちます。

登録済みのメンバー数が予定サイズNを超える場合、最初に登録されたN個のメンバーを、そのクラスターのメンバー一覧として扱います。自分自身が一覧に含まれていれば検出は成功し、その一覧からすべてのピアを取得します。一覧に含まれていなければ、クラスターが満員であるというエラーで検出処理を終了します。

etcdの実装では、自身を登録する前にメンバーがクラスターの状態を確認することもあります。そのため、クラスターがすでに満員の場合、速やかに失敗できます。

すべてのメンバーを待機

待機処理の詳細は、etcd APIドキュメント を参照してください。

curl -X GET http://example.com/v2/keys/_etcd/registry/${UUID}?wait=true&waitIndex=${current_etcd_index}

すべてのメンバーが見つかるまで待機を続けます。

公開検出サービス

CoreOS Inc.は、https://discovery.etcd.io/ で公開検出サービスをホストしています。このサービスは、使いやすさのためにいくつかの便利な機能を提供します。

キーの接頭辞の隠蔽

公開検出サービスは、https://discovery.etcd.io/${UUID}を、背後のetcdクラスターの/v2/keys/_etcd/registryにあるキーへリダイレクトします。登録キーの接頭辞を隠すことで、短く読みやすい検出URLを提供します。

新しいトークンの取得

GET /new

Sent query:
	size=${cluster_size}
Possible status codes:
	200 OK
	400 Bad Request
200 Body:
	generated discovery url

サービス内の生成処理は、新しい検出トークンの作成 から予定するクラスターサイズの指定 までの手順に従います。

検出状態の確認

GET /${UUID}

UUIDの値を要求することで、登録済みのマシンを含む、その検出トークンの状態を確認できます。

オープンソースリポジトリ

リポジトリは https://github.com/coreos/discovery.etcd.io にあります。独自の検出サービスを構築するために使用できます。

2 - ローカルクラスターの構築

テストと開発用のローカルクラスターを構成する

テストや開発用にデプロイする場合、最も手早く簡単なのはローカルクラスターの構成です。本番環境へのデプロイについては、クラスター構成 のセクションを参照してください。

ローカルの単独クラスター

クラスターの起動

etcdを単独クラスターとしてデプロイするには、次を実行します。

$ ./etcd
...

現在の作業ディレクトリにetcdバイナリーがない場合、$GOPATH/bin/etcdまたは/usr/local/bin/etcdにある可能性があります。その場所に合わせてコマンドを実行してください。

起動したetcdメンバーは、localhost:2379でクライアントリクエストを待ち受けます。

クラスターの操作

etcdctlで実行中のクラスターを操作します。

  1. 例としてキー・バリューペアをクラスターに保存します。

      $ ./etcdctl put foo bar
      OK

    OKと表示されれば、キー・バリューペアの保存は成功です。

  2. fooの値を取得します。

    $ ./etcdctl get foo
    bar

    barが返れば、etcdクラスターとのやり取りは正常に動作しています。

ローカルの複数メンバークラスター

クラスターの起動

etcdのGitリポジトリのルートには、ローカルで複数メンバーのクラスターを簡単に構成するためのProcfileがあります。複数メンバーのクラスターを起動するには、etcdのソースツリーのルートに移動して、次の操作を行います。

  1. Procfileに基づくアプリケーションを制御するため、goremanをインストールします。

    $ go install github.com/mattn/goreman@latest
  2. etcdに付属するProcfileを使い、goremanでクラスターを起動します。

    $ goreman -f Procfile start

    メンバーが起動し、それぞれlocalhost:2379、localhost:22379、localhost:32379でクライアントリクエストを待ち受けます。

クラスターの操作

etcdctlで実行中のクラスターを操作します。

  1. メンバーの一覧を表示します。

    $ etcdctl --write-out=table --endpoints=localhost:2379 member list

    etcdメンバーの一覧が次のように表示されます。

    +------------------+---------+--------+------------------------+------------------------+
    |        ID        | STATUS  |  NAME  |       PEER ADDRS       |      CLIENT ADDRS      |
    +------------------+---------+--------+------------------------+------------------------+
    | 8211f1d0f64f3269 | started | infra1 | http://127.0.0.1:2380  | http://127.0.0.1:2379  |
    | 91bc3c398fb3c146 | started | infra2 | http://127.0.0.1:22380 | http://127.0.0.1:22379 |
    | fd422379fda50e48 | started | infra3 | http://127.0.0.1:32380 | http://127.0.0.1:32379 |
    +------------------+---------+--------+------------------------+------------------------+
  2. 例としてキー・バリューペアをクラスターに保存します。

    $ etcdctl put foo bar
    OK

    OKと表示されれば、キー・バリューペアの保存は成功です。

耐障害性のテスト

etcdの耐障害性を試すため、メンバーを停止してからキーを取得します。

  1. 停止するメンバーのプロセス名を確認します。

    Procfileには、複数メンバーのクラスターのプロパティが記載されています。ここでは、プロセス名がetcd2のメンバーを例にします。

  2. メンバーを停止します。

    # kill etcd2
    $ goreman run stop etcd2
  3. キーを保存します。

    $ etcdctl put key hello
    OK
  4. 前の手順で保存したキーを取得します。

    $ etcdctl get key
    hello
  5. 停止したメンバーからキーを取得します。

    $ etcdctl --endpoints=localhost:22379 get key

    このコマンドでは、接続失敗によるエラーが表示されるはずです。

    2017/06/18 23:07:35 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 127.0.0.1:22379: getsockopt: connection refused"; Reconnecting to "localhost:22379"
    Error:  grpc: timed out trying to connect
  6. 停止したメンバーを再起動します。

    $ goreman run restart etcd2
  7. 再起動したメンバーからキーを取得します。

    $ etcdctl --endpoints=localhost:22379 get key
    hello

    メンバーを再起動すると接続が再確立され、etcdctlでキーを正常に取得できるようになります。etcdの操作について詳しくは、etcdの操作 のセクションを参照してください。

3 - etcdの操作

etcdctl:etcdサーバーを操作するコマンドラインツール

ユーザーは主に、キーの値を書き込んだり取得したりしてetcdを操作します。このセクションでは、etcdサーバーを操作するコマンドラインツールetcdctlを使う方法を説明します。ここで説明する概念は、gRPC APIやクライアントライブラリーのAPIにも当てはまるはずです。

etcdctl v3.7はv3 APIを使用します。v2 APIとETCDCTL_APIによるバージョン選択は削除されています。

注記

以下の例には過去のコマンド出力が含まれるため、表示されるバージョン番号はインストールしたものと異なる場合があります。以前のetcdリリースではv2とv3のキーを別々のストアで保持していました。v3.7へアップグレードする前に、既存のv2データを移行してください。

バージョンの確認

etcdctlのバージョンとサーバーAPIのバージョンを確認すると、etcdの各種操作に適したコマンドを見つけるのに役立ちます。

バージョンを確認するコマンドは、次のとおりです。

$ etcdctl version
etcdctl version: 3.1.0-alpha.0+git
API version: 3.1

キーへの書き込み

アプリケーションはキーに書き込むことで、etcdクラスターにキーを保存します。保存された各キーは、一貫性と信頼性を確保するため、Raftプロトコルによってetcdクラスターのすべてのメンバーに複製されます。

キーfooの値をbarに設定するコマンドは、次のとおりです。

$ etcdctl put foo bar
OK

リースを関連付けると、キーを指定した時間だけ有効にすることもできます。

キーfoo1の値を10sの間bar1に設定するコマンドは、次のとおりです。

$ etcdctl put foo1 bar1 --lease=1234abcd
OK
注記

上のコマンドのリースID1234abcdは、10sのリースを作成したときに返されるIDです。このIDをキーに関連付けます。

キーの読み取り

アプリケーションは、etcdクラスターからキーの値を読み取れます。クエリーは、単一のキーまたはキーの範囲を読み取ることができます。

etcdクラスターに、次のキーが保存されているとします。

foo = bar
foo1 = bar1
foo2 = bar2
foo3 = bar3

キーfooの値を読み取るコマンドは、次のとおりです。

$ etcdctl get foo
foo
bar

キーfooの値を16進数形式で読み取るコマンドは、次のとおりです。

$ etcdctl get foo --hex
\x66\x6f\x6f          # Key
\x62\x61\x72          # Value

キーfooの値だけを読み取るコマンドは、次のとおりです。

$ etcdctl get foo --print-value-only
bar

fooからfoo3までの範囲のキーを取得するコマンドは、次のとおりです。

$ etcdctl get foo foo3
foo
bar
foo1
bar1
foo2
bar2
注記

範囲はfoo3を含まない半開区間[foo, foo3)なので、foo3は除外されます。

fooを接頭辞に持つすべてのキーを取得するコマンドは、次のとおりです。

$ etcdctl get --prefix foo
foo
bar
foo1
bar1
foo2
bar2
foo3
bar3

fooを接頭辞に持つすべてのキーを対象とし、結果を2件までに制限するコマンドは、次のとおりです。

$ etcdctl get --prefix --limit=2 foo
foo
bar
foo1
bar1

RangeStream RPCを使って、fooを接頭辞に持つすべてのキーを取得するコマンドは、次のとおりです。結果は単項のRangeと同じです。

$ etcdctl get --stream --prefix foo
foo
bar
foo1
bar1
foo2
bar2
foo3
bar3

--streamは、--order、--sort-by、リビジョンフィルターをサポートしません。

キーの過去のバージョンの読み取り

アプリケーションは、更新によって古くなったキーのバージョンを読み取りたい場合があります。たとえば、キーの以前のバージョンにアクセスして、古い構成に戻したい場合です。また、キーの履歴にアクセスすることで、複数のリクエストを通じて複数のキーを一貫した状態で読み取りたい場合もあります。 etcdクラスターのキー・バリューストアを変更するたびに、クラスター全体のリビジョンが増加するため、古いetcdリビジョンを指定すれば、過去のキーを読み取れます。

etcdクラスターに、次のキーがすでに存在するとします。

foo = bar         # revision = 2
foo1 = bar1       # revision = 3
foo = bar_new     # revision = 4
foo1 = bar1_new   # revision = 5

キーの過去のバージョンにアクセスする例は、次のとおりです。

$ etcdctl get --prefix foo # access the most recent versions of keys
foo
bar_new
foo1
bar1_new

$ etcdctl get --prefix --rev=4 foo # access the versions of keys at revision 4
foo
bar_new
foo1
bar1

$ etcdctl get --prefix --rev=3 foo # access the versions of keys at revision 3
foo
bar
foo1
bar1

$ etcdctl get --prefix --rev=2 foo # access the versions of keys at revision 2
foo
bar

$ etcdctl get --prefix --rev=1 foo # access the versions of keys at revision 1

指定したキーのバイト値以上のキーの読み取り

アプリケーションは、指定したキーのバイト値以上のキーを読み取りたい場合があります。

etcdクラスターに、次のキーがすでに存在するとします。

a = 123
b = 456
z = 789

キーbのバイト値以上のキーを読み取るコマンドは、次のとおりです。

$ etcdctl get --from-key b
b
456
z
789

キーの削除

アプリケーションは、etcdクラスターから単一のキーまたはキーの範囲を削除できます。

etcdクラスターに、次のキーがすでに存在するとします。

foo = bar
foo1 = bar1
foo3 = bar3
zoo = val
zoo1 = val1
zoo2 = val2
a = 123
b = 456
z = 789

キーfooを削除するコマンドは、次のとおりです。

$ etcdctl del foo
1 # one key is deleted

fooからfoo9までの範囲のキーを削除するコマンドは、次のとおりです。

$ etcdctl del foo foo9
2 # two keys are deleted

キーzooを削除し、削除したキー・バリューペアを返すコマンドは、次のとおりです。

$ etcdctl del --prev-kv zoo
1   # one key is deleted
zoo # deleted key
val # the value of the deleted key

zooを接頭辞に持つキーを削除するコマンドは、次のとおりです。

$ etcdctl del --prefix zoo
2 # two keys are deleted

キーbのバイト値以上のキーを削除するコマンドは、次のとおりです。

$ etcdctl del --from-key b
2 # two keys are deleted

キーの変更の監視

アプリケーションは、単一のキーまたはキーの範囲を監視して、更新を検知できます。

キーfooを監視するコマンドは、次のとおりです。

$ etcdctl watch foo
# in another terminal: etcdctl put foo bar
PUT
foo
bar

キーfooを16進数形式で監視するコマンドは、次のとおりです。

$ etcdctl watch foo --hex
# in another terminal: etcdctl put foo bar
PUT
\x66\x6f\x6f          # Key
\x62\x61\x72          # Value

fooからfoo9までの範囲のキーを監視するコマンドは、次のとおりです。

$ etcdctl watch foo foo9
# in another terminal: etcdctl put foo bar
PUT
foo
bar
# in another terminal: etcdctl put foo1 bar1
PUT
foo1
bar1

fooを接頭辞に持つキーを監視するコマンドは、次のとおりです。

$ etcdctl watch --prefix foo
# in another terminal: etcdctl put foo bar
PUT
foo
bar
# in another terminal: etcdctl put fooz1 barz1
PUT
fooz1
barz1

複数のキーfooとzooを監視するコマンドは、次のとおりです。

$ etcdctl watch -i
$ watch foo
$ watch zoo
# in another terminal: etcdctl put foo bar
PUT
foo
bar
# in another terminal: etcdctl put zoo val
PUT
zoo
val

キーの過去の変更の監視

アプリケーションは、etcd内のキーの過去の変更を監視したい場合があります。たとえば、あるキーのすべての変更を受け取りたい場合、etcdへの接続を維持していればwatchで十分です。しかし、アプリケーションやetcdに障害が起きると、その間に変更が発生しても、アプリケーションは更新をリアルタイムで受信できません。更新の配信を保証するには、アプリケーションがキーの過去の変更を監視できる必要があります。そのためには、キーの過去のバージョンを読み取るときと同様に、監視に過去のリビジョンを指定します。

次の一連の操作を終えたとします。

$ etcdctl put foo bar         # revision = 2
OK
$ etcdctl put foo1 bar1       # revision = 3
OK
$ etcdctl put foo bar_new     # revision = 4
OK
$ etcdctl put foo1 bar1_new   # revision = 5
OK

過去の変更を監視する例は、次のとおりです。

# watch for changes on key `foo` since revision 2
$ etcdctl watch --rev=2 foo
PUT
foo
bar
PUT
foo
bar_new
# watch for changes on key `foo` since revision 3
$ etcdctl watch --rev=3 foo
PUT
foo
bar_new

過去の最後の変更からだけ監視する例は、次のとおりです。

# watch for changes on key `foo` and return last revision value along with modified value
$ etcdctl watch --prev-kv foo
# in another terminal: etcdctl put foo bar_latest
PUT
foo         # key
bar_new     # last value of foo key before modification
foo         # key
bar_latest  # value of foo key after modification

監視の進捗

アプリケーションは、監視ストリームがどの程度最新の状態に追いついているかを判断するために、監視の進捗を確認したい場合があります。たとえば、監視でキャッシュを更新する場合、クォーラム読み取りで得たリビジョンと比べてキャッシュが古いかどうかを把握すると役立ちます。

対話型の監視セッションで"progress"コマンドを使用すると、進捗リクエストを発行し、監視ストリームで進捗通知を送るようetcdサーバーに要求できます。

$ etcdctl watch -i
$ watch a
$ progress
progress notify: 1
# in another terminal: etcdctl put x 0
# in another terminal: etcdctl put y 1
$ progress
progress notify: 3
注記

進捗通知レスポンスのリビジョン番号は、監視ストリームが接続しているローカルのetcdサーバーノードのリビジョンです。このノードがネットワーク分断によってクォーラムから外れている場合、進捗通知のリビジョンは、分断されていないetcdサーバーノードへのクォーラム読み取りで返されるリビジョンより小さいことがあります。

コンパクション済みリビジョン

すでに説明したとおり、etcdはリビジョンを保持し、アプリケーションがキーの過去のバージョンを読み取れるようにします。ただし、履歴が無制限に蓄積するのを防ぐには、過去のリビジョンのコンパクションが重要です。コンパクション後、etcdは過去のリビジョンを削除し、今後の使用のためにリソースを解放します。コンパクションしたリビジョンより前の、更新によって古くなったデータはすべて利用できなくなります。

リビジョンをコンパクションするコマンドは、次のとおりです。

$ etcdctl compact 5
compacted revision 5

# any revisions before the compacted one are not accessible
$ etcdctl get --rev=4 foo
Error:  rpc error: code = 11 desc = etcdserver: mvcc: required revision has been compacted
注記

etcdサーバーの現在のリビジョンは、任意のキー(存在するキーでも、存在しないキーでも)に対してgetコマンドを実行し、json形式で取得できます。以下は、etcdサーバーに存在しないmykeyの例です。

$ etcdctl get mykey -w=json
{"header":{"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":15,"raft_term":4}}

リースの付与

アプリケーションは、etcdクラスターからキー用のリースを取得できます。キーをリースに関連付けると、その有効期間はリースの有効期間に結び付けられます。リースの有効期間は生存時間(TTL)によって決まります。各リースには、アプリケーションが付与時に指定する最小TTLがあります。実際のTTLは最小TTL以上で、etcdクラスターが選択します。リースのTTLが経過すると、リースは期限切れになり、関連付けられたすべてのキーが削除されます。

リースを付与するコマンドは、次のとおりです。

# grant a lease with 60 second TTL
$ etcdctl lease grant 60
lease 32695410dcc0ca06 granted with TTL(60s)

# attach key foo to lease 32695410dcc0ca06
$ etcdctl put --lease=32695410dcc0ca06 foo bar
OK

リースの取り消し

アプリケーションは、リースIDを指定してリースを取り消します。リースを取り消すと、関連付けられたすべてのキーが削除されます。

次の一連の操作を終えたとします。

$ etcdctl lease grant 60
lease 32695410dcc0ca06 granted with TTL(60s)
$ etcdctl put --lease=32695410dcc0ca06 foo bar
OK

このリースを取り消すコマンドは、次のとおりです。

$ etcdctl lease revoke 32695410dcc0ca06
lease 32695410dcc0ca06 revoked

$ etcdctl get foo
# empty response since foo is deleted due to lease revocation

リースの維持

アプリケーションは、TTLを更新することでリースの期限切れを防ぎ、維持できます。

次の一連の操作を終えたとします。

$ etcdctl lease grant 60
lease 32695410dcc0ca06 granted with TTL(60s)

このリースを維持するコマンドは、次のとおりです。

$ etcdctl lease keep-alive 32695410dcc0ca06
lease 32695410dcc0ca06 keepalived with TTL(60)
lease 32695410dcc0ca06 keepalived with TTL(60)
lease 32695410dcc0ca06 keepalived with TTL(60)
...

リース情報の取得

アプリケーションは、リースを更新するため、またはリースがまだ存在するか、期限切れになったかを確認するために、リース情報を取得したい場合があります。また、特定のリースに関連付けられているキーを確認したい場合もあります。

次の一連の操作を終えたとします。

# grant a lease with 500 second TTL
$ etcdctl lease grant 500
lease 694d5765fc71500b granted with TTL(500s)

# attach key zoo1 to lease 694d5765fc71500b
$ etcdctl put zoo1 val1 --lease=694d5765fc71500b
OK

# attach key zoo2 to lease 694d5765fc71500b
$ etcdctl put zoo2 val2 --lease=694d5765fc71500b
OK

リース情報を取得するコマンドは、次のとおりです。

$ etcdctl lease timetolive 694d5765fc71500b
lease 694d5765fc71500b granted with TTL(500s), remaining(258s)

リースに関連付けられたキーとともにリース情報を取得するコマンドは、次のとおりです。

$ etcdctl lease timetolive --keys 694d5765fc71500b
lease 694d5765fc71500b granted with TTL(500s), remaining(132s), attached keys([zoo2 zoo1])

# if the lease has expired or does not exist it will give the below response:
Error:  etcdserver: requested lease not found

4 - gRPCゲートウェイを使う理由

gRPCゲートウェイの使用を検討する理由

etcd v3は、メッセージングプロトコルにgRPC を使用します。etcdプロジェクトは、gRPCでetcdクラスターと通信するための、gRPCベースのGoクライアント とコマンドラインユーティリティーetcdctl を提供しています。gRPCをサポートしない言語向けには、JSONのgRPCゲートウェイ を提供しています。このゲートウェイはRESTfulなプロキシとして動作し、HTTP/JSONリクエストをgRPCメッセージに変換します。

gRPCゲートウェイの使用

ゲートウェイは、etcdのProtocol Buffers メッセージ定義のJSONマッピング を受け付けます。keyとvalueフィールドはバイト配列として定義されているため、JSONではbase64でエンコードする必要があります。以下の例ではcurlを使いますが、どのHTTP/JSONクライアントでも同様に動作するはずです。

注意事項

gRPCゲートウェイのエンドポイントは、etcd v3.3以降で変更されています。

  • etcd v3.2以前は、[CLIENT-URL]/v3alpha/*だけを使用します。
  • etcd v3.3は、[CLIENT-URL]/v3alpha/*を維持しつつ、[CLIENT-URL]/v3beta/*を使用します。
  • etcd v3.4は、[CLIENT-URL]/v3beta/*を維持しつつ、[CLIENT-URL]/v3/*を使用します。
    • [CLIENT-URL]/v3alpha/*は非推奨です。
  • etcd v3.5以降は、[CLIENT-URL]/v3/*だけを使用します。
    • [CLIENT-URL]/v3beta/*は非推奨です。

gRPC-gatewayは、TLSのCommon Nameを使った認証をサポートしていません。

キーの書き込みと取得

/v3/kv/rangeと/v3/kv/putサービスで、キーを読み書きします。

<<COMMENT
https://www.base64encode.org/
foo is 'Zm9v' in Base64
bar is 'YmFy'
COMMENT

curl -L http://localhost:2379/v3/kv/put \
  -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"3"}}

curl -L http://localhost:2379/v3/kv/range \
  -X POST -d '{"key": "Zm9v"}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"3"},"kvs":[{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}],"count":"1"}

# get all keys prefixed with "foo"
curl -L http://localhost:2379/v3/kv/range \
  -X POST -d '{"key": "Zm9v", "range_end": "Zm9w"}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"3"},"kvs":[{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}],"count":"1"}

キーの監視

/v3/watchサービスで、キーを監視します。

curl -N http://localhost:2379/v3/watch \
  -X POST -d '{"create_request": {"key":"Zm9v"} }' &
# {"result":{"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"1","raft_term":"2"},"created":true}}

curl -L http://localhost:2379/v3/kv/put \
  -X POST -d '{"key": "Zm9v", "value": "YmFy"}' >/dev/null 2>&1
# {"result":{"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"2"},"events":[{"kv":{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}}]}}

トランザクション

/v3/kv/txnで、トランザクションを発行します。

# target CREATE
curl -L http://localhost:2379/v3/kv/txn \
  -X POST \
  -d '{"compare":[{"target":"CREATE","key":"Zm9v","createRevision":"2"}],"success":[{"requestPut":{"key":"Zm9v","value":"YmFy"}}]}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"3","raft_term":"2"},"succeeded":true,"responses":[{"response_put":{"header":{"revision":"3"}}}]}
# target VERSION
curl -L http://localhost:2379/v3/kv/txn \
  -X POST \
  -d '{"compare":[{"version":"4","result":"EQUAL","target":"VERSION","key":"Zm9v"}],"success":[{"requestRange":{"key":"Zm9v"}}]}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"6","raft_term":"3"},"succeeded":true,"responses":[{"response_range":{"header":{"revision":"6"},"kvs":[{"key":"Zm9v","create_revision":"2","mod_revision":"6","version":"4","value":"YmF6"}],"count":"1"}}]}

認証

/v3/authサービスで、認証を設定します。

# create root user
curl -L http://localhost:2379/v3/auth/user/add \
  -X POST -d '{"name": "root", "password": "pass"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}

# create root role
curl -L http://localhost:2379/v3/auth/role/add \
  -X POST -d '{"name": "root"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}

# grant root role
curl -L http://localhost:2379/v3/auth/user/grant \
  -X POST -d '{"user": "root", "role": "root"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}

# enable auth
curl -L http://localhost:2379/v3/auth/enable -X POST -d '{}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}

/v3/auth/authenticateでetcdの認証を行い、認証トークンを取得します。

# get the auth token for the root user
curl -L http://localhost:2379/v3/auth/authenticate \
  -X POST -d '{"name": "root", "password": "pass"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"},"token":"sssvIpwfnLAcWAQH.9"}

認証情報を使ってキーを取得するには、Authorizationヘッダーに認証トークンを設定します。

curl -L http://localhost:2379/v3/kv/put \
  -H 'Authorization: sssvIpwfnLAcWAQH.9' \
  -X POST -d '{"key": "Zm9v", "value": "YmFy"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"2","raft_term":"2"}}

エラーレスポンス

gRPCゲートウェイは、gRPCのステータスをHTTPステータスコードとJSONのエラー本文に変換します。 etcd v3.6以降は、grpc-gateway v2へのアップグレードによってエラー処理が変わりました (v2移行ガイドのエラー処理に関する注意事項 を参照)。 現在のゲートウェイの動作は、GoogleのAPIエラーモデル で説明されている google.rpc.Status(code、message、details)に沿っています。 以前のgrpc-gatewayにはトップレベルのerrorフィールドも含まれていましたが、 etcd v3.6以降では、このフィールドはサポートされていません。

クライアントは、HTTPステータスコードを成功・失敗の主な判断材料として扱ってください。 リクエストが失敗した場合は、messageフィールドをエラー情報の主な情報源とし、 追加の詳細情報から、さらに詳しい状況を読み取ることを推奨します。

Swagger

生成されたSwagger API定義は、rpc.swagger.json にあります。

5 - gRPCの名前解決と検出

go-grpc:etcdをバックエンドとしてgRPCエンドポイントを解決する

etcdは、etcdからエンドポイントを取得してgRPCサービスを検出する代替の名前システムを、gRPCリゾルバーで提供します。その仕組みは、サービス名を接頭辞に持つキーの更新の監視に基づいています。

この機能は、grpc-goでまだ実験的なgoogle.golang.org/grpc/resolver パッケージに依存しているため、実験的機能です。

go-grpcでetcdの検出機能を使う

etcdクライアントは、etcdをバックエンドとしてgRPCエンドポイントを解決するgRPCリゾルバーを提供します。リゾルバーはetcdクライアントで初期化します。

import (
	clientv3 "go.etcd.io/etcd/client/v3"
	etcdnaming "go.etcd.io/etcd/client/v3/naming/resolver"

	"google.golang.org/grpc"
)

...

cli, err := clientv3.NewFromURL("http://localhost:2379")
if err != nil {
    // ...
}
r, err := etcdnaming.NewBuilder(cli)
if err != nil {
    // ...
}
conn, gerr := grpc.NewClient("my-service", grpc.WithResolvers(r), ...)

サービスエンドポイントの管理

etcdリゾルバーは、解決対象に"/“を付けた接頭辞(例:“foo/bar/my-service/")の下にあるすべてのキーのうち、 JSONでエンコードされた値(従来はgo-grpcのnaming.Update)を持つものを、サービスエンドポイントの候補として扱います。 新しいキーを作成するとエンドポイントがサービスに追加され、キーを削除するとサービスから削除されます。

エンドポイントの追加

etcdctlで新しいエンドポイントをサービスに追加できます。

ETCDCTL_API=3 etcdctl put foo/bar/my-service/1.2.3.4 '{"Addr":"1.2.3.4"}'

etcdクライアントのendpoints.Managerメソッドでも、Addrに対応するキーを使って新しいエンドポイントを登録できます。


em := endpoints.NewManager(client, "foo/bar/my-service")
err := em.AddEndpoint(context.TODO(),"foo/bar/my-service/e1", endpoints.Endpoint{Addr:"1.2.3.4"})

複数のエンドポイントを持つサービスへの接続時にラウンドロビン負荷分散を有効にするには、grpc内蔵の ラウンドロビンロードバランサーを使用するように接続を設定します。


conn, gerr := grpc.NewClient("etcd:///foo", grpc.WithResolvers(etcdResolver),
grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`))

エンドポイントの削除

etcdctlでホストをサービスから削除できます。

ETCDCTL_API=3 etcdctl del foo/bar/my-service/1.2.3.4

etcdクライアントのendpoints.Managerメソッドでも、エンドポイントを削除できます。

em := endpoints.NewManager(client, "foo/bar/my-service")
err := em.DeleteEndpoint(context.TODO(), "foo/bar/my-service/e1")

リース付きのエンドポイント登録

リース付きでエンドポイントを登録すると、ホストがキープアライブのハートビートを維持できなくなった場合(マシンの故障など)に、そのホストがサービスから確実に削除されます。

lease=`ETCDCTL_API=3 etcdctl lease grant 5 | cut -f2 -d' '`
ETCDCTL_API=3 etcdctl put --lease=$lease my-service/1.2.3.4 '{"Addr":"1.2.3.4"}'
ETCDCTL_API=3 etcdctl lease keep-alive $lease

Goでは、次のように記述します。

em := endpoints.NewManager(client, "foo/bar/my-service")
err := em.AddEndpoint(context.TODO(), "foo/bar/my-service/e1", endpoints.Endpoint{Addr:"1.2.3.4"})

エンドポイントのアトミックな更新

1つのトランザクションで複数のエンドポイントを変更するには、endpoints.Managerを直接使用できます。

em := endpoints.NewManager(c, "foo")

err := em.Update(context.TODO(), []*endpoints.UpdateWithOpts{
    endpoints.NewDeleteUpdateOpts("foo/bar/my-service/e1", endpoints.Endpoint{Addr: "1.2.3.4"}),
	endpoints.NewAddUpdateOpts("foo/bar/my-service/e1", endpoints.Endpoint{Addr: "1.2.3.14"})})

6 - Goアプリケーションへのetcdの組み込み

etcdのGoパッケージembedを使用して、アプリケーション内でetcdサーバーを実行する

etcdのGoパッケージembedを使用すると、etcdサーバーをアプリケーションに直接、簡単に組み込めます。

詳細はembedパッケージのドキュメント を参照してください。

7 - システムの制限

etcdの制限:リクエストとストレージ

リクエストサイズの上限

etcdは、メタデータで一般的な小さなキー・バリューペアを処理するように設計されています。大きなリクエストも処理できますが、他のリクエストのレイテンシーが増加する可能性があります。デフォルトでは、各リクエストの最大サイズは1.5 MiBです。この上限は、etcdサーバーの--max-request-bytesフラグで設定できます。

ストレージサイズの上限

ストレージサイズのデフォルトの上限は2 GiBで、--quota-backend-bytesフラグで設定できます。通常の環境で推奨される最大サイズは8 GiBです。設定値がこのサイズを超えると、etcdは起動時に警告を出します。

8 - etcdの機能

etcdの機能の使用

このドキュメントでは、etcdの機能と、それに関連する非推奨化の手続きを理解できるよう、機能の概要を説明します。etcdで機能を開発する方法については、開発ガイドライン を参照してください。

etcdの機能には、「実験的」「安定」「安全でない」の3つの段階があります。etcd --helpを実行すると、機能の一覧を確認できます。

実験的

早期にフィードバックを得るため、新機能は通常、実験的機能として追加されます。実験的機能はフラグ名で識別でき、その名前には--experimentalという接頭辞が付くはずです。実験的機能を使うときは、次の点を考慮してください。

  • ユーザーによるテストが不足しているため、バグが残っている可能性があります。有効にしても、期待どおりに動作しない場合があります。
  • デフォルトでは無効です。
  • 予告なく、いつでもサポートが打ち切られる可能性があります。
    • 安定した機能に昇格しない限り、機能の非推奨化 ポリシーに従わず、次のマイナーリリースまたはメジャーリリースで削除されることがあります。
    • プロジェクトチームは、実験的機能に関する問題の報告を歓迎します。ただし、安定した機能の問題より優先順位が低くなる場合があります。
  • 実験的機能が安定した段階に昇格すると、その機能フラグは非推奨になります 。できるだけ早く、安定した機能のフラグに切り替えてください。

安定

etcdの機能で最も一般的な段階です。安定した機能には、次の特徴があります。

  • サポート対象のetcdリリースの一部としてサポートされます。
  • デフォルトで有効になっている場合があります。
  • サポートを終了する際は、機能の非推奨化 ポリシーに従う必要があります。

安全でない

安全でない機能は少数で、etcdの使用法ドキュメントのUnsafe feature:セクションに記載されています。デフォルトでは無効です。ドキュメントに従い、慎重に使用してください。安全でない機能は、機能の非推奨化ポリシーに従わず、次のマイナーリリースまたはメジャーリリースで削除されることがあります。

機能の非推奨化

実験的

実験的機能は、安定した段階に昇格すると非推奨になります。

  • 実験的機能のドキュメントには、関連する安定した機能のフラグを使うよう推奨する非推奨メッセージが表示されます。例:DEPRECATED. Use <feature-name> instead.
  • 非推奨になった機能は、次のリリースで削除されます。

安定

プロジェクトの発展に伴い、安定した機能を非推奨にして削除する必要が生じることがあります。その場合は、次のように対応します。

  • 非推奨化を予定しているリリースの前に、機能のドキュメントに警告メッセージを表示します。例:To be deprecated in <release>.。To be deprecatedとされた機能を置き換える新機能がすでに計画されている場合は、その旨もドキュメントに記載します。例:Use <feature-name> instead.。
  • 予定されたリリースで機能を非推奨にします。この時点で、機能のドキュメントには、関連する安定した機能を使うよう推奨する非推奨メッセージが表示されます。例:DEPRECATED. Use <feature-name> instead.
  • 非推奨になった機能は、次のリリースで削除されます。

9 - APIリファレンス

etcd v3 APIの完全なリファレンス

このAPIリファレンスは、各見出しに記載した.protoファイルから自動生成されています。

サービス Auth (api/etcdserverpb/rpc.proto)
メソッド リクエスト型 レスポンス型 説明
AuthEnable AuthEnableRequest AuthEnableResponse AuthEnableは認証を有効にします。
AuthDisable AuthDisableRequest AuthDisableResponse AuthDisableは認証を無効にします。
AuthStatus AuthStatusRequest AuthStatusResponse AuthStatusは認証の状態を表示します。
Authenticate AuthenticateRequest AuthenticateResponse Authenticateは認証リクエストを処理します。
UserAdd AuthUserAddRequest AuthUserAddResponse UserAddは新しいユーザーを追加します。ユーザー名は空にできません。
UserGet AuthUserGetRequest AuthUserGetResponse UserGetはユーザーの詳細情報を取得します。
UserList AuthUserListRequest AuthUserListResponse UserListはすべてのユーザーの一覧を取得します。
UserDelete AuthUserDeleteRequest AuthUserDeleteResponse UserDeleteは指定したユーザーを削除します。
UserChangePassword AuthUserChangePasswordRequest AuthUserChangePasswordResponse UserChangePasswordは指定したユーザーのパスワードを変更します。
UserGrantRole AuthUserGrantRoleRequest AuthUserGrantRoleResponse UserGrantRoleは指定したユーザーにロールを付与します。
UserRevokeRole AuthUserRevokeRoleRequest AuthUserRevokeRoleResponse UserRevokeRoleは指定したユーザーからロールを取り消します。
RoleAdd AuthRoleAddRequest AuthRoleAddResponse RoleAddは新しいロールを追加します。ロール名は空にできません。
RoleGet AuthRoleGetRequest AuthRoleGetResponse RoleGetはロールの詳細情報を取得します。
RoleList AuthRoleListRequest AuthRoleListResponse RoleListはすべてのロールの一覧を取得します。
RoleDelete AuthRoleDeleteRequest AuthRoleDeleteResponse RoleDeleteは指定したロールを削除します。
RoleGrantPermission AuthRoleGrantPermissionRequest AuthRoleGrantPermissionResponse RoleGrantPermissionは、指定したキーまたは範囲に対する権限を、指定したロールに付与します。
RoleRevokePermission AuthRoleRevokePermissionRequest AuthRoleRevokePermissionResponse RoleRevokePermissionは、指定したロールからキーまたは範囲に対する権限を取り消します。
サービス Cluster (api/etcdserverpb/rpc.proto)
メソッド リクエスト型 レスポンス型 説明
MemberAdd MemberAddRequest MemberAddResponse MemberAddはクラスターにメンバーを追加します。
MemberRemove MemberRemoveRequest MemberRemoveResponse MemberRemoveはクラスターから既存のメンバーを削除します。
MemberUpdate MemberUpdateRequest MemberUpdateResponse MemberUpdateはメンバーの構成を更新します。
MemberList MemberListRequest MemberListResponse MemberListはクラスター内のすべてのメンバーを一覧表示します。
MemberPromote MemberPromoteRequest MemberPromoteResponse MemberPromoteは、Raftの学習者メンバー(投票権なし)を、Raftの投票メンバーに昇格させます。
サービス KV (api/etcdserverpb/rpc.proto)
メソッド リクエスト型 レスポンス型 説明
Range RangeRequest RangeResponse Rangeはキー・バリューストアから範囲内のキーを取得します。
Put PutRequest PutResponse Putは指定したキーをキー・バリューストアに格納します。putリクエストはキー・バリューストアのリビジョンを増加させ、イベント履歴に1つのイベントを生成します。
DeleteRange DeleteRangeRequest DeleteRangeResponse DeleteRangeはキー・バリューストアから指定した範囲を削除します。deleteリクエストはキー・バリューストアのリビジョンを増加させ、削除したキーごとにイベント履歴に削除イベントを生成します。
Txn TxnRequest TxnResponse Txnは1つのトランザクション内で複数のリクエストを処理します。txnリクエストはキー・バリューストアのリビジョンを増加させ、完了したリクエストごとに、同じリビジョンを持つイベントを生成します。1つのtxn内で同じキーを複数回変更することはできません。
Compact CompactionRequest CompactionResponse Compactは、etcdキー・バリューストアのイベント履歴をコンパクションします。キー・バリューストアは定期的にコンパクションすることを推奨します。そうしないと、イベント履歴は無制限に増え続けます。
サービス Lease (api/etcdserverpb/rpc.proto)
メソッド リクエスト型 レスポンス型 説明
LeaseGrant LeaseGrantRequest LeaseGrantResponse LeaseGrantは、指定した生存時間内にサーバーがkeepAliveを受信しないと期限切れになるリースを作成します。リースが期限切れになると、それに関連付けられたすべてのキーも期限切れになり、削除されます。期限切れになった各キーは、イベント履歴に削除イベントを生成します。
LeaseRevoke LeaseRevokeRequest LeaseRevokeResponse LeaseRevokeはリースを取り消します。リースに関連付けられたすべてのキーは期限切れになり、削除されます。
LeaseKeepAlive LeaseKeepAliveRequest LeaseKeepAliveResponse LeaseKeepAliveは、クライアントからサーバーへキープアライブリクエストをストリーミングし、サーバーからクライアントへキープアライブレスポンスをストリーミングすることで、リースを維持します。
LeaseTimeToLive LeaseTimeToLiveRequest LeaseTimeToLiveResponse LeaseTimeToLiveはリース情報を取得します。
LeaseLeases LeaseLeasesRequest LeaseLeasesResponse LeaseLeasesは既存のすべてのリースを一覧表示します。
サービス Maintenance (api/etcdserverpb/rpc.proto)
メソッド リクエスト型 レスポンス型 説明
Alarm AlarmRequest AlarmResponse Alarmは、クラスターの健全性に関するアラームの有効化、解除、照会を行います。
Status StatusRequest StatusResponse Statusはメンバーの状態を取得します。
Defragment DefragmentRequest DefragmentResponse Defragmentは、メンバーのバックエンドデータベースをデフラグメンテーションして、ストレージ領域を回収します。
Hash HashRequest HashResponse Hashは、ストレージ内のkey、lease、その他のバケットを含む、バックエンドのキー空間全体のハッシュを計算します。これはテスト専用です!Hash操作はMVCCロックを保持しないため、トランザクションが進行している本番環境では、この操作に依存しないでください。“key"バケットの整合性チェックには、代わりに"HashKV” APIを使用してください。
HashKV HashKVRequest HashKVResponse HashKVは、指定したリビジョンまでのすべてのMVCCキーのハッシュを計算します。バックエンドストレージの"key"バケットだけを走査します。
Snapshot SnapshotRequest SnapshotResponse Snapshotは、バックエンド全体のスナップショットを、メンバーからクライアントへストリームで送信します。
MoveLeader MoveLeaderRequest MoveLeaderResponse MoveLeaderは、現在のリーダーノードに対し、移譲先へリーダーシップを移すよう要求します。
Downgrade DowngradeRequest DowngradeResponse Downgradeは、クラスターのバージョンのダウングレードの要求、実行可能性の検証、またはダウングレードの取り消しを行います。etcd 3.5以降でサポートされています。
サービス Watch (api/etcdserverpb/rpc.proto)
メソッド リクエスト型 レスポンス型 説明
Watch WatchRequest WatchResponse Watchは、現在または過去に発生したイベントを監視します。入力と出力はどちらもストリームです。入力ストリームはウォッチャーの作成とキャンセルに使用し、出力ストリームはイベントを送信します。1つのwatch RPCで複数のキー範囲を監視し、複数の監視のイベントを同時にストリーミングできます。最後のコンパクションリビジョン以降のイベント履歴全体を監視できます。
メッセージ AlarmMember (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
memberID memberIDは、発報されたアラームに関連付けられたメンバーのIDです。 uint64
alarm alarmは、発報されたアラームの種類です。 AlarmType
メッセージ AlarmRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
action actionは、発行するアラームリクエストの種類です。アクションには、アラーム状態のGET、アラームのACTIVATE、発報済みアラームのDEACTIVATEがあります。 AlarmAction
memberID memberIDは、アラームに関連付けられたメンバーのIDです。memberIDが0の場合、アラームリクエストはすべてのメンバーを対象とします。 uint64
alarm alarmは、このリクエストで対象とするアラームの種類です。 AlarmType
メッセージ AlarmResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
alarms alarmsは、アラームリクエストに関連付けられたアラームの一覧です。 (slice of) AlarmMember
メッセージ AuthDisableRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ AuthDisableResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthEnableRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ AuthEnableResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthRoleAddRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name nameは、認証システムに追加するロールの名前です。 string
メッセージ AuthRoleAddResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthRoleDeleteRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
role string
メッセージ AuthRoleDeleteResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthRoleGetRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
role string
メッセージ AuthRoleGetResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
header ResponseHeader
perm (slice of) authpb.Permission
メッセージ AuthRoleGrantPermissionRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name nameは、権限を付与するロールの名前です。 string
perm permは、ロールに付与する権限です。 authpb.Permission
メッセージ AuthRoleGrantPermissionResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthRoleListRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ AuthRoleListResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
roles (slice of) string
メッセージ AuthRoleRevokePermissionRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
role string
key bytes
range_end bytes
メッセージ AuthRoleRevokePermissionResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthStatusRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ AuthStatusResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
enabled bool
authRevision authRevisionは、認証ストアの現在のリビジョンです。 uint64
メッセージ AuthUserAddRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name string
password string
options authpb.UserAddOptions
hashedPassword string
メッセージ AuthUserAddResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthUserChangePasswordRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name nameは、パスワードを変更するユーザーの名前です。 string
password passwordは、ユーザーの新しいパスワードです。このフィールドはAPIレイヤーで削除されることに注意してください。 string
hashedPassword hashedPasswordは、ユーザーの新しいパスワードのハッシュ値です。このフィールドはAPIレイヤーで初期化されることに注意してください。 string
メッセージ AuthUserChangePasswordResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthUserDeleteRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name nameは、削除するユーザーの名前です。 string
メッセージ AuthUserDeleteResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthUserGetRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name string
メッセージ AuthUserGetResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
roles (slice of) string
メッセージ AuthUserGrantRoleRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
user userは、指定したロールを付与するユーザーの名前です。 string
role roleは、ユーザーに付与するロールの名前です。 string
メッセージ AuthUserGrantRoleResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthUserListRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ AuthUserListResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
users (slice of) string
メッセージ AuthUserRevokeRoleRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name string
role string
メッセージ AuthUserRevokeRoleResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ AuthenticateRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
name string
password string
メッセージ AuthenticateResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
token tokenは、後続のRPCで使用できる認可済みトークンです。 string
メッセージ CompactionRequest (api/etcdserverpb/rpc.proto)

CompactionRequestは、指定したリビジョンまでのキー・バリューストアをコンパクションします。コンパクションリビジョンより小さいリビジョンを持つ、更新によって古くなったキーはすべて削除されます。

フィールド 説明 型
(versionpb.etcd_version_msg) option
revision revisionは、コンパクション操作の対象となるキー・バリューストアのリビジョンです。 int64
physical physicalを設定すると、RPCはコンパクションがローカルデータベースに物理的に適用され、対象のエントリーがバックエンドデータベースから完全に削除されるまで待機します。 bool
メッセージ CompactionResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ Compare (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
result resultは、この比較で使用する論理比較演算です。 CompareResult
target targetは、比較のために調べるキー・バリューのフィールドです。 CompareTarget
key keyは、比較操作の対象となるキーです。 bytes
target_union oneof
version versionは、指定したキーのバージョンです。 int64
create_revision create_revisionは、指定したキーの作成リビジョンです。 int64
mod_revision mod_revisionは、指定したキーの最終変更リビジョンです。 int64
value valueは、指定したキーの値をバイト列で表したものです。 bytes
lease leaseは、指定したキーのリースIDです。 int64
range_end range_endは、指定したtargetを範囲[key, range_end)内のすべてのキーと比較します。キー範囲の詳細はRangeRequestを参照してください。 bytes
メッセージ DefragmentRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ DefragmentResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ DeleteRangeRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
key keyは、範囲内で削除する最初のキーです。 bytes
range_end range_endは、範囲[key, range_end)内で削除する最後のキーの次のキーです。range_endが指定されていない場合、範囲にはkey引数だけが含まれます。range_endが指定したキーに1を加えた値の場合、範囲にはそのキーを接頭辞に持つすべてのキーが含まれます。range_endが’\0’の場合、範囲にはkey引数以上のすべてのキーが含まれます。 bytes
prev_kv prev_kvが設定されている場合、etcdは削除前のキー・バリューペアを取得します。削除前のキー・バリューペアはdeleteレスポンスで返されます。 bool
メッセージ DeleteRangeResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
deleted deletedは、範囲削除リクエストによって削除されたキーの数です。 int64
prev_kvs リクエストにprev_kvが設定されている場合、削除前のキー・バリューペアが返されます。 (slice of) mvccpb.KeyValue
メッセージ DowngradeInfo (api/etcdserverpb/rpc.proto)
フィールド 説明 型
enabled enabledは、クラスターのダウングレードが有効になっているかどうかを示します。 bool
targetVersion targetVersionは、ダウングレード先のバージョンです。 string
メッセージ DowngradeRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
action actionは、発行するダウングレードリクエストの種類です。アクションには、対象バージョンのVALIDATE、クラスターバージョンのDOWNGRADE、現在のダウングレードジョブのCANCELがあります。 DowngradeAction
version versionは、ダウングレード先のバージョンです。 string
メッセージ DowngradeResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
version versionは、クラスターの現在のバージョンです。 string
メッセージ DowngradeVersionTestRequest (api/etcdserverpb/rpc.proto)

DowngradeVersionTestRequestは、テスト専用です。このリクエストのversionは、WALレコードのバージョンとして読み取られます。ダウングレード先のバージョンがこのバージョンより小さい場合、オンラインのダウングレードやオフラインの移行は安全ではないため、許可すべきではありません。

フィールド 説明 型
(versionpb.etcd_version_msg) option
ver string
メッセージ HashKVRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
revision revisionは、ハッシュ操作の対象となるキー・バリューストアのリビジョンです。 int64
メッセージ HashKVResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
hash hashは、応答するメンバーのMVCCキーから、指定したリビジョンまでを対象として計算したハッシュ値です。 uint32
compact_revision compact_revisionは、ハッシュ計算の開始時点でコンパクションされていたキー・バリューストアのリビジョンです。 int64
hash_revision hash_revisionは、ハッシュ計算の対象とする上限のリビジョンです。 int64
メッセージ HashRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ HashResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
hash hashは、応答するメンバーのKVバックエンドから計算したハッシュ値です。 uint32
メッセージ LeaseCheckpoint (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、チェックポイントを作成するリースのIDです。 int64
remaining_TTL Remaining_TTLは、リースの有効期限までの残り時間です。 int64
メッセージ LeaseCheckpointRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
checkpoints (slice of) LeaseCheckpoint
メッセージ LeaseCheckpointResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ LeaseGrantRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
TTL TTLは、秒単位の希望する生存時間です。期限切れのリースでは-1が返されます。 int64
ID IDは、リースに要求するIDです。IDが0の場合、リースの貸し手がIDを選択します。 int64
メッセージ LeaseGrantResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
ID IDは、付与されたリースのIDです。 int64
TTL TTLは、サーバーが選択した、秒単位のリースの生存時間です。 int64
error string
メッセージ LeaseKeepAliveRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、維持するリースのIDです。 int64
メッセージ LeaseKeepAliveResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
ID IDは、キープアライブリクエストのリースIDです。 int64
TTL TTLは、リースの新しい生存時間です。 int64
メッセージ LeaseLeasesRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ LeaseLeasesResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
leases (slice of) LeaseStatus
メッセージ LeaseRevokeRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、取り消すリースのIDです。そのIDが取り消されると、関連付けられたすべてのキーが削除されます。 int64
メッセージ LeaseRevokeResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ LeaseStatus (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID int64
メッセージ LeaseTimeToLiveRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、そのリースのIDです。 int64
keys keysをtrueにすると、このリースに関連付けられたすべてのキーを照会します。 bool
メッセージ LeaseTimeToLiveResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
ID IDは、キープアライブリクエストのリースIDです。 int64
TTL TTLは、秒単位のリースの残りTTLです。リースはTTL+1秒未満で期限切れになります。 int64
grantedTTL GrantedTTLは、リースの作成時または更新時に最初に付与された、秒単位の時間です。 int64
keys Keysは、このリースに関連付けられたキーの一覧です。 (slice of) bytes
メッセージ Member (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、このメンバーのメンバーIDです。 uint64
name nameは、人が読めるメンバー名です。メンバーが起動していない場合、名前は空文字列になります。 string
peerURLs peerURLsは、クラスターとの通信用にメンバーが公開するURLの一覧です。 (slice of) string
clientURLs clientURLsは、クライアントとの通信用にメンバーが公開するURLの一覧です。メンバーが起動していない場合、clientURLsは空になります。 (slice of) string
isLearner isLearnerは、そのメンバーがRaftの学習者メンバーかどうかを示します。 bool
メッセージ MemberAddRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
peerURLs peerURLsは、追加するメンバーがクラスターとの通信に使用するURLの一覧です。 (slice of) string
isLearner isLearnerは、追加するメンバーがRaftの学習者メンバーかどうかを示します。 bool
メッセージ MemberAddResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
member memberは、追加したメンバーの情報です。 Member
members membersは、新しいメンバーを追加した後の、すべてのメンバーの一覧です。 (slice of) Member
メッセージ MemberListRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
linearizable bool
メッセージ MemberListResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
members membersは、クラスターに関連付けられたすべてのメンバーの一覧です。 (slice of) Member
メッセージ MemberPromoteRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、昇格させるメンバーのメンバーIDです。 uint64
メッセージ MemberPromoteResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
members membersは、メンバーを昇格させた後の、すべてのメンバーの一覧です。 (slice of) Member
メッセージ MemberRemoveRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、削除するメンバーのメンバーIDです。 uint64
メッセージ MemberRemoveResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
members membersは、メンバーを削除した後の、すべてのメンバーの一覧です。 (slice of) Member
メッセージ MemberUpdateRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
ID IDは、更新するメンバーのメンバーIDです。 uint64
peerURLs peerURLsは、メンバーがクラスターとの通信に使用する、新しいURLの一覧です。 (slice of) string
メッセージ MemberUpdateResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
members membersは、メンバーを更新した後の、すべてのメンバーの一覧です。 (slice of) Member
メッセージ MoveLeaderRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
targetID targetIDは、新しいリーダーのノードIDです。 uint64
メッセージ MoveLeaderResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
メッセージ PutRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
key keyは、キー・バリューストアに格納するキーをバイト列で表したものです。 bytes
value valueは、キー・バリューストア内のキーに関連付ける値をバイト列で表したものです。 bytes
lease leaseは、キー・バリューストア内のキーに関連付けるリースIDです。leaseが0の場合、リースがないことを示します。 int64
prev_kv prev_kvが設定されている場合、etcdは変更前のキー・バリューペアを取得します。変更前のキー・バリューペアはputレスポンスで返されます。 bool
ignore_value ignore_valueが設定されている場合、etcdは現在の値を使ってキーを更新します。キーが存在しない場合はエラーを返します。 bool
ignore_lease ignore_leaseが設定されている場合、etcdは現在のリースを使ってキーを更新します。キーが存在しない場合はエラーを返します。 bool
メッセージ PutResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
prev_kv リクエストにprev_kvが設定されている場合、変更前のキー・バリューペアが返されます。 mvccpb.KeyValue
メッセージ RangeRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
key keyは、範囲の最初のキーです。range_endが指定されていない場合、リクエストはkeyだけを検索します。 bytes
range_end range_endは、要求した範囲[key, range_end)の上限です。range_endが’\0’の場合、範囲にはkey以上(>=)のすべてのキーが含まれます。range_endがkeyに1を加えたもの(例:“aa”+1 == “ab”、“a\xff”+1 == “b”)の場合、範囲リクエストはkeyを接頭辞に持つすべてのキーを取得します。keyとrange_endの両方が’\0’の場合、範囲リクエストはすべてのキーを返します。 bytes
limit limitは、リクエストで返すキーの数の上限です。limitが0の場合、上限なしとして扱います。 int64
revision revisionは、範囲の取得に使用するキー・バリューストアの時点です。revisionが0以下の場合、最新のキー・バリューストアを対象とします。そのリビジョンがすでにコンパクションされている場合、レスポンスとしてErrCompactedを返します。 int64
sort_order sort_orderは、ソートして返す結果の順序です。 SortOrder
sort_target sort_targetは、ソートに使用するキー・バリューのフィールドです。 SortTarget
serializable serializableは、範囲リクエストでメンバーローカルの直列化可能読み取りを使用するよう設定します。範囲リクエストはデフォルトで線形化可能です。線形化可能なリクエストは、直列化可能なリクエストよりレイテンシーが高く、スループットが低くなりますが、クラスターの現在のコンセンサスを反映します。性能を高めるため、直列化可能な範囲リクエストは、古いデータを読み取る可能性と引き換えに、クラスター内の他のノードとのコンセンサスを必要とせず、ローカルに処理されます。 bool
keys_only keys_onlyが設定されている場合、値は返さず、キーだけを返します。 bool
count_only count_onlyが設定されている場合、範囲内のキーの数だけを返します。 bool
min_mod_revision min_mod_revisionは、返すキーの変更リビジョンの下限です。変更リビジョンがこれより小さいキーはすべて除外されます。 int64
max_mod_revision max_mod_revisionは、返すキーの変更リビジョンの上限です。変更リビジョンがこれより大きいキーはすべて除外されます。 int64
min_create_revision min_create_revisionは、返すキーの作成リビジョンの下限です。作成リビジョンがこれより小さいキーはすべて除外されます。 int64
max_create_revision max_create_revisionは、返すキーの作成リビジョンの上限です。作成リビジョンがこれより大きいキーはすべて除外されます。 int64
メッセージ RangeResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
kvs kvsは、範囲リクエストに一致するキー・バリューペアの一覧です。件数を要求した場合、kvsは空になります。 (slice of) mvccpb.KeyValue
more moreは、要求した範囲内に、返すべきキーがまだあるかどうかを示します。 bool
count countは、要求された場合に、範囲内の実際のキー数に設定されます。Kvsとは異なり、上限やフィルター(Min/Max、Create/Modify、Revisionsなど)の影響を受けず、指定した範囲内の総数を反映します。 int64
メッセージ RequestOp (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
request requestは、トランザクションが受け付けるリクエスト型の共用体です。 oneof
request_range RangeRequest
request_put PutRequest
request_delete_range DeleteRangeRequest
request_txn TxnRequest
メッセージ ResponseHeader (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
cluster_id cluster_idは、レスポンスを送信したクラスターのIDです。 uint64
member_id member_idは、レスポンスを送信したメンバーのIDです。 uint64
revision revisionは、リクエストが適用された時点のキー・バリューストアのリビジョンです。キー・バリューストアを操作しない呼び出しでは設定されません(したがって0です)。監視の進捗レスポンスでは、header.revisionが進捗を示します。このストリームで今後受信するすべてのイベントは、header.revisionより大きいリビジョン番号を持つことが保証されます。 int64
raft_term raft_termは、リクエストが適用された時点のRaftの任期です。 uint64
メッセージ ResponseOp (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
response responseは、トランザクションが返すレスポンス型の共用体です。 oneof
response_range RangeResponse
response_put PutResponse
response_delete_range DeleteRangeResponse
response_txn TxnResponse
メッセージ SnapshotRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ SnapshotResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header headerは、キー・バリューストアの現在の情報を保持します。スナップショットストリームの最初のheaderは、スナップショットの時点を示します。 ResponseHeader
remaining_bytes remaining_bytesは、このメッセージの後に送信するblobのバイト数です。 uint64
blob blobは、スナップショットストリームの次のスナップショットチャンクを保持します。 bytes
version スナップショットに記録されたストレージスキーマのバージョンです。メンバーのローカルバックエンドから取得され、バイナリーのバージョンとは異なる場合があります。スナップショットのリストア時に対応している必要があるetcdのストレージバージョンを示します。 string
メッセージ StatusRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ StatusResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
version versionは、応答するetcdメンバーのバイナリーのバージョンです。ストレージスキーマのバージョンは、storageVersionで別に報告されます。 string
dbSize dbSizeは、応答するメンバーのバックエンドデータベースに物理的に割り当てられた領域のサイズ(バイト単位)です。 int64
leader leaderは、応答するメンバーが現在のリーダーと認識しているメンバーのIDです。 uint64
raftIndex raftIndexは、応答するメンバーの現在のRaftコミット済みインデックスです。 uint64
raftTerm raftTermは、応答するメンバーの現在のRaftの任期です。 uint64
raftAppliedIndex raftAppliedIndexは、応答するメンバーの現在のRaft適用済みインデックスです。 uint64
errors errorsは、アラームや健全性に関する情報と状態を保持します。 (slice of) string
dbSizeInUse dbSizeInUseは、応答するメンバーのバックエンドデータベースで論理的に使用されている領域のサイズ(バイト単位)です。 int64
isLearner isLearnerは、そのメンバーがRaftの学習者メンバーかどうかを示します。 bool
storageVersion storageVersionは、dbファイルのバージョンです。目標のクラスターバージョンに対して、更新が遅れる場合があります。 string
dbSizeQuota dbSizeQuotaは、設定されたetcdのストレージクォータ(バイト単位)です(–quota-backend-bytesフラグでetcdインスタンスに渡した値)。 int64
downgradeInfo downgradeInfoは、ダウングレード処理が存在するかどうかを示します。 DowngradeInfo
メッセージ TxnRequest (api/etcdserverpb/rpc.proto)

Googleのpaxosdb論文より:この実装の中心となるのは、MultiOpと呼ぶ強力なプリミティブです。反復処理を除くすべてのデータベース操作は、MultiOpを1回呼び出すことで実装されています。MultiOpはアトミックに適用され、3つの要素で構成されます。1. guardと呼ぶテストのリスト。guard内の各テストは、データベース内の1つのエントリーを検査します。値の有無を確認したり、指定した値と比較したりできます。guard内の異なる2つのテストは、データベース内の同じエントリーにも、異なるエントリーにも適用できます。guard内のすべてのテストが適用され、MultiOpはその結果を返します。すべてのテストがtrueの場合、MultiOpはt op(下記の項目2)を実行し、それ以外の場合はf op(下記の項目3)を実行します。2. t opと呼ぶデータベース操作のリスト。リスト内の各操作は、挿入、削除、検索のいずれかで、データベースの1つのエントリーに適用されます。リスト内の異なる2つの操作は、データベース内の同じエントリーにも、異なるエントリーにも適用できます。これらの操作は、guardの評価結果がtrueの場合に実行されます。3. f opと呼ぶデータベース操作のリスト。t opと同様ですが、guardの評価結果がfalseの場合に実行されます。

フィールド 説明 型
(versionpb.etcd_version_msg) option
compare compareは、条件の論理積を表す述語のリストです。比較が成功するとsuccessのリクエストを順番に処理し、レスポンスにはそれぞれの応答が同じ順序で含まれます。比較が失敗するとfailureのリクエストを順番に処理し、レスポンスにはそれぞれの応答が同じ順序で含まれます。 (slice of) Compare
success successは、compareの評価結果がtrueの場合に適用するリクエストのリストです。 (slice of) RequestOp
failure failureは、compareの評価結果がfalseの場合に適用するリクエストのリストです。 (slice of) RequestOp
メッセージ TxnResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
succeeded succeededは、compareの評価結果がtrueの場合にtrueに、それ以外の場合にfalseに設定されます。 bool
responses responsesは、succeededがtrueの場合にはsuccessを、falseの場合にはfailureを適用した結果に対応するレスポンスのリストです。 (slice of) ResponseOp
メッセージ WatchCancelRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
watch_id watch_idは、これ以上イベントを送信しないようキャンセルするウォッチャーのIDです。 int64
メッセージ WatchCreateRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
key keyは、監視対象として登録するキーです。 bytes
range_end range_endは、監視する範囲[key, range_end)の終端です。range_endが指定されていない場合、key引数だけを監視します。range_endが’\0’の場合、key引数以上のすべてのキーを監視します。range_endが指定したキーに1を加えた値の場合、そのキーを接頭辞に持つすべてのキーを監視します。 bytes
start_revision start_revisionは、監視を開始するリビジョン(そのリビジョンを含む)で、省略可能です。start_revisionを指定しない場合は「現在」から開始します。 int64
progress_notify progress_notifyを設定すると、最近のイベントがない場合に、etcdサーバーが新しいウォッチャーへイベントを含まないWatchResponseを定期的に送信します。これは、クライアントが切断されたウォッチャーを、最近の既知のリビジョンから復旧したい場合に役立ちます。etcdサーバーは、現在の負荷に基づいて通知の送信頻度を決めることがあります。 bool
filters filtersは、ウォッチャーに送り返す前にサーバー側でイベントをフィルタリングします。 (slice of) FilterType
prev_kv prev_kvが設定されている場合、作成したウォッチャーはイベント発生前のKVを取得します。以前のKVがすでにコンパクションされている場合、何も返されません。 bool
watch_id watch_idが指定され、0でない場合、そのIDがこのウォッチャーに割り当てられます。etcdでのウォッチャー作成は同期操作ではないため、これを使うことで、同じストリーム上に複数のウォッチャーを作成する際に正しい順序を保てます。ストリーム上ですでに使用中のIDを持つウォッチャーを作成すると、エラーが返されます。 int64
fragment fragmentは、大きなリビジョンを複数の監視レスポンスに分割できるようにします。 bool
メッセージ WatchProgressRequest (api/etcdserverpb/rpc.proto)

監視ストリームの進捗状態を、監視レスポンスストリームでできるだけ早く送信するよう要求します。

フィールド 説明 型
(versionpb.etcd_version_msg) option
メッセージ WatchRequest (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
request_union request_unionは、新しいウォッチャーを作成するか、既存のウォッチャーをキャンセルするためのリクエストです。 oneof
create_request WatchCreateRequest
cancel_request WatchCancelRequest
progress_request WatchProgressRequest
メッセージ WatchResponse (api/etcdserverpb/rpc.proto)
フィールド 説明 型
(versionpb.etcd_version_msg) option
header ResponseHeader
watch_id watch_idは、レスポンスに対応するウォッチャーのIDです。 int64
created createdは、監視作成リクエストへのレスポンスである場合にtrueに設定されます。クライアントはwatch_idを記録し、作成したウォッチャーのイベントを同じストリームから受信するようにしてください。作成したウォッチャーに送信されるすべてのイベントには、同じwatch_idが付与されます。 bool
canceled canceledは、監視キャンセルリクエストへのレスポンスである場合、またはstart_revisionがすでにコンパクションされている場合にtrueに設定されます。キャンセルされたウォッチャーには、それ以降のイベントは送信されません。 bool
compact_revision compact_revisionは、ウォッチャーがコンパクション済みのインデックスで監視しようとした場合に、最小のインデックスに設定されます。これは、コンパクション済みのリビジョンでウォッチャーを作成した場合、またはウォッチャーがキー・バリューストアの進行に追いつけない場合に発生します。クライアントはそのウォッチャーをキャンセル済みとして扱い、同じstart_revisionでウォッチャーを作り直さないようにしてください。 int64
cancel_reason cancel_reasonは、ウォッチャーをキャンセルする理由を示します。 string
fragment fragmentは、大きな監視レスポンスが複数のレスポンスに分割された場合にtrueです。 bool
events (slice of) mvccpb.Event
メッセージ Event (api/mvccpb/kv.proto)
フィールド 説明 型
type typeはイベントの種類です。typeがPUTの場合、キーに新しいデータが保存されたことを示します。typeがDELETEの場合、キーが削除されたことを示します。 EventType
kv kvは、イベントのKeyValueを保持します。PUTイベントは現在のkvペアを含みます。kv.Version=1のPUTイベントは、キーが作成されたことを示します。DELETE/EXPIREイベントは、変更リビジョンが削除時のリビジョンに設定された、削除済みのキーを含みます。 KeyValue
prev_kv prev_kvは、イベント発生前のキー・バリューペアを保持します。 KeyValue
メッセージ KeyValue (api/mvccpb/kv.proto)
フィールド 説明 型
key keyは、バイト列で表したキーです。空のキーは許可されません。 bytes
create_revision create_revisionは、このキーが最後に作成されたリビジョンです。 int64
mod_revision mod_revisionは、このキーが最後に変更されたリビジョンです。 int64
version versionは、キーのバージョンです。削除するとバージョンは0にリセットされ、キーを変更するたびにバージョンが増加します。 int64
value valueは、キーが保持する値をバイト列で表したものです。 bytes
lease leaseは、キーに関連付けられたリースのIDです。関連付けられたリースが期限切れになると、キーは削除されます。leaseが0の場合、キーにリースは関連付けられていません。 int64
メッセージ Lease (server/lease/leasepb/lease.proto)
フィールド 説明 型
ID int64
TTL int64
RemainingTTL int64
メッセージ LeaseInternalRequest (server/lease/leasepb/lease.proto)
フィールド 説明 型
LeaseTimeToLiveRequest etcdserverpb.LeaseTimeToLiveRequest
メッセージ LeaseInternalResponse (server/lease/leasepb/lease.proto)
フィールド 説明 型
LeaseTimeToLiveResponse etcdserverpb.LeaseTimeToLiveResponse
メッセージ Permission (api/authpb/auth.proto)

Permissionは、単一のエンティティーです。

フィールド 説明 型
permType Type
key bytes
range_end bytes
メッセージ Role (api/authpb/auth.proto)

Roleは、authRolesバケット内の単一のエントリーです。

フィールド 説明 型
name bytes
keyPermission (slice of) Permission
メッセージ User (api/authpb/auth.proto)

Userは、authUsersバケット内の単一のエントリーです。

フィールド 説明 型
name bytes
password bytes
roles (slice of) string
options UserAddOptions
メッセージ UserAddOptions (api/authpb/auth.proto)
フィールド 説明 型
no_password bool

10 - APIリファレンス:並行処理

etcdの並行処理APIリファレンス

このAPIリファレンスは、各見出しに記載した.protoファイルから自動生成されています。

サービス Lock (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)

ロックサービスは、クライアント側のロック機能をgRPCインターフェースとして公開します。

メソッド リクエスト型 レスポンス型 説明
Lock LockRequest LockResponse Lockは、指定した名前付きロックの分散共有ロックを取得します。成功すると、呼び出し元がロックを保持している間だけ存在する、一意のキーを返します。このキーをトランザクションと組み合わせることで、ロックの所有権を保持している間だけetcdの更新が行われることを安全に保証できます。ロックは、そのキーに対してUnlockを呼び出すか、所有者に関連付けられたリースが期限切れになるまで保持されます。
Unlock UnlockRequest UnlockResponse Unlockは、Lockが返したキーを受け取り、ロックの保持を解除します。すると、ロックを待っている次のLock呼び出し元が起こされ、ロックの所有権が与えられます。
メッセージ LockRequest (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)
フィールド 説明 型
name nameは、取得する分散共有ロックの識別子です。 bytes
lease leaseは、ロックの所有権に関連付けるリースのIDです。ロックを保持しているリースが期限切れになるか取り消されると、ロックは自動的に解放されます。同じリースによるLockの呼び出しは、1回の取得として扱います。同じリースで2回ロックしても、何も行いません。 int64
メッセージ LockResponse (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)
フィールド 説明 型
header etcdserverpb.ResponseHeader
key keyは、Lockの呼び出し元がロックを所有している間、etcd上に存在するキーです。このキーは変更しないでください。変更すると、ロックの動作が未定義になる可能性があります。 bytes
メッセージ UnlockRequest (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)
フィールド 説明 型
key keyは、Lockによって付与されたロック所有権のキーです。 bytes
メッセージ UnlockResponse (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)
フィールド 説明 型
header etcdserverpb.ResponseHeader
サービス Election (server/etcdserver/api/v3election/v3electionpb/v3election.proto)

選挙サービスは、クライアント側の選挙機能をgRPCインターフェースとして公開します。

メソッド リクエスト型 レスポンス型 説明
Campaign CampaignRequest CampaignResponse Campaignは、選挙でリーダーシップを取得するまで待機し、成功するとリーダーシップを表すLeaderKeyを返します。LeaderKeyは、その選挙で新しい値を発行すること、リーダーシップの保持を条件にトランザクションでAPIリクエストを保護すること、および選挙から辞任することに使用できます。
Proclaim ProclaimRequest ProclaimResponse Proclaimは、リーダーが公開している値を新しい値で更新します。
Leader LeaderRequest LeaderResponse Leaderは、現在の選挙の宣言があれば、それを返します。
Observe LeaderRequest LeaderResponse Observeは、選挙で選出されたリーダーによる宣言を、発行された順にストリーミングします。
Resign ResignRequest ResignResponse Resignは、他の立候補者がその選挙のリーダーシップを取得できるよう、リーダーシップを解放します。
メッセージ CampaignRequest (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
name nameは、立候補する選挙の識別子です。 bytes
lease leaseは、その選挙のリーダーシップに関連付けられたリースのIDです。リーダーを辞任する前にリースが期限切れになるか取り消されると、次の立候補者がいる場合は、その立候補者にリーダーシップが移ります。 int64
value valueは、立候補者が選挙に勝ったときに設定する、最初の宣言値です。 bytes
メッセージ CampaignResponse (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
header etcdserverpb.ResponseHeader
leader leaderは、その選挙のリーダーシップを保持するために使用するリソースを表します。 LeaderKey
メッセージ LeaderKey (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
name nameは、リーダーシップキーに対応する選挙の識別子です。 bytes
key keyは、その選挙の所有権を表す不透明なキーです。キーを削除すると、リーダーシップは失われます。 bytes
rev revは、キーの作成リビジョンです。トランザクション中にキーの作成リビジョンがrevと一致するかを調べることで、選挙の所有権を検証できます。 int64
lease leaseは、その選挙のリーダーのリースIDです。 int64
メッセージ LeaderRequest (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
name nameは、リーダーシップ情報を取得する選挙の識別子です。 bytes
メッセージ LeaderResponse (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
header etcdserverpb.ResponseHeader
kv kvは、リーダーの最新の更新を表すキー・バリューペアです。 mvccpb.KeyValue
メッセージ ProclaimRequest (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
leader leaderは、その選挙で保持しているリーダーシップです。 LeaderKey
value valueは、リーダーの現在の値を上書きするための更新値です。 bytes
メッセージ ProclaimResponse (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
header etcdserverpb.ResponseHeader
メッセージ ResignRequest (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
leader leaderは、辞任によって手放すリーダーシップです。 LeaderKey
メッセージ ResignResponse (server/etcdserver/api/v3election/v3electionpb/v3election.proto)
フィールド 説明 型
header etcdserverpb.ResponseHeader
メッセージ Event (api/mvccpb/kv.proto)
フィールド 説明 型
type typeはイベントの種類です。typeがPUTの場合、キーに新しいデータが保存されたことを示します。typeがDELETEの場合、キーが削除されたことを示します。 EventType
kv kvは、イベントのKeyValueを保持します。PUTイベントは現在のkvペアを含みます。kv.Version=1のPUTイベントは、キーが作成されたことを示します。DELETE/EXPIREイベントは、変更リビジョンが削除時のリビジョンに設定された、削除済みのキーを含みます。 KeyValue
prev_kv prev_kvは、イベント発生前のキー・バリューペアを保持します。 KeyValue
メッセージ KeyValue (api/mvccpb/kv.proto)
フィールド 説明 型
key keyは、バイト列で表したキーです。空のキーは許可されません。 bytes
create_revision create_revisionは、このキーが最後に作成されたリビジョンです。 int64
mod_revision mod_revisionは、このキーが最後に変更されたリビジョンです。 int64
version versionは、キーのバージョンです。削除するとバージョンは0にリセットされ、キーを変更するたびにバージョンが増加します。 int64
value valueは、キーが保持する値をバイト列で表したものです。 bytes
lease leaseは、キーに関連付けられたリースのIDです。関連付けられたリースが期限切れになると、キーは削除されます。leaseが0の場合、キーにリースは関連付けられていません。 int64