etcd は、主に共有構成とサービス検出に使用される、可用性の高いキー値ストレージ システムです。 etcd は CoreOS によって開発および保守されています。ZooKeeper と Doozer からヒントを得ています。Go で記述されており、強力な一貫性を確保するために Raft コンセンサス アルゴリズムを通じてログのレプリケーションを処理します。 Raft は、分散システムでのログの複製に適した、スタンフォード大学の新しい一貫性アルゴリズムです。Raft は、選挙を通じて一貫性を実現します。Raft では、どのノードもリーダーになることができます。 Google のコンテナ クラスタ管理システム Kubernetes、オープンソース PaaS プラットフォーム Cloud Foundry、CoreOS の Fleet はすべて etcd を広く使用しています。 etcdの機能シンプル: curl でアクセス可能なユーザー API (HTTP+JSON) 明確に定義されたユーザー向け API (gRPC) セキュリティ: オプションの SSL クライアント証明書認証 高速: インスタンスあたり毎秒1000回の書き込み操作 信頼性: 一貫性を確保するために Raft を使用する etcdが独自の高可用性クラスタを構築するには、主に3つの形式があります。1) 静的検出: Etcd クラスター内のノードを事前に把握し、起動時に Etcd の各ノードのアドレスを直接指定します。2) Etcd 動的検出: 既存の Etcd クラスターをデータ相互作用ポイントとして使用し、新しいクラスターを拡張するときに既存のクラスターを介してサービス検出メカニズムを実装します。3) DNS 動的検出: DNS クエリを介して他のノードのアドレス情報を取得します。 この建設の基本環境基盤OS: Centos7 # docker pull quay.io/coreos/etcd マシン リソースが限られているため、1 台のマシンに 3 つのコンテナーを構成し、そのマシンにサブネットワークを作成しました。3 つのコンテナーは 1 つのネットワークにあります。 # docker ネットワーク作成 --subnet=192.167.0.0/16 etcdnet 次に、クラスターを作成するために 2 つの方法を使用しました。1. 3 台のサーバーを 1 台ずつクラスターに追加します。2. 3 台のサーバーを同時にクラスターに追加します。次のコマンドは A でマークされ、マシン A で実行され、同様に B および C でも実行されます。 1. クラスターにサーバーを1つずつ追加するA は、コンテナ/サーバー A 上で autumn-client0 という名前の ETCD インスタンスを実行します。ステータスが新規であり、独自の IP のみが「-initial-cluster」にあることに注意してください。 # docker run -d -p 2379:2379 -p 2380:2380 --net etcdnet --ip 192.167.0.168 --name etcd0 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client0 -advertise-client-urls http://192.167.0.168:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.168:2380 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380" -initial-cluster-state new パラメータの説明 --data-dir はノードのデータ保存ディレクトリを指定します。データには、ノード ID、クラスター ID、クラスター初期化構成、スナップショット ファイルが含まれます。--wal-dir が指定されていない場合は、WAL ファイルも保存されます。 —wal-dir は、ノードの WAL ファイルの保存ディレクトリを指定します。このパラメータを指定すると、WAL ファイルは他のデータ ファイルとは別に保存されます。 --name ノード名 --initial-advertise-peer-urls は、クラスターに他のノードの URL を通知します。 — listen-peer-urlsは他のノードとの通信のためのURLをリッスンします — Advertise-client-urlsはサービスURLであるクライアントURLを通知します — 初期クラスタートークン クラスター ID — 初期クラスター内のすべてのノード 設定ファイルの説明、例: # [メンバー] # ノード名 ETCD_NAME=node1 #データ保存場所 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_COUNT="10000" #ETCD_ハートビート間隔="100" #ETCD_ELECTION_TIMEOUT="1000" #他の Etcd インスタンスのアドレスをリッスンする ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" # クライアントアドレスをリッスンする ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" #ETCD_CORS="" # #[クラスタ] # 他の Etcd インスタンスのアドレスに通知する ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380" # 別の ETCD_NAME (例: test) を使用する場合は、この名前の ETCD_INITIAL_CLUSTER 値を設定します (例: "test=http://...") # クラスター内のノードアドレスを初期化します ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380,etcd2=http://etcd2:2380" # クラスターのステータスを初期化します。new は新しい ETCD_INITIAL_CLUSTER_STATE="new" を作成することを意味します。 # クラスタートークンを初期化する ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster" # クライアントアドレスに通知 ETCD_ADVERTISE_CLIENT_URLS=http://node1:2379,http://node1:4001 A サーバーAのetcdサービスで、APIを呼び出して新しいノードを追加します: 192.167.0.170 # curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.167.0.170:2480"]}' B は、コンテナ/サーバー B 上で autumn-client1 という名前の ETCD インスタンスを実行します。そのステータスは既存であり、以前の IP と独自の IP は「-initial-cluster」にあることに注意してください。 #docker run -d -p 2479:2479 -p 2480:2480 ---name etcd1 quay.io.io.io.io.io.io.io.io.io.io.io.io.io. -advertise -client -urls http:///192.167.0. 79 -Initial-Advertise-Peer-urls http://192.167.0.170:2380 -Listen-Peer-Urls http://0.0.0.0:2480 -Initial-Cluster-Token etcd etcd-Cluster-Cluster-Cluster0 = autumn-Client0 = htp://192.0 .1667.16 = http://192.167.0.170:2480 " - initial-cluster-stateが存在します A サーバーAのetcdサービスで、APIを呼び出して新しいノードを追加します: 192.168.7.172 # curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.167.0.172:2580"]}' C サーバー C で autumn-client2 という名前の ETCD インスタンスを実行します。そのステータスが既存であることに注意してください。"-initial-cluster" には、以前のすべてのノードの IP アドレスとそれ自身の IP アドレスが含まれています。 #docker run -d -p 2579:2579 -p 2580:2580 - name etd quay.io.io.io.io.io.io.name-client-urls http://192.167.0.172:2579 -Listen-Client-url ls http://192.167.0.172:2580 -Listen-Peer-urls http://0.0.0.0:2380-Initial-Cluster-Token etcd-Cluster-Cluster "autumn-client0 = http://192.167.0.0.168:2380:2380 7.0.170:2480、autumn-client2 = http://192.167.0.172:2580 "-Initial-Cluster-state既存 2. クラスターにサーバーを追加する(「-initial-cluster」にはすべてのノードのIPアドレスが含まれており、ステータスは新規です) Aで実行 #docker run -d -p 2379:2379 -p 2380:2380 - restart = altion -net etdnet -ip 192.167.0.168 - name etcd0 quay.io/coreos/etcd ISTEN-CLIENT-URLS http://0.0.0.0:2379 -Initial-Advertise-Peer-Urls http:///192.167.0.168:2380 -Listen-Peer-Urls http://0.0.0.0:2380 -intial-gruster-tekented-cluster-tekented-cluster-tekented eetteentなど//192.167.0.168:2380、autumn-client1=http://192.167.0.170:2480,Autumn-Client2=http:///192.167.0.172:2580 -initial-Cluster-State New Bで実行 #docker run -d -p 2479:2479 -p 2480:2480 - restart = altion -net etdnet-ip 192.167.0.170 ISTEN-CLIENT-URLS http://0.0.0.0:2479 -Initial-Advertise-Peer-Urls http:///192.167.0.170:2480 -Listen-Peer-Urls http://0.0.0.0:2480-Ininitial-Cluster-Tekentedted-cluster-tekented eetteentなど//192.167.0.168:2380、autumn-client1=http://192.167.0.170:2480,Autumn-Client2=http:///192.167.0.172:2580 -initial-Cluster-State New Cで実行 #docker run -d -p 2579:2579 -p 2580:2580 - restart = altion -net etdnet -ip 192.167.0.172 - name etcd2 quay.io/coreos/etcd ISTEN-CLIENT-URLS http://0.0.0.0:2579 -Initial-Advertise-Peer-Urls http:///192.167.0.172:2580 -Listen-Peer-Urls http://0.0.0.0:2580-Ininitial-Cluster-Tekented-Cluster-Tekented eetteentなど//192.167.0.168:2380、autumn-client1=http://192.167.0.170:2480,Autumn-Client2=http:///192.167.0.172:2580 -initial-Cluster-State New クラスターの検証。 2 つの方法で作成されたクラスターは、次の方法で検証できます。 1. クラスター メンバーを確認します。クラスター内の各マシンのメンバーをチェックすると、結果は同じになるはずです。 [root@localhost ~]# curl -L http://127.0.0.1:2379/v2/members {"メンバー":[{"id": "1A661F2B997BA39"、 "name": "autumn-client0"、 "Peerurrs":["h。 : "4932C8EA462E079C"、 "name": "autumn-client2"、 "peerurls":[http://192.167.0 "]、" clienturls ":[" http://192.167.0.172:2579 " 1741e "、" name ":" Autumn-Client1 "、" Peerurls ":[" http://192.167.0.170:2480:2480 "]、「clienturls」:[http://192.167.0.170:2479]}}}} 2. 1台のマシンでデータを追加し、他のマシンでデータを確認します。結果は同じになるはずです。Aで実行 [root@localhost ~]# curl -L http://127.0.0.1:2379/v2/keys/message -XPUT -d value="Hello autumn" {"action":"set","node":{"key":"/message","value":"こんにちは秋","modifiedIndex":13,"createdIndex":13},"prevNode":{"key":"/message","value":"こんにちは世界1","modifiedIndex":11,"createdIndex":11}} BとCを実行する [root@localhost ~]# curl -L http://127.0.0.1:2379/v2/keys/message {"action":"get","node":{"key":"/message","value":"こんにちは秋","modifiedIndex":13,"createdIndex":13}} etcd API インターフェース基本操作 API: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/api.md クラスター構成 API: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/members_api.md 認証 API: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/auth_api.md 設定項目: https://github.com/coreos/etcd/blob/master/Documentation/op-guide/configuration.md https://coreos.com/etcd/docs/latest/runtime-configuration.html クラスタリング https://coreos.com/etcd/docs/latest/runtime-configuration.html https://coreos.com/etcd/docs/latest/ https://coreos.com/etcd/docs/latest/admin_guide.html#災害復旧 標準の RESTful インターフェースを使用し、http プロトコルと https プロトコルの両方をサポートします。 サービスの登録と検出
サービスが開始されると、etcd に登録され、リスニング ポート、現在の重み係数などの情報が報告され、この情報の ttl 値が設定されま す。 サービスは、TTL 期間内に重み係数などの情報を定期的に報告します。 クライアントがサービスを呼び出すと、etcd から情報を取得し、呼び出しを行って、サービスが変更されたかどうかを監視します (watch メソッドを通じて実装されます)。 一方、クライアント側では、各変更から取得した重み係数を使用して、クライアント側で重み付け呼び出し戦略を実装し、バックエンド サービスの負荷分散を保証します。 上記は、Docker マイクロサービスの ETCD クラスターの設定に関するチュートリアルの詳細な内容です。Docker マイクロサービスの ETCD クラスターの設定の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: HTML ファイルにファイルの内容を含める方法の概要
序文最近、古いプロジェクトから残ったいくつかの SQL 最適化の問題に対処するのに忙しくしています。...
CSS3 パターン ギャラリーこの CSS3 パターン ライブラリには、純粋な CSS3 を使用して...
UPD 2020.2.26 現在、Ubuntu 20.04 LTSはまだリリースされていないため、チ...
導入データベースに接続するためにJDBCを使用することに慣れている場合は、データベースに接続するため...
目次利点1: diffアルゴリズムの最適化利点2: ホイスト静的静的リフティング利点3: cache...
目次サーバー計画1. システムコンポーネントをインストールする2. fastdfsをインストールする...
目次物語の始まりvimをインストールし、hadoop-hive.envを編集します。不注意で回避しま...
基本的な3列レイアウト 。容器{ ディスプレイ: フレックス; 幅: 500ピクセル; 高さ: 20...
目次導入従来のトランジションアニメーションCSS トランジションアニメーションjsアニメーション従来...
目次PagodaをインストールするPythonランタイム環境を構成するPythonをインストールする...
HTML入門ハイパーテキスト マークアップ言語: ハイパーテキスト マークアップ言語ハイパーテキスト...
データ URI スキームを使用すると、HTML、CSS、Javascript などで使用できるインラ...
オープンソース データベース アーキテクチャの設計原則01. 技術の選択最も使い慣れていて、最大限に...
百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...
目次序文LEDトリガー探索を始めるLEDデバイス登録LEDディレクトリ類推によって理解するクラスディ...