Docker从入门到精通(八)

2023-09-02 15:43:51 浏览数 (1)

Etcd的集群也采用了主-从模式,通过Raft协议保证一段时间内有一个节点为主节点,其他为从节点,一旦主节点发生故障,其他节点可以自动再重新选举新的主节点

准备工作

参数名

说明

-name

设置成员节点的别名,建议为每个成员节点配置可识别的命名

-advertise-client-urls

广播到集群中本成员的监听客户端请求的地址

-initial-advertise-peer-urls

广播到集群中本成员的Peer监听通信地址

-listen-client-urls

客户端请求的监听地址列表

-listen-peer-urls

Peer消息的监听服务地址列表

-initial-cluster-token

启动集群的时候指定集群口令,只有相同token的几点才能加入到同一集群

-initial-cluster

所有集群节点的地址列表

-initial-cluster-state

初始化集群状态,默认为new,也可以指定为exi-string表示要加入到一个已有集群

节点

地址

node1

192.168.1.1

node2

192.168.1.2

node3

192.168.1.3

本人只有一台机器,因此需要需要自定义网络,然后创建容器指定对应的ip

创建自定义docker网络,docker默认的网络只能自动分配ip,无法手动分配

代码语言:javascript复制
# docker network create --subnet=192.168.0.0/16 etcdnet 
代码语言:javascript复制
代码语言:javascript复制
查看网络
代码语言:javascript复制
代码语言:javascript复制
$ docker network ls
NETWORK ID     NAME                         DRIVER    SCOPE
1cd042f40976   bridge                       bridge    local
4052e9cd1bb0   docker-mac-network_default   bridge    local
d5451df0790a   etcdnet(自定义)               bridge    local
07dad153dbca   host                         host      local
da018c990a38   none                         null      local

第一步:拉取镜像

代码语言:javascript复制
$docker pull quay.io/coreos/etcd:v3.0.4

第二步:创建第一个节点

代码语言:javascript复制
docker run -d 
-p 2479:2379 
-p 2381:2380 
--name node1 
--network=etcdnet 
--ip 192.168.1.1 
quay.io/coreos/etcd:v3.0.4 
etcd 
-name node1 
-advertise-client-urls http://192.168.1.1:2379 
-initial-advertise-peer-urls http://192.168.1.1:2380 
-listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 
-initial-cluster-token etcd-cluster 
-initial-cluster "node1=http://192.168.1.1:2380,node2=http://192.168.1.2:2380,node3=http://192.168.1.3:2380" 
-initial-cluster-state new

第三步:创建第二个节点

代码语言:javascript复制
docker run -d 
-p 2579:2379 
-p 2382:2380 
--name node2 
--network=etcdnet 
--ip 192.168.1.2 
quay.io/coreos/etcd:v3.0.4 
etcd 
-name node2 
-advertise-client-urls http://192.168.1.2:2379 
-initial-advertise-peer-urls http://192.168.1.2:2380 
-listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 
-initial-cluster-token etcd-cluster 
-initial-cluster
"node1=http://192.168.1.1:2380,node2=http://192.168.1.2:2380,node3=http://192.168.1.3:2380" 
-initial-cluster-state new

第四步:创建第三个节点

代码语言:javascript复制
docker run -d 
-p 2679:2379 
-p 2383:2380 
--name node3 
--network=etcdnet 
--ip 192.168.1.3 
quay.io/coreos/etcd:v3.0.4 
etcd 
-name node3 
-advertise-client-urls http://192.168.1.3:2379 
-initial-advertise-peer-urls http://192.168.1.3:2380 
-listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 
-initial-cluster-token etcd-cluster 
-initial-cluster "node1=http://192.168.1.1:2380,node2=http://192.168.1.2:2380,node3=http://192.168.1.3:2380" 
-initial-cluster-state new

第五步:验证

代码语言:javascript复制
$ docker exec -it c28b95508cbf etcdctl member list
288692ffb8a93e70: name=node3 peerURLs=http://192.168.1.3:2380 clientURLs=http://192.168.1.3:2379 isLeader=false
57641140d8f810cc: name=node1 peerURLs=http://192.168.1.1:2380 clientURLs=http://192.168.1.1:2379 isLeader=true
8dc1136f77aa7382: name=node2 peerURLs=http://192.168.1.2:2380 clientURLs=http://192.168.1.2:2379 isLeader=false
代码语言:javascript复制
代码语言:javascript复制
第六步:操作验证
代码语言:javascript复制
$ docker exec -it c28b95508cbf sh
/ # etcdctl set testkey testvalue
testvalue
//另外一台容器获取
$ docker exec -it e3b36f9c0c5c sh
/ # etcdctl get testkey
testvalue

0 人点赞