Etcd使用

5641 ワード

Etcdの概要
etcdは、主に構成とサービス発見を共有するために使用される、高可用性のキー値ストレージシステムです.etcdはCoreOSによって開発され維持されており、ZooKeeperとDoozerからインスピレーションを受けており、Go言語で記述され、Raftコンシステンシアルゴリズムによってログレプリケーションを処理し、強いコンシステンシを保証しています.RaftはStanfordからの新しいコンシステンシアルゴリズムであり,分散システムのログレプリケーションに適しており,Raftは選挙によってコンシステンシを実現し,RaftではどのノードもLeaderになる可能性がある.Googleのコンテナクラスタ管理システムKubernetes、オープンソースPaaSプラットフォームCloud Foundry、CoreOSのFleetはetcdを広く使用しています.
etcdクラスタの動作原理はraft共通認識アルゴリズム(The Raft Consensus Algorithm)に基づいている.etcdは0.5である.0バージョンでは、以前のようにサードパーティライブラリgo-raftに依存するのではなく、raftアルゴリズムが再実現されました.raft共通認識アルゴリズムの利点は,分散システムにおける各ノードログコンテンツの一貫性の問題を効率的に解決するとともに,クラスタに一定のフォールトトレランス能力を持たせることである.クラスタに一部のノード障害、ネットワーク障害などの問題が発生しても、残りのほとんどのノードの正しいステップが保証されます.さらに、より多くのノード(一般的にクラスタノードの総数の半分を超える)に障害が発生してクラスタが使用できなくなった場合でも、ノード内のデータにエラーの結果が発生しないことを保証できます.
1. Getting etcd
Releaseページ(https://github.com/coreos/etcd/releases/)バイナリをダウンロードするか、最新のmasterコードを引いてコンパイルします.
$ git clone https://github.com/coreos/etcd.git
$ cd etcd
$ ./build

もう1つの方法は、vendorでコンパイルされたetcdを直接取得することです.以下のようにします.
$ go get github.com/coreos/etcd/cmd/etcd

2. Starting etcd
直接実行
$ etcd

またはdata-dirを指定します
$ etcd -data-dir=/var/edata

詳細な構成オプションについては、次を参照してください.https://coreos.com/etcd/docs/latest/op-guide/configuration.html
簡単な例human readable:
# This config is meant to be consumed by the config transpiler, which will
# generate the corresponding Ignition config. Do not pass this config directly
# to instances of Container Linux.

etcd:
  name:                        my-etcd-1
  listen_client_urls:          https://10.240.0.1:2379
  advertise_client_urls:       https://10.240.0.1:2379
  listen_peer_urls:            https://10.240.0.1:2380
  initial_advertise_peer_urls: https://10.240.0.1:2380
  initial_cluster:             my-1=https://10.240.0.1:2380,my-2=https://10.240.0.2:2380,my-3=https://10.240.0.3:2380
  initial_cluster_token:       my-etcd-token
  initial_cluster_state:       new

参照先:https://coreos.com/etcd/docs/latest/getting-started-with-etcd.html https://docs.portworx.com/run-etcd.html
3. etcd cluster
etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \
  --listen-peer-urls http://10.0.1.10:2380 \
  --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://10.0.1.10:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
  --initial-cluster-state new

参照先:https://coreos.com/etcd/docs/latest/v2/docker_guide.html#running-etcd-in-standalone-mode https://coreos.com/etcd/docs/latest/op-guide/clustering.html
4.etcdctlヘルプの表示
上記で起動したetcdはサーバであり、政府はcommandlineクライアント、すなわちetcdctlを提供し、すべてのコマンドはこのクライアントを通じて要求される.ヘルプ情報を表示するには、次のコマンドを実行します.
$ ETCDCTL_API=3 etcdctl help

getコマンドのヘルプを表示するなど、特定のcommandのヘルプを表示します.
$ ETCDCTL_API=3 etcdctl help get

NAME:
        get - Gets the key or a range of keys
USAGE:
        etcdctl get [options]  [range_end]
OPTIONS:
      --consistency="l"                 Linearizable(l) or Serializable(s)
      --from-key[=false]                Get keys that are greater than or equal to the given key using byte compare
      --keys-only[=false]               Get only the keys
      --limit=0                         Maximum number of results
      --order=""                        Order of results; ASCEND or DESCEND (ASCEND by default)
      --prefix[=false]                  Get keys with matching prefix
      --print-value-only[=false]        Only write values when using the "simple" output format
      --rev=0                           Specify the kv revision
      --sort-by=""                      Sort target; CREATE, KEY, MODIFY, VALUE, or VERSION
GLOBAL OPTIONS:
      --cacert=""                               verify certificates of TLS-enabled secure servers using this CA bundle
      --cert=""                                 identify secure client using this TLS certificate file
      --command-timeout=5s                      timeout for short running command (excluding dial timeout)
      --debug[=false]                           enable client-side debug logging
      --dial-timeout=2s                         dial timeout for client connections
      --endpoints=[127.0.0.1:2379]              gRPC endpoints
      --hex[=false]                             print byte strings as hex encoded strings
      --insecure-skip-tls-verify[=false]        skip server certificate verification
      --insecure-transport[=true]               disable transport security for client connections
      --key=""                                  identify secure client using this TLS key file
      --user=""                                 username[:password] for authentication (prompt if password is not supplied)
  -w, --write-out="simple"                      set the output format (fields, json, protobuf, simple, table)

5. Command examples
次のようなkeysがあると仮定します.
foo = bar
foo1 = bar1
foo2 = bar2
foo3 = bar3

デフォルトetcdctlではkeyとvalueが印刷され、valueの値だけを印刷します.
$ etcdctl get foo --print-value-only
bar

すべてのprefixがfooのkeyに対応するvalueを取得
$ etcdctl get --prefix foo
foo
bar
foo1
bar1
foo2
bar2
foo3
bar3

その他のコマンド:https://coreos.com/etcd/docs/latest/dev-guide/interacting_v3.html