docker搭建etcd集群方式 bitnami/etcd
docker部署etcd集群
優(yōu)秀的文章應(yīng)該一來(lái)就先上代碼(不接受杠精反駁)
注意這是sh代碼,liunx批處理腳本
#!/bin/bash
#設(shè)置網(wǎng)絡(luò)名
network_name=etcd_network
#創(chuàng)建網(wǎng)絡(luò)
docker network create --driver bridge --subnet=10.3.36.0/16 --gateway=10.3.1.1 ${network_name}
#設(shè)置結(jié)點(diǎn)名
node1=etcd_node1
node1_ip=10.3.36.1
node2=etcd_node2
node2_ip=10.3.36.2
node3=etcd_node3
node3_ip=10.3.36.3
#設(shè)置集群口令
cluster_token=etcd_cluster
#創(chuàng)建節(jié)點(diǎn)1
docker run -d --name ${node1} \
--network ${network_name} \
--publish 12379:2379 \
--publish 12380:2380 \
--ip ${node1_ip} \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_NAME=${node1} \
--env ETCD_ADVERTISE_CLIENT_URLS=http://${node1_ip}:2379 \
--env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${node1_ip}:2380 \
--env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
--env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
--env ETCD_INITIAL_CLUSTER_TOKEN=${cluster_token} \
--env ETCD_INITIAL_CLUSTER=${node1}=http://${node1_ip}:2380,${node2}=http://${node2_ip}:2380,${node3}=http://${node3_ip}:2380 \
--env ETCD_INITIAL_CLUSTER_STATE=new \
bitnami/etcd:latest
#創(chuàng)建節(jié)點(diǎn)2
docker run -d --name ${node2} \
--network ${network_name} \
--publish 22379:2379 \
--publish 22380:2380 \
--ip ${node2_ip} \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_NAME=${node2} \
--env ETCD_ADVERTISE_CLIENT_URLS=http://${node2_ip}:2379 \
--env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${node2_ip}:2380 \
--env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
--env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
--env ETCD_INITIAL_CLUSTER_TOKEN=${cluster_token} \
--env ETCD_INITIAL_CLUSTER=${node1}=http://${node1_ip}:2380,${node2}=http://${node2_ip}:2380,${node3}=http://${node3_ip}:2380 \
--env ETCD_INITIAL_CLUSTER_STATE=new \
bitnami/etcd:latest
#創(chuàng)建節(jié)點(diǎn)3
docker run -d --name ${node3} \
--network ${network_name} \
--publish 32379:2379 \
--publish 32380:2380 \
--ip ${node3_ip} \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_NAME=${node3} \
--env ETCD_ADVERTISE_CLIENT_URLS=http://${node3_ip}:2379 \
--env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${node3_ip}:2380 \
--env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
--env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
--env ETCD_INITIAL_CLUSTER_TOKEN=${cluster_token} \
--env ETCD_INITIAL_CLUSTER=${node1}=http://${node1_ip}:2380,${node2}=http://${node2_ip}:2380,${node3}=http://${node3_ip}:2380 \
--env ETCD_INITIAL_CLUSTER_STATE=new \
bitnami/etcd:latest如何執(zhí)行
sh xxx.sh # xxx填寫(xiě)你的shell文件名
注意
如果你在執(zhí)行的時(shí)候遇到這個(gè)錯(cuò)誤
line 2: $'\r': command not found
麻煩安裝一下這個(gè)東西(不要問(wèn)為什么?)
yum -y install dos2unix* dos2unix *.*
這里說(shuō)一下配置參數(shù)情況
#docker網(wǎng)絡(luò)名 --network? #端口號(hào)可以這樣寫(xiě)-p --publish --env ALLOW_NONE_AUTHENTICATION #設(shè)置成員節(jié)點(diǎn)的別名 --env ETCD_NAME #廣播到集群中本成員的監(jiān)聽(tīng)客戶端請(qǐng)求的地址 --env ETCD_ADVERTISE_CLIENT_URLS #廣播到集群中本成員的Peer監(jiān)聽(tīng)通信地址 --env ETCD_INITIAL_ADVERTISE_PEER_URLS #客戶端請(qǐng)求的監(jiān)聽(tīng)地址列表 --env ETCD_LISTEN_CLIENT_URLS #Peer消息的監(jiān)聽(tīng)服務(wù)地址列表 --env ETCD_LISTEN_PEER_URLS #啟動(dòng)集群的時(shí)候指定集群口令,只有相同token的才能加入到同一集群 --env ETCD_INITIAL_CLUSTER_TOKEN #所有集群節(jié)點(diǎn)的地址列表 --env ETCD_INITIAL_CLUSTER
測(cè)試一下成功沒(méi)有
$docker ps CONTAINER ID ? IMAGE ? ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? ? ? CREATED ? ? ? ? ?STATUS ? ? ? ? ?PORTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NAMES 13aad2124d35 ? bitnami/etcd:latest ? "/entrypoint.sh etcd" ? 11 minutes ago ? Up 11 minutes ? 0.0.0.0:32379->2379/tcp, 0.0.0.0:32380->2380/tcp ? etcd_node3 03e368e9658e ? bitnami/etcd:latest ? "/entrypoint.sh etcd" ? 11 minutes ago ? Up 11 minutes ? 0.0.0.0:22379->2379/tcp, 0.0.0.0:22380->2380/tcp ? etcd_node2 2781e87d368d ? bitnami/etcd:latest ? "/entrypoint.sh etcd" ? 11 minutes ago ? Up 11 minutes ? 0.0.0.0:12379->2379/tcp, 0.0.0.0:12380->2380/tcp ? etcd_node1 #測(cè)試命令 $docker exec -it 2781e87d368d etcdctl member list
Etcd集群搭建實(shí)驗(yàn)
實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)環(huán)境非常簡(jiǎn)單,2 臺(tái)服務(wù)器, etcd01 主 etcd02 從。
| etcd01 | etcd02 |
|---|---|
| 192.168.1.103 | 192.168.1.104 |
下載與安裝 etcd
首先從 Yum 源上安裝
[root@bogon ~]# yum -y install etcd
查看一下版本
[root@bogon ~]# etcd --version etcd Version: 3.3.11 Git SHA: 2cf9e51 Go Version: go1.10.3 Go OS/Arch: linux/amd64
修改配置文件
編輯配置文件 /etc/etcd/etcd.conf ,可以通過(guò)如下命令查看文件內(nèi)容,主節(jié)點(diǎn)如下。
[root@bogon ~]# egrep -v "^$|^#" /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.1.103:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="etcd01" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.103:2380" ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379" ETCD_INITIAL_CLUSTER="etcd01=http://192.168.1.103:2380,etcd02=http://192.168.1.104:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new" [root@bogon ~]#
從節(jié)點(diǎn)如下。
[root@bogon ~]# egrep -v "^$|^#" /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.168.1.104:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="etcd02" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.104:2380" ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379" ETCD_INITIAL_CLUSTER="etcd01=http://192.168.1.103:2380,etcd02=http://192.168.1.104:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"
服務(wù)啟動(dòng)與查看
分別在主從節(jié)點(diǎn)上執(zhí)行如下命令啟動(dòng)服務(wù)。
[root@master etcd]# systemctl start etcd [root@master etcd]# systemctl status etcd
使用如下命令查看網(wǎng)絡(luò)進(jìn)程。
[root@bogon ~]# netstat -ntlp | grep etcd tcp 0 0 192.168.1.104:2380 0.0.0.0:* LISTEN 22061/etcd tcp6 0 0 :::2379 :::* LISTEN 22061/etcd
查看集群節(jié)點(diǎn)
[root@bogon ~]# etcdctl member list 4490eae103912db6: name=etcd01 peerURLs=http://192.168.1.103:2380 clientURLs=http://0.0.0.0:2379 isLeader=false 5038ecd3b2f796d0: name=etcd02 peerURLs=http://192.168.1.104:2380 clientURLs=http://0.0.0.0:2379 isLeader=true
查看健康狀態(tài)
[root@bogon ~]# etcdctl cluster-health member 4490eae103912db6 is healthy: got healthy result from http://0.0.0.0:2379 member 5038ecd3b2f796d0 is healthy: got healthy result from http://0.0.0.0:2379 cluster is healthy
報(bào)錯(cuò)與解決
1.cluster ID mismatch
報(bào)錯(cuò)如下
request sent was ignored (cluster ID mismatch: remote[4xxx6]=6xxxb, local=9xxxb)
解決方法
需要把master和node節(jié)點(diǎn)的/var/lib/etcd/目錄下的緩存都刪除一遍,然后重啟etcd。
2.cannot understand the cluster version
報(bào)錯(cuò)如下
cannot understand the cluster version of member 4xxx6 (not_decided is not in dotted-tri format) incompatible with current running cluster
解決方法
可能是因?yàn)榕渲梦募械?/p>
ETCD_INITIAL_CLUSTER_STATE="exist"
將其改為
ETCD_INITIAL_CLUSTER_STATE="new"
3.permission denied
報(bào)錯(cuò)如下
etcdmain: cannot access data directory: open /var/lib/etcd/default.etcd/.touch: permission denied
解決方法
關(guān)掉SElinux安全,通過(guò)執(zhí)行命令關(guān)閉,這樣重啟之后會(huì)恢復(fù)狀態(tài)。
setenforce 0
或者在在 /etc/selinux/config 中將 SELINUX=enforcing 設(shè)置成 disabled ,然后 reboot 。
systemd 默認(rèn)是以 etcd 用戶執(zhí)行的,這里需要修改 default.etcd 文件夾權(quán)限
chown etcd:etcd -R /var/lib/etcd/default.etcd
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用docker安裝部署NextCloud私人網(wǎng)盤(pán)的方法步驟
本文主要介紹了使用docker安裝部署NextCloud私人網(wǎng)盤(pán)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
docker cmd 執(zhí)行多個(gè)帶參數(shù)命令
Docker提供了CMD指令來(lái)指定容器啟動(dòng)后要執(zhí)行的命令,本文主要介紹了docker cmd 執(zhí)行多個(gè)帶參數(shù)命令,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02
基于Docker、Nginx和Jenkins實(shí)現(xiàn)前端自動(dòng)化部署
本文主要介紹了搭建Docker+Nginx+Jenkins環(huán)境,用于實(shí)現(xiàn)前端自動(dòng)化部署的流程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
關(guān)于docker部署fastapi項(xiàng)目以及日志掛載方式
這篇文章主要介紹了關(guān)于docker部署fastapi項(xiàng)目以及日志掛載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
docker部署springboot項(xiàng)目文件上傳路徑過(guò)程
文章介紹了如何使用Docker部署Spring Boot項(xiàng)目,并設(shè)置文件上傳路徑,通過(guò)兩種方式啟動(dòng)容器,一種是不掛載文件,另一種是掛載文件,掛載文件的方式可以方便地在本地服務(wù)器上查看上傳的文件2026-01-01
詳解修改docker時(shí)區(qū)及docker常用命令
這篇文章主要介紹了詳解修改docker時(shí)區(qū)及docker常用命令,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12
docker離線安裝社區(qū)版(docker-18.06.3-ce)
在一些特定的環(huán)境下,由于網(wǎng)絡(luò)限制或者其他原因,我們可能需要在Linux系統(tǒng)上進(jìn)行離線安裝Docker,本文就來(lái)介紹一下docker離線安裝社區(qū)版,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
pod污點(diǎn)taint?與容忍度tolerations詳解
這篇文章主要為大家介紹了pod污點(diǎn)taint與容忍度tolerations示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

