目录
- docker部署etcd集群
- 如何执行
- 测试一下成功没有
- Etcd集群搭建实验
- 实验环境
- 下载与安装 etcd
- 修改配置文件
- 服务启动与查看
- 报错与解决
- 总结
docker部署etcd集群
优秀的文章应该一来就先上代码(不接受杠精反驳)
注意这是sh代码,liunx批处理脚本
#!/bin/bash
#设置网络名
network_name=etcd_network
#创建网络
docker network create –driver bridge –subnet=10.3.36.0/16 –gateway=10.3.1.1 ${network_name}
#设置结点名
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
#设置集群口令
cluster_token=etcd_cluster
#创建节点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
#创建节点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
#创建节点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
如何执行
sh xxx.sh
# xxx填写你的shell文件名
注意
如果你在执行的时候遇到这个错误
line 2: $'\\r': command not found
麻烦安装一下这个东西(不要问为什么?)
yum -y install dos2unix*
dos2unix *.*
这里说一下配置参数情况
#docker网络名
–network
#端口号可以这样写-p
–publish
–env ALLOW_NONE_AUTHENTICATION
#设置成员节点的别名
–env ETCD_NAME
#广播到集群中本成员的监听客户端请求的地址
–env ETCD_ADVERTISE_CLIENT_URLS
#广播到集群中本成员的Peer监听通信地址
–env ETCD_INITIAL_ADVERTISE_PEER_URLS
#客户端请求的监听地址列表
–env ETCD_LISTEN_CLIENT_URLS
#Peer消息的监听服务地址列表
–env ETCD_LISTEN_PEER_URLS
#启动集群的时候指定集群口令,只有相同token的才能加入到同一集群
–env ETCD_INITIAL_CLUSTER_TOKEN
#所有集群节点的地址列表
–env ETCD_INITIAL_CLUSTER
测试一下成功没有
$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
#测试命令
$docker exec -it 2781e87d368d etcdctl member list
Etcd集群搭建实验
实验环境
实验环境非常简单,2 台服务器, etcd01 主 etcd02 从。
下载与安装 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 ,可以通过如下命令查看文件内容,主节点如下。
[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 ~]#
从节点如下。
[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\”
服务启动与查看
分别在主从节点上执行如下命令启动服务。
[root@master etcd]# systemctl start etcd
[root@master etcd]# systemctl status etcd
使用如下命令查看网络进程。
[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
查看集群节点
[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
查看健康状态
[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
报错与解决
1.cluster ID mismatch
报错如下
request sent was ignored (cluster ID mismatch: remote[4xxx6]=6xxxb, local=9xxxb)
解决方法
需要把master和node节点的/var/lib/etcd/目录下的缓存都删除一遍,然后重启etcd。
2.cannot understand the cluster version
报错如下
cannot understand the cluster version of member 4xxx6 (not_decided is not in dotted-tri format) incompatible with current running cluster
解决方法
可能是因为配置文件中的
ETCD_INITIAL_CLUSTER_STATE=\”exist\”
将其改为
ETCD_INITIAL_CLUSTER_STATE=\”new\”
3.permission denied
报错如下
etcdmain: cannot access data directory: open /var/lib/etcd/default.etcd/.touch: permission denied
解决方法
关掉SElinux安全,通过执行命令关闭,这样重启之后会恢复状态。
setenforce 0
或者在在 /etc/selinux/config 中将 SELINUX=enforcing 设置成 disabled ,然后 reboot 。
systemd 默认是以 etcd 用户执行的,这里需要修改 default.etcd 文件夹权限
chown etcd:etcd -R /var/lib/etcd/default.etcd
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持悠久资源网。