Dockerを使用して高利用可能なETCDクラスタを展開する
etcdは、分散システムまたはマシンのクラスタによってアクセスされる必要があるデータを格納する信頼性の高い方法を提供する、強く一貫した、分散キー値ストアです.それは優雅にネットワークパーティションの間、リーダー選挙を扱い、リーダーノードでさえマシン故障を許容することができます.
このポストでは、DockerとDockerのコンポジションを使用してETCDクラスタを展開する方法を見ます.
必要条件
構成概要
金研
nginxの設定は非常に簡単です.つの上流のセクションを作成して、我々のETCDサーバ名を宣言する必要があります.
upstream etcd_servers {
least_conn;
server etcd-00:2379 max_fails=3 fail_timeout=5s;
server etcd-01:2379 max_fails=3 fail_timeout=5s;
server etcd-02:2379 max_fails=3 fail_timeout=5s;
}
注意: Dockerを実行しているので、サーバの名前は内部のDNSによって解決されます.名前はDocker Compositionで宣言されたサービスの名前です.YML ( ETCD - 00 , ETCD - 01 , ETCD - 02 )さて、サーバのセクションを宣言する必要があります.
server {
listen 2379;
proxy_pass etcd_servers;
}
最終的な設定は次のようになります.worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
stream {
log_format basic '$time_iso8601 $remote_addr '
'$protocol $status $bytes_sent $bytes_received '
'$session_time $upstream_addr '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /dev/stdout basic;
upstream etcd_servers {
least_conn;
server etcd-00:2379 max_fails=3 fail_timeout=5s;
server etcd-01:2379 max_fails=3 fail_timeout=5s;
server etcd-02:2379 max_fails=3 fail_timeout=5s;
}
server {
listen 2379;
proxy_pass etcd_servers;
}
}
電総研
Etcdをclusterモードで設定するには、各コンテナに次の設定を指定する必要があります.
command:
- etcd
- --name=etcd-02
- --data-dir=data.etcd
- --advertise-client-urls=http://etcd-02:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd-02:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd-00=http://etcd-00:2380,etcd-01=http://etcd-01:2380,etcd-02=http://etcd-02:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster-1
ここでhere
Dockerを使ったETCDクラスタの配備
最初のステップは リポジトリをクローン化することです.
git clone https://github.com/garutilorenzo/docker-etcd-cluster.git
次に、環境変数をリポジトリに入力してください.cd docker-etcd-cluster
docker-compose up -d
では、環境の状態を確認し、コンテナの準備を待ちましょう.docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------
etcd_etcd-00_1 etcd --name=etcd-00 --data ... Up 2379/tcp, 2380/tcp
etcd_etcd-01_1 etcd --name=etcd-01 --data ... Up 2379/tcp, 2380/tcp
etcd_etcd-02_1 etcd --name=etcd-02 --data ... Up 2379/tcp, 2380/tcp
etcd_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:2379->2379/tcp,:::2379->2379/tcp, 80/tcp
this環境をテストする
環境をテストするには、 がインストールされている必要があります.
Pipenvをインストールしたら、
pipenv shell
pip install -r requirements.txt
python test/etcd-test.py
hey key1
hey key2
NGNXサービスのログをチェックし、ETCDホストにリダイレクトされたトラフィックを確認してください.docker-compose logs -f nginx
Attaching to etcd_nginx_1
nginx_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx_1 | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
nginx_1 | 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
nginx_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
nginx_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
nginx_1 | 2021-10-08T09:41:23+00:00 172.28.0.1 TCP 200 422 665 0.052 172.28.0.3:2379 "665" "422" "0.000"
nginx_1 | 2021-10-08T09:41:24+00:00 172.28.0.1 TCP 200 422 665 0.046 172.28.0.2:2379 "665" "422" "0.000"
nginx_1 | 2021-10-08T09:50:56+00:00 172.28.0.1 TCP 200 422 665 0.029 172.28.0.4:2379 "665" "422" "0.000"
pipenvドッキングス
ETCDクラスタをDocker クラスタに配備するには、次の手順に従います.
docker stack deploy -c etcd-stack.yml etcd
展開の状態を確認します.docker stack ps etcd
mx6fvfwye547 etcd_etcd-00.1 quay.io/coreos/etcd:v3.5.0 node-2 Running Running 3 hours ago
wybd7n4oitae etcd_etcd-01.1 quay.io/coreos/etcd:v3.5.0 node-4 Running Running 3 hours ago
rmlycc3uvc8t etcd_etcd-02.1 quay.io/coreos/etcd:v3.5.0 node-2 Running Running 3 hours ago
rexh1smoalpo etcd_nginx.1 nginx:alpine node-2 Running Running 21 hours ago
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
1u709kzgmo2b etcd_etcd-00 replicated 1/1 quay.io/coreos/etcd:v3.5.0
m7ze76xi58ww etcd_etcd-01 replicated 1/1 quay.io/coreos/etcd:v3.5.0
1535r562g3az etcd_etcd-02 replicated 1/1 quay.io/coreos/etcd:v3.5.0
v8n8qlo3dm30 etcd_nginx replicated 1/1 nginx:alpine *:2379->2379/tcp
あなたがswarmセットアップをテストしたいならば、開いたtest/etcdテスト.あなたのDocker群クラスタ(またはあなたのLBのIP)のサーバーの1つのIPで、そして、127.0.0.1を変えて、テストを実行してください.Reference
この問題について(Dockerを使用して高利用可能なETCDクラスタを展開する), 我々は、より多くの情報をここで見つけました https://dev.to/garutilorenzo/deploy-a-high-available-etcd-cluster-using-docker-2n1fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol