etcdは、可用性の高い分散キー値データベースです。 etcdは内部でコンセンサスアルゴリズムとしてraftプロトコルを使用し、etcdはGo言語に基づいて実装されます。
構成の共有とサービスの検出を提供するシステムは数多くありますが、最もよく知られているのは[Zookeeper](以下、ZK)であり、ETCDは新星と見なすことができます。 ETCDには、プロジェクトの実装、コンセンサスプロトコルの理解のしやすさ、運用と保守、およびセキュリティの点で、Zookeeperよりも優れています。
etcdは、次の特徴を持つサービス検出システムです。
この記事では、ETCDと比較する代表としてZKを選択し、[Consul]プロジェクトを比較対象とは見なしません。これは、Consulの信頼性と安定性を検証するのにまだ時間がかかるためです(プロジェクトの開始者は、Consulを独自のサービスに使用せず、使用しません。 )。
ZKと同様に、ETCDには次のような多くの使用シナリオがあります。
公式サイトの【ベンチマーク】によると、2CPU、1.8Gメモリ、SSDディスクの構成で、1ノードの書き込み性能は16K QPS、読み取り後の書き込み性能は12KQPSになります。このパフォーマンスは非常に印象的です。
ETCDは、Raftプロトコルを使用して、クラスター内の各ノードの状態の一貫性を維持します。簡単に言うと、ETCDクラスターは、相互に通信して全体的な外部サービスを形成する複数のノードで構成される分散システムです。各ノードは完全なデータを格納し、Raftプロトコルは各ノードによって維持されるデータの一貫性を保証します。
図に示すように、各ETCDノードはステートマシンを維持し、常に最大で1つの有効なマスターノードがあります。マスターノードは、クライアントからのすべての書き込み操作を処理し、Raftプロトコルを介して、書き込み操作によるステートマシンへの変更が他のノードに確実に同期されるようにします。
ETCDの動作原理の中核部分は、Raftプロトコルにあります。このセクションの次のセクションでは、Raftプロトコルについて簡単に紹介します。詳細については、その[論文]を参照してください。
論文で述べられているように、Raftプロトコルは確かに理解しやすいです。これは主に、マスターの選択、ログの複製、セキュリティの3つの部分に分かれています。
Raftプロトコルは、サービスノードのグループのデータの一貫性を維持するために使用されるプロトコルです。このサービスノードのグループはクラスターを形成し、外部にサービスを提供するためのマスターノードがあります。クラスターが初期化されるか、マスターノードがダウンすると、マスター選択の問題が発生します。クラスター内の各ノードは、いつでもリーダー、フォロワー、候補者の3つの役割のいずれかになります。選挙の特徴は次のとおりです。
いわゆるログレプリケーションとは、マスターノードが各操作のログエントリを形成し、それをローカルディスクに永続化してから、ネットワークIOを介して他のノードに送信することを意味します。ログによる他のノードの論理クロック(TERM)そしてログ番号(INDEX)ログレコードをローカルに保持するかどうかを決定します。マスターノードがそれ自体を含むノードの半分以上から正常にリターンを受信すると、ログは送信可能と見なされます(コミット)、ログをステートマシンに入力し、結果をクライアントに返します。
ここで、マスターが選択されるたびに、論理クロックに相当する一意のTERM番号が形成されることに注意してください。各ログには、グローバルに一意の番号があります。
マスターノードは、ネットワークIOを介して他のノードにログを追加します。ノードがログ追加メッセージを受信すると、最初にログのTERMが期限切れになっているかどうか、およびログエントリのINDEXが現在および送信されたログのINDEXよりも前であるかどうかを判断します。有効期限が切れているか、送信されたログよりも前の場合、追加は拒否され、ノードの現在送信されたログ番号が返されます。それ以外の場合は、ログを追加して成功を返します。
マスターノードは、ログの追加に関する他のノードからの応答を受信すると、拒否が見つかった場合、ノードから返された送信済みログ番号に従って、その番号の次のログを生成します。
マスターノードは他のノードと同様にログを同期し、輻輳も制御します。具体的には、マスターノードがログレプリケーションのターゲットノードが特定のログ追加メッセージを拒否したことを検出すると、ログ検出ステージに入り、ターゲットノードがログを受け入れるまでログを1つずつ送信してから、バッチログ追加を実行できる高速レプリケーションステージに入ります。
ログレプリケーションのロジックによると、クラスター内の遅いノードがクラスター全体のパフォーマンスに影響を与えていないことがわかります。もう1つの機能は、データがメインノードからフォロワーノードにのみコピーされることです。これにより、ロジックフローが大幅に簡素化されます。
現時点では、マスターの選択とログの複製では、ノード間のデータの一貫性を保証できません。特定のノードがダウンすると、しばらくしてから再起動し、マスターノードになると想像してみてください。ダウンしている間、クラスター内のノードの半分以上が存続すると、クラスターは正常に機能し、ログが送信されます。これらの送信されたログは、ダウンノードに配信できません。デッドノードが再びマスターノードとして選択されると、送信されたログの一部が失われます。このシナリオでは、Raftプロトコルに従って、自身のログを他のノードにコピーし、クラスターが送信したログを上書きします。
これは明らかに受け入れられません。
この問題を解決する他のプロトコルは、新しく選出されたマスターノードが他のノードに自身のデータと比較してクラスターがデータを送信したことを確認し、欠落しているデータを同期するように要求することです。このソリューションには明らかな欠陥があり、クラスターがサービスを再開するのにかかる時間が長くなり(クラスターは選択フェーズ中にサービス可能ではなくなります)、プロトコルの複雑さが増します。
Raftのソリューションは、マスター選択ロジックでマスターになることができるノードを制限して、選択されたノードにクラスターによって送信されたすべてのログがあることを確認することです。新しく選択したマスターノードに、送信されたクラスターのログがすべてすでに含まれている場合は、他のノードのデータを比較する必要はありません。プロセスを簡素化し、クラスターがサービスを復元する時間を短縮します。
ここに問題がありますが、そのような制限が課せられた後、主を選出することはできますか?答えは次のとおりです。生きているノードの半分以上がまだある限り、そのようなマスターを選択する必要があります。送信されたログはクラスター内のノードの半分以上によって永続化される必要があるため、前のマスターノードによって送信された最後のログもクラスター内のほとんどのノードによって永続化されることは明らかです。マスターノードがダウンしても、クラスター内のほとんどのノードはまだ生きているため、送信されたログを含むノードが生き残っているノードに存在する必要があります。
この時点で、Raftプロトコルの概要はすべて終わりました。
公開情報によると、少なくともCoreOS、Google Kubernetes、Cloud Foundry、およびGithub上の500を超えるプロジェクトがETCDを使用しています。
ETCDはHTTPプロトコルを提供し、最新バージョンでGooglegRPCアクセスをサポートします。サポートされている具体的なインターフェイスは次のとおりです。
etcdは、通常、実稼働環境でのクラスター展開に推奨されます。ここでは、主にシングルノードのインストールと基本的な使用法について説明します。
etcdはgo言語で記述されているため、インストールでは、対応するバイナリファイルをダウンロードして、適切なパスに配置するだけで済みます。
ダウンロードリンクにアクセスします。
https://github.com/etcd-io/etcd/releases
最新バージョンは3.3.10であるため、完全なダウンロードリンクは次のとおりです。
https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz
この記事で使用されているシステムは次のとおりです。ubuntu-16.04.5-server-amd64
wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gztar zxvf etcd-v3.3.10-linux-amd64.tar.gzmv etcd-v3.3.10-linux-amd64 /opt/etcd-v3.3.10
解凍されたファイルは次のとおりです。
root@ubuntu:/opt/etcd-v3.3.10# lsdefault.etcd Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
その中で、etcdはサーバー側、etcdctlはクライアントです。操作後、default.etcdが生成されます。これは、主にetctデータの格納に使用されます。
シングルノードのetcdサービスを開始するには、etcdコマンドを実行するだけです。ただし、次の問題が発生する可能性があります。
root@ubuntu:/opt/etcd-v3.3.10# ./etcd bash:./etcd:不十分な権限
このとき、次の方法を使用して、ファイルのアクセス許可を増やす必要があります。
root@ubuntu:/opt/etcd-v3.3.10# chmod 755 etcd
etcdを再開します
root@ubuntu:/opt/etcd-v3.3.10# ./etcd
成功すると、次のプロンプトが表示されます。
2018- 11- 1115:46:43.134431 I | etcdmain: etcd Version:3.3.102018-11-1115:46:43.134941 I | etcdmain: Git SHA: 27fc7e2
2018- 11- 1115:46:43.135324 I | etcdmain: Go Version: go1.10.42018-11-1115:46:43.135572 I | etcdmain: Go OS/Arch: linux/amd64
2018- 11- 1115:46:43.135781 I | etcdmain: setting maximum number of CPUs to 1, total number of available CPUs is1
2018- 11- 1115:46:43.136055 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2018- 11- 1115:46:43.136331 N | etcdmain: the server is already initialized as member before, starting as etcd member...2018-11-1115:46:43.136847 I | embed: listening for peers on http://localhost:23802018-11-1115:46:43.137159 I | embed: listening for client requests on localhost:23792018-11-1115:46:43.138055 I | etcdserver: name =default2018-11-1115:46:43.138328 I | etcdserver: data dir =default.etcd
2018- 11- 1115:46:43.138718 I | etcdserver: member dir =default.etcd/member
2018- 11- 1115:46:43.139011 I | etcdserver: heartbeat = 100ms
2018- 11- 1115:46:43.139280 I | etcdserver: election = 1000ms
2018- 11- 1115:46:43.139545 I | etcdserver: snapshot count =1000002018-11-1115:46:43.139839 I | etcdserver: advertise client URLs = http://localhost:23792018-11-1115:46:43.141035 I | etcdserver: restarting member 8e9e05c52164694d in cluster cdf818194e3a8c32 at commit index 462018-11-1115:46:43.141923 I | raft: 8e9e05c52164694d became follower at term 22018-11-1115:46:43.142228 I | raft: newRaft 8e9e05c52164694d [peers:[], term:2, commit:46, applied:0, lastindex:46, lastterm:2]2018-11-1115:46:43.143985 W | auth: simple token is not cryptographically signed
2018- 11- 1115:46:43.145713 I | etcdserver: starting server...[version:3.3.10, cluster version: to_be_decided]2018-11-1115:46:43.148015 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
2018- 11- 1115:46:43.149041 N | etcdserver/membership:set the initial cluster version to 3.32018-11-1115:46:43.149478 I | etcdserver/api: enabled capabilities for version 3.32018-11-1115:46:45.043137 I | raft: 8e9e05c52164694d is starting a newelection at term 22018-11-1115:46:45.043461 I | raft: 8e9e05c52164694d became candidate at term 32018-11-1115:46:45.043495 I | raft: 8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 32018-11-1115:46:45.043519 I | raft: 8e9e05c52164694d became leader at term 32018-11-1115:46:45.043535 I | raft: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 32018-11-1115:46:45.044348 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379]} to cluster cdf818194e3a8c32
2018- 11- 1115:46:45.044593 E | etcdmain: forgot to set Type=notify in systemd service file?2018-11-1115:46:45.044737 I | embed: ready to serve client requests
2018- 11- 1115:46:45.045232 N | embed: serving insecure client requests on 127.0.0.1:2379,this is strongly discouraged!
上記の出力から、多くの情報を見ることができます。以下は、より重要な情報の一部です。
2018- 11- 1115:46:43.138055 I | etcdserver: name =default
nameはノードの名前を表し、defaultはdefaultです。
2018- 11- 1115:46:43.138328 I | etcdserver: data dir =default.etcd
data-dirログとスナップショットが保存されるディレクトリ。デフォルトは、現在の作業ディレクトリdefault.etcd /ディレクトリです。
2018- 11- 1115:46:43.148015 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
[http:// localhost:2380](http://localhost:2380/)でクラスター内の他のノードと通信します。
2018- 11- 1115:46:43.139839 I | etcdserver: advertise client URLs = http://localhost:2379
クライアントとの対話のために、[http:// localhost:2379](http://localhost:2379/)でHTTPAPIサービスを提供します。
2018- 11- 1115:46:43.139011 I | etcdserver: heartbeat = 100ms
ハートビートは100msです。このパラメータの機能は、リーダーがフォロワーにハートビートを送信する頻度です。デフォルト値は100msです。
2018- 11- 1115:46:43.139280 I | etcdserver: election = 1000ms
選択は1000msです。このパラメーターの機能は、再投票のタイムアウト期間です。followがこの間隔内にハートビートパケットを受信しない場合、再投票がトリガーされます。デフォルトは1000msです。
2018- 11- 1115:46:43.139545 I | etcdserver: snapshot count =100000
スナップショット数は10000です。このパラメーターの機能は、スナップショットのインターセプトをトリガーしてディスクに保存するために送信されるトランザクションの数を指定することです。
クラスターと各ノードはuuidを生成します。
Raftは、リーダーを選出するために起動時に実行されます。
この方法で開始されたEtcdは単なるプログラムであり、etcdを開始するウィンドウが閉じられると、etcdは閉じられます。
、したがって、長期間使用したい場合は、etcdのサービスを開くのが最善です。ここでサービスを開く方法はありません。必要に応じて、読者は自分でBaiduを開くことができます。
別のウィンドウを開き、次のように入力します。
root@ubuntu:/opt/etcd-v3.3.10# ./etcd -versionetcd Version:3.3.10Git SHA: 27fc7e2
Go Version: go1.10.4Go OS/Arch: linux/amd64
etcdベンダーは、ユーザーがHTTP APIに基づく必要なしに、etcdサービスを直接処理できるように、コマンドラインclient-etcdctlを提供しています。サービスをテストしたり、データベースのコンテンツを手動で変更したりすると便利です。
etcdctlでサポートされるコマンドは、データベース操作と非データベース操作に大きく分けられます。
./etcdctl -hを使用して、etcdctlの使用法を表示できます。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl -h
注:** etcdのデータベース操作は、キーとディレクトリのCRUDの完全なライフサイクルの管理を中心に展開されます。 ****
etcdは、キーの編成に階層的な空間構造を採用しています(ファイルシステムのディレクトリの概念と同様)。ユーザー指定のキーは、実際にはルートディレクトリ/の下に配置されるtestkeyなどの個別の名前にすることができます。 / cluster1 / node2 / testkeyなどのディレクトリ構造を指定すると、対応するディレクトリ構造が作成されます。
キーの値を指定します
文法:
- ttl '0'キー値のタイムアウト期間(ユニットは2番目です)、構成しないでください(デフォルトは0です)タイムアウトしない
–swap-with-value valueキーの現在の値がvalueの場合、設定します
–swap-with-index '0'キーの現在のインデックス値が指定されたインデックスの場合は、設定操作を行ってください。
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl set--ttl '5' key "Hello world"Hello world
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl get keyHello world
# 実行する前に数秒待ちます
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl get keyError:100: Key not found(/key)[8]
1回目の取得は5秒以内の操作、2回目の取得は5秒後の操作です。この時点で、キーの値は消えています。
指定されたキーを変更します
文法:
–ttl '0'残業時間(ユニットは2番目です)、構成しないでください(デフォルトは0です)タイムアウトすることはありません。
例えば:
# 最初に5秒の値を設定します
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl set--ttl '5' key "Hello world"Hello world
# 値を再度変更します
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl update key "Hello world2"Hello world2
# 10秒待ってから再実行
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl get keyHello world2
10秒でも手に入ることがわかります。 ttlとvalueが同時に更新されることを示しています!
キー値を削除します。
文法:
-キーが空のディレクトリまたはキーと値のペアの場合は、ディレクトリを削除します
-ディレクトリとすべてのサブキーを再帰的に削除します
–with-valueは、既存の値が一致するかどうかをチェックします
–with-インデックス「0」は、既存のインデックスが一致するかどうかをチェックします
例えば:
# 削除
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl rm keyPrevNode.Value: Hello world2
# もう一度取得
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl rm keyError:100: Key not found(/key)[11]
指定されたキーが存在しない場合は、新しいキー値を作成します。
文法:
–ttl '0'残業時間(単位は秒です)、構成しないでください(デフォルトは0です)。タイムアウトしない
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl mk /test/key "Hello world"Hello world
キーが存在する場合、コマンドを実行すると、次のようなエラーが報告されます。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl mk /test/key "Hello world"Error:105: Key already exists(/test/key)[33]
指定されたキーディレクトリが存在しない場合は、新しいキーディレクトリが作成されます。
文法:
–ttl '0'残業時間(ユニットは2番目です)、構成しないでください(デフォルトは0です)タイムアウトすることはありません。
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl mkdir dir2
キーディレクトリが存在する場合、このコマンドを実行すると、次のようなエラーが報告されます。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl mkdir dir2Error:105: Key already exists(/dir2)[13]
キーカタログを作成します。ディレクトリが存在しない場合は作成し、ディレクトリが存在する場合はディレクトリTTLを更新します。
文法:
–ttl '0'残業時間(ユニットは2番目です)、構成しないでください(デフォルトは0です)タイムアウトすることはありません。
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl setdir dir3
繰り返し実行するとエラーが報告されます
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl setdir dir3Error:102: Not a file(/dir3)[34]
既存のディレクトリを更新します。
文法:
–ttl '0'残業時間(ユニットは2番目です)、構成しないでください(デフォルトは0です)タイムアウトすることはありません。
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl updatedir dir2
繰り返し実行してもエラーは報告されません!
空のディレクトリ、またはキーと値のペアを削除します
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl rmdir dir2
繰り返し実行するとエラーが報告されます
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl rmdir dir2Error:100: Key not found(/dir2)[36]
ディレクトリが空でない場合、次のようなエラーが報告されます。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl set/dir/key hihi
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl rmdir /dirError:108: Directory not empty(/dir)[37]
ディレクトリ(デフォルトはルートディレクトリ)の下にキーまたはサブディレクトリを一覧表示します。サブディレクトリのコンテンツはデフォルトでは表示されません。
文法:
-出力結果をソートソートします
-再帰的ディレクトリにサブディレクトリがある場合は、内容を再帰的に出力します
- pディレクトリとして出力する場合は、最後に追加します/区別する
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl ls/test/dir2/dir3
値がある場合は出力し、ない場合は出力しません。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl ls test/test/key
データベース以外の操作には、バックアップ、監視、ノード管理などが含まれます。
etcdデータをバックアップします。
文法:
–data-diretcdデータディレクトリ
–backup-指定されたパスへのディレクトリバックアップ
例えば:
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl backup --data-dir default.etcd --backup-dir /xx/xx2018-11-1116:43:34.119969 I | failed creating backup snapshot dir /xx/xx/member/snap: expected "/xx/xx/member/snap" to be empty, got ["db"]
プロンプト/ xx / xxディレクトリが存在しません!
次に、/ opt / backupなどの既存のディレクトリに移動します。注:bakcupディレクトリを作成する必要はありません。自動的に作成されます。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl backup --data-dir default.etcd --backup-dir /opt/backup2018-11-1116:44:44.845409 I | ignoring EntryConfChange raft entry2018-11-1116:44:44.845901 I | ignoring member attribute update on /0/members/8e9e05c52164694d/attributes2018-11-1116:44:44.846307 I | ignoring member attribute update on /0/members/8e9e05c52164694d/attributes
バックアップディレクトリ/ opt / backup /を表示します
root@ubuntu:/opt/etcd-v3.3.10# ll /opt/backup/total 12drwx------3 root root 4096 Nov 1116:44./drwxr-xr-x 4 root root 4096 Nov 1116:44../drwx------ 4 root root 4096 Nov 11 16:44 member/
キー値の変化を監視します。キー値が更新されると、最新の値が出力されて終了します。
キー値の変化を監視し、キー値が更新されたら、指定されたコマンドを実行します。
watchとexec-watchについては、次のリンクを参照してください。
https://blog.csdn.net/mnasd/article/details/79621155
主に、新しいウィンドウを開いた後、getキーが値を取得できないために作成しませんでした
新しい値を設定する
. /etcdctl set key "Hello world"
実行エラー:
Error: unknown command "set"for"etcdctl"Did you mean this?get
put
del
user
Run 'etcdctl --help'for usage.
Error: unknown command "set"for"etcdctl"Did you mean this?get
put
del
user
元のウィンドウは実行できますが、新しいウィンドウはエラーやさまざまな不正を報告し続けます...
メンバーリストetcdインスタンスのリスト追加etcdインスタンスの追加****削除etcdインスタンスの削除
クラスターに存在するノードを表示します。次に例を示します。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl member list1d64cbbe0759c8f8: name=ubuntu peerURLs=http://192.168.75.129:2380 clientURLs=http://192.168.75.129:2379 isLeader=true
クラスター内の既存のノードを削除します。次に例を示します。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl member remove 1d64cbbe0759c8f8Received an error trying to remove member 1d64cbbe0759c8f8: client: etcd cluster is unavailable or misconfigured; error #0: client: etcd member http://192.168.75.129:2379 has no leader
エラーを表示します。クラスターにリーダーがありません
次に、クラスターに新しいノードを追加します。
root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl member add etcd3 http://192.168.75.129:2380Added member named etcd3 with ID 6c40942fac2f358f to cluster
ETCD_NAME="etcd3"ETCD_INITIAL_CLUSTER="etcd3=http://192.168.75.129:2380,default=http://localhost:2380"ETCD_INITIAL_CLUSTER_STATE="existing"
上記の構成パラメーターに関するいくつかの説明:
ETCD_NAME:ETCDのノード名。クラスター内で一意である必要があり、ホスト名を使用できます。
ETCD_DATA_DIR:ETCDデータストレージディレクトリ、サービス実行データが保存されるパス。デフォルトは${name}.etcd。
ETCD_SNAPSHOT_カウンター:スナップショットをトリガーするトランザクションコミットの数と、スナップショットのインターセプトをトリガーしてディスクに保存するためにコミットされるトランザクション(トランザクション)の数を指定します。
ETCD_HEARTBEAT_間隔:ETCDノード間のハートビート送信の間隔(ミリ秒単位)。リーダーがフォロワーにハートビートを送信する頻度。デフォルト値は100msです。
ETCD_ELECTION_TIMEOUT:ノードが選挙に参加するための最大タイムアウト期間(ミリ秒単位)。再投票のタイムアウト期間。followがこの時間間隔内にハートビートパケットを受信しない場合、再投票がトリガーされます。デフォルトは1000ミリ秒です。
ETCD_LISTEN_PEER_URLS:他のノードと通信するときにこのノードによって監視されるアドレスのリスト。複数のアドレスはコンマで区切られ、形式はスキームに分割できます。://IP:PORT、ここでのスキームはhttpまたはhttpsにすることができます。 httpなどのピアと通信するためのアドレス://ip:2380、複数ある場合は、コンマを使用してそれらを区切ります。すべてのノードにアクセスできる必要があるため、localhostを使用しないでください。 ETCD_LISTEN_CLIENT_URLS:ノードがクライアントと通信するときに監視されるアドレスのリスト、および外部サービスのアドレス:httpなど://ip:2379,http://127.0.0.1:2379、クライアントはここに接続し、etcdETCDと対話します_INITIAL_ADVERTISE_PEER_URLS:クラスター全体のメンバーノードの通信アドレスリスト。このアドレスは、クラスターデータの送信に使用されます。したがって、このアドレスはクラスター内のすべてのメンバーに接続できる必要があります。このノードのピアリスニングアドレス。この値は、クラスター内の他のノードに通知します。
ETCD_INITIAL_クラスター:クラスター内のすべてのメンバーのアドレスを構成します。形式は次のとおりです。ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URL、コンマで区切られた複数の場合、クラスター内のすべてのノードの情報、形式はnode1です=http://ip1:2380,node2=http://ip2:2380,…。注:ここで、node1は、ノードの-nameで指定された名前です。次のip1:2380は--initialです-advertise-peer-urls指定値ETCD_ADVERTISE_CLIENT_URL:クラスター独自のクライアントアドレスリストの他のメンバーにブロードキャスト
ETCD_INITIAL_CLUSTER_状態:新しいクラスターを作成するとき、この値は新しいです。既存のクラスターがある場合、この値は存在します。
ETCD_INITIAL_CLUSTER_TOKEN:クラスタートークンを初期化し、クラスタートークンを作成します。この値はクラスターごとに一意のままです。この場合、クラスターを再作成する場合、構成が以前と同じであっても、新しいクラスターとノードuuidが再度生成されます。そうしないと、複数のクラスター間で競合が発生し、不明なエラーが発生します。
注:すべてのETCD_MY_FLAG構成パラメーターは、コマンドラインパラメーターを介して設定することもできますが、コマンドラインで指定されたパラメーターの優先度が高く、存在する場合は、環境変数の値をオーバーライドします。
etcd apiインターフェースについては、次のリンクを参照してください。
https://www.cnblogs.com/doscho/p/6227351.html
上記のコンテンツについて、この記事は次のリンクを参照しています。
https://www.cnblogs.com/softidea/p/6517959.html
https://blog.csdn.net/mnasd/article/details/79621155
注:このスクリプトは、ローカルサーバーにのみインストールできます。 etcd-v3.3.10-linux-amd64.tar.gzファイルとシェルスクリプトが同じディレクトリにあることを確認してください。
スクリプトには、etcdサービスを開始するためのsystemctlコマンドが付属しています
冒頭の注意事項をお読みください
# /bin/bash
# バージョンetcdインストールスクリプトをクリックします
# このスクリプト,ローカルサーバーにのみインストールできます。
# etcdを確認してください-v3.3.10-linux-amd64.tar.gzファイルと現在のスクリプトは同じディレクトリにあります。
# このスクリプトを実行するには、必ずrootユーザーを使用してください!
# python3を直接実行できることを確認します,下から4行目だから,json形式の出力があります。不要な場合は無視できます
# set-e
# ローカルIPを入力します
whiletruedo
echo 'ローカルIPを入力してください'
echo 'Example: 192.168.0.1'
echo -e "etcd server ip=\c"
read ETCD_Server
if["$ETCD_Server"==""];then
echo 'No input etcd server IP'else
# echo 'No input etcd server IP'break
fi
done
# etcdサービス開始
cat >/lib/systemd/system/etcd.service <<EOF
[ Unit]
Description=etcd - highly-available key value store
Documentation=https://github.com/coreos/etcd
Documentation=man:etcd
After=network.target
Wants=network-online.target
[ Service]
Environment=DAEMON_ARGS=
Environment=ETCD_NAME=%H
Environment=ETCD_DATA_DIR=/var/lib/etcd/default
EnvironmentFile=-/etc/default/%p
Type=notify
User=etcd
PermissionsStartOnly=true
# ExecStart=/bin/sh -c "GOMAXPROCS=\$(nproc) /usr/bin/etcd \$DAEMON_ARGS"
ExecStart=/usr/bin/etcd \$DAEMON_ARGS
Restart=on-abnormal
# RestartSec=10s
# LimitNOFILE=65536[Install]
WantedBy=multi-user.target
Alias=etcd3.service
EOF
# CPU名
name=`hostname`
# etcdhttp接続アドレス
initial_cluster="http://$ETCD_Server:2380"
# プロセスが開始されているかどうかを確認します
A=`ps -ef|grep /usr/bin/etcd|grep -v grep|wc -l`if[ $A -ne 0];then
# キルプロセス
killall etcd
fi
# etcd関連ファイルを削除する
rm -rf /var/lib/etcd/*
rm -rf /etc/default/etcd
# タイムゾーンを設定する
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 圧縮ファイルを決定する
if [ ! -f "etcd-v3.3.10-linux-amd64.tar.gz" ];then
echo "現在のディレクトリetcd-v3.3.10-linux-amd64.tar.gzファイルが存在しません"
exit
fi
# etcdをインストールします
tar zxf etcd-v3.3.10-linux-amd64.tar.gz -C /tmp/
cp -f /tmp/etcd-v3.3.10-linux-amd64/etcd /usr/bin/
cp -f /tmp/etcd-v3.3.10-linux-amd64/etcdctl /usr/bin/
# etcd構成ファイル
cat > /etc/default/etcd <<EOF
ETCD_NAME=$name
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_PEER_URLS="http://$ETCD_Server:2380"
ETCD_LISTEN_CLIENT_URLS="http://$ETCD_Server:2379,http://127.0.0.1:4001"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://$ETCD_Server:2380"
ETCD_INITIAL_CLUSTER="$ETCD_Servernitial_cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-sdn"
ETCD_ADVERTISE_CLIENT_URLS="http://$ETCD_Server:2379"
EOF
# 一時的なスクリプト,ユーザーとグループを追加する
cat > /tmp/foruser <<EOF
#! /bin/bash
if [ \`cat /etc/group|grep etcd|wc -l\` -eq 0 ];then groupadd -g 217 etcd;fi
if [ \`cat /etc/passwd|grep etcd|wc -l\` -eq 0 ];then mkdir -p /var/lib/etcd && useradd -g 217 -u 111 etcd -d /var/lib/etcd/ -s /bin/false;fi
if [ \`cat /etc/profile|grep ETCDCTL_API|wc -l\` -eq 0 ];then bash -c "echo 'export ETCDCTL_API=3' >> /etc/profile" && bash -c "source /etc/profile";fi
EOF
# スクリプトを実行する
bash /tmp/foruser
# サービス開始
systemctl daemon-reload
systemctl enable etcd.service
chown -R etcd:etcd /var/lib/etcd
systemctl restart etcd.service
# netstat -anpt | grep 2379
# バージョンを表示
etcdctl -v
# アクセスAPI, -■カール統計を削除します. python3 -m json.ツールはjson形式を意味します
curl $initial_cluster/version -s | python3 -m json.tool
# 一時ファイルを削除する
rm -rf /tmp/foruser /tmp/etcd-v3.3.10-linux-amd64
スクリプトを実行して出力します。
ローカルIPを入力してください
Example:192.168.0.1etcd server ip=192.168.75.129etcdctl version:3.3.10API version:2{"etcdserver":"3.3.10","etcdcluster":"3.3.0"}
etcdの値をクリアする必要がある場合は、次のコマンドを使用します
rm -rf /var/lib/etcd/member/*
etcdを再起動します
service etcd restart
etcdのすべての値を表示します。ここで、-endpointsはetcdサーバーアドレスを指定するために使用されます
etcdctl get/--prefix --keys-only --endpoints=192.168.0.88:2379
Recommended Posts