Ubuntuビルドetcd

1.はじめに#

etcdは、可用性の高い分散キー値データベースです。 etcdは内部でコンセンサスアルゴリズムとしてraftプロトコルを使用し、etcdはGo言語に基づいて実装されます。

構成の共有とサービスの検出を提供するシステムは数多くありますが、最もよく知られているのは[Zookeeper](以下、ZK)であり、ETCDは新星と見なすことができます。 ETCDには、プロジェクトの実装、コンセンサスプロトコルの理解のしやすさ、運用と保守、およびセキュリティの点で、Zookeeperよりも優れています。
etcdは、次の特徴を持つサービス検出システムです。

2、ETCD対ZK#

この記事では、ETCDと比較する代表としてZKを選択し、[Consul]プロジェクトを比較対象とは見なしません。これは、Consulの信頼性と安定性を検証するのにまだ時間がかかるためです(プロジェクトの開始者は、Consulを独自のサービスに使用せず、使用しません。 )。

3、アプリケーションシナリオ#

ZKと同様に、ETCDには次のような多くの使用シナリオがあります。

4、読み取りと書き込みのパフォーマンス#

公式サイトの【ベンチマーク】によると、2CPU、1.8Gメモリ、SSDディスクの構成で、1ノードの書き込み性能は16K QPS、読み取り後の書き込み性能は12KQPSになります。このパフォーマンスは非常に印象的です。

5、動作原理#

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プロトコルの概要はすべて終わりました。

6、ユースケース#

公開情報によると、少なくともCoreOS、Google Kubernetes、Cloud Foundry、およびGithub上の500を超えるプロジェクトがETCDを使用しています。

セブン、インターフェース#

ETCDはHTTPプロトコルを提供し、最新バージョンでGooglegRPCアクセスをサポートします。サポートされている具体的なインターフェイスは次のとおりです。

8.正式なインストール(単一ノード)#

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を使用#

etcdctl client

etcdベンダーは、ユーザーがHTTP APIに基づく必要なしに、etcdサービスを直接処理できるように、コマンドラインclient-etcdctlを提供しています。サービスをテストしたり、データベースのコンテンツを手動で変更したりすると便利です。
etcdctlでサポートされるコマンドは、データベース操作と非データベース操作に大きく分けられます。

./etcdctl -hを使用して、etcdctlの使用法を表示できます。

root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl -h

CRUD

注:** etcdのデータベース操作は、キーとディレクトリのCRUDの完全なライフサイクルの管理を中心に展開されます。 ****

etcdは、キーの編成に階層的な空間構造を採用しています(ファイルシステムのディレクトリの概念と同様)。ユーザー指定のキーは、実際にはルートディレクトリ/の下に配置されるtestkeyなどの個別の名前にすることができます。 / cluster1 / node2 / testkeyなどのディレクトリ構造を指定すると、対応するディレクトリ構造が作成されます。

set

キーの値を指定します

文法:

- 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秒後の操作です。この時点で、キーの値は消えています。

update

指定されたキーを変更します

文法:

–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が同時に更新されることを示しています!

rm

キー値を削除します。

文法:

-キーが空のディレクトリまたはキーと値のペアの場合は、ディレクトリを削除します
-ディレクトリとすべてのサブキーを再帰的に削除します
–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]

mk

指定されたキーが存在しない場合は、新しいキー値を作成します。

文法:

–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]

mkdir

指定されたキーディレクトリが存在しない場合は、新しいキーディレクトリが作成されます。

文法:

–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]

setdir

キーカタログを作成します。ディレクトリが存在しない場合は作成し、ディレクトリが存在する場合はディレクトリ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]

updatedir

既存のディレクトリを更新します。

文法:

–ttl '0'残業時間(ユニットは2番目です)、構成しないでください(デフォルトは0です)タイムアウトすることはありません。

例えば:

root@ubuntu:/opt/etcd-v3.3.10# ./etcdctl updatedir dir2

繰り返し実行してもエラーは報告されません!

rmdir

空のディレクトリ、またはキーと値のペアを削除します

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]

ls

ディレクトリ(デフォルトはルートディレクトリ)の下にキーまたはサブディレクトリを一覧表示します。サブディレクトリのコンテンツはデフォルトでは表示されません。

文法:

-出力結果をソートソートします
-再帰的ディレクトリにサブディレクトリがある場合は、内容を再帰的に出力します
- 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

データベース以外の操作##

データベース以外の操作には、バックアップ、監視、ノード管理などが含まれます。

backup

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

キー値の変化を監視し、キー値が更新されたら、指定されたコマンドを実行します。

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構成パラメーターは、コマンドラインパラメーターを介して設定することもできますが、コマンドラインで指定されたパラメーターの優先度が高く、存在する場合は、環境変数の値をオーバーライドします。

apiインターフェイス##

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

10個のワンクリックインストールスクリプト#

注:このスクリプトは、ローカルサーバーにのみインストールできます。 etcd-v3.3.10-linux-amd64.tar.gzファイルとシェルスクリプトが同じディレクトリにあることを確認してください。

スクリプトには、etcdサービスを開始するためのsystemctlコマンドが付属しています

etcd_v3.3.10.sh

冒頭の注意事項をお読みください

# /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

Ubuntuビルドetcd
UbuntuビルドSeafile
Ubuntu 18.04 LTSLAMPビルド
[Linux] Sambaサーバーのビルド(ubuntu16.04)
ubuntu16.04ビルドvimとpyt
ubuntu16.04ビルドpptpdV **サーバー
Ubuntu12.04クロスコンパイルサーバーを構築する
ubuntu1804は最新のSuricataを構築します
ubuntuビルドpython開発環境
Ubuntu16.04ビルドGitLabサーバーチュートリアル
Ubuntu18.04.1ビルドJava環境とHelloWorld
詳細なubuntu14.04ビルド(移行)hustojレコード
ubuntuでNginx-RTMPライブサーバーを構築する
Ubuntu16.04ビルドphp5.6Webサーバー環境
ubuntuでファイルサーバーを構築する
ubuntuに基づいてDiscuzフォーラムを構築する
Ubuntu16.04ビルドLAMP開発環境
ubuntu16.04でnfsサービスを構築する方法
[Linux]純粋なubuntuはパゴダパネルをすばやく構築します
ubuntuでC ++コンパイル環境を構築する
ubuntu20.04でLNMP環境を構築する手順
Ubuntuでアーム仮想オペレーティング環境を構築する
Ubuntuソフトウェア
Linux(ubuntu 12.04)
Ubuntuでpython開発環境を構築する
Minecraft Bedrock Editionサーバーを構築する(Ubuntu)
Jenkinsを使用してUbuntuで自動的にビルドする方法
クラウドノートを作成するには、Ubuntu18にLeanoteをインストールします