Docker swarm 集群配置

一、服务调用关系

 

 

 

 

二、服务器环境

 

 

 

三、软件环境

3.1 安装docker

yum  -y  install   docker

systemctl  start  docker
systemctl  enable  docker

 

ExecStart=/usr/bin/dockerd -H 0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1024000 --default-ulimit memlock=128849018880 --default-ulimit core=-1 --default-ulimit nproc=-1 --default-ulimit stack=-1 --default-ulimit nofile=1024000 --default-ulimit memlock=128849018880 --default-ulimit core=-1 --default-ulimit nproc=-1 --default-ulimit stack=-1 --insecure-registry=172.16.230.22 --insecure-registry=172.16.230.23 --insecure-registry=172.16.230.24 --insecure-registry=172.16.230.31
ExecReload=/bin/kill -s HUP $MAINPID

 

3.2 防火墙关闭

systemctl stop  firewalld

systemctl  disable  firewalld

 

3.3 linux 系统系统优化

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 255983
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 655350
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

3.4 各个节点 docker  pull  swarm  下载swarm镜像

docker  pull  swarm

 

四、docker swarm集群部署

4.1 master创建Swarm(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥)

[root@master1 ~]# docker swarm init --advertise-addr 172.16.230.22
Swarm initialized: current node (0dgfdax3s09w5gk5zxeetvzpf) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-54g6mt7e30979f6jyikaqgokqrgq16irkqdo7fo7av22e8a9uv-5rf4m77xep55sdpy9d4xkx6l9 172.16.230.22:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 

注:上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。 其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

 

通过docker info 可以查看docker swarm 集群信息

Swarm: active
  NodeID: 0dgfdax3s09w5gk5zxeetvzpf
  Is Manager: true
  ClusterID: ocewqjt24jqcil1y0ugmv4v8z
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789

 

Swarm:active  启动swarm集群

Managers:1   主节点1个

Nodes:1      node节点1个

 

启动docker swarm之后可以在host上看到启动了2个端口:2377和7946,2377作为cluster管理端口,7946用于节点发现

 

 

4.2 添加node节点到swarm集群中

Node1节点:
docker swarm join --token SWMTKN-1-54g6mt7e30979f6jyikaqgokqrgq16irkqdo7fo7av22e8a9uv-5rf4m77xep55sdpy9d4xkx6l9 172.16.230.22:2377

 

Node2节点:
docker swarm join --token SWMTKN-1-54g6mt7e30979f6jyikaqgokqrgq16irkqdo7fo7av22e8a9uv-5rf4m77xep55sdpy9d4xkx6l9 172.16.230.22:2377

 

4.3 master节点查看集群

Master节点: MANAGER STATUS状态 master1 为leader, 其他node节点为空

 

 

 

4.4  Manager管理节点宕机后其他管理节点仍然可以使用管理

intermal distributed state store:内部分布式状态存储同步共享到每个节点。

Manager:多个Manager已Raft来通过机制的选举,进行高可用。

raft:通常通过投票的方式进行选举,一般是奇数制的节点。

 

 

 

 

 

 

如果swarm失去法定人数,swarm不能自动恢复,工作节点上的任务继续运行,不受影响,但无法执行管理任务,包括扩展或更新服务,加入或删除节点。恢复的最佳方式是将丢失的leader节点重新联机。如果不可能,唯一方法是使用—force-newcluster管理节点的操作,这将去除本机之外的所有管理器身份。

docker swarm init --force-new-cluster --advertise-addr 172.16.230.22:2377

 

赋值其他工作节点为管理节点

docker node promote  node1
docker node promote  node2 

 

再次查看节点:

 

 

五、部署docker network overlay网络

docker network的好处是:在同一个网络上的容器之间可以相互通信, 创建 overlay网络名称为 senyint-overlay ,子网 10.0.1.0/24网段

[root@master1 ~]# docker network create -d overlay senyint-overlay --subnet 10.0.1.0/24
n91ydjdmqse6n16668vwjm4va

 

六、 部署应用

docker service create --network senyint-overlay --replicas=3 --name hie-logger  -p 30006:80 172.16.230.31/hie4.0/hie-logger:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-consumer-proxy  -p 30002:80 172.16.230.31/hie4.0/hie-consumer-proxy:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-mq-router  -p 30003:80  172.16.230.31/hie4.0/hie-mq-router:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-producer-adapter  -p 30004:80  172.16.230.31/hie4.0/hie-producer-adapter:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-producer-proxy  -p 9100:80  172.16.230.31/hie4.0/hie-producer-proxy:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-gateway  -p 10000:80  172.16.230.31/hie4.0/hie-gateway:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name oauth-server  -p 6001:80  172.16.230.31/hie4.0/oauth-server:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-rest-server  -p 1003:80 172.16.230.31/hie4.0/hie-rest-server:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name web-admin-server  -p 7001:80  172.16.230.31/hie4.0/web-admin-server:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hie-service-proxy  -p 9001:80 172.16.230.31/hie4.0/hie-service-proxy:202004291700
sleep 50
docker service create --network senyint-overlay --replicas=3 --name hiefrontend  -p 8888:80  172.16.230.31/hie4.0/hiefrontend:202004291700

 

七、 查看、更新、删除、扩容

查看部署了多少服务:
      docker  service  ls

查看服务具体信息:
      docker  service  ps   服务名

扩展服务(扩展3个副本):
      docker  service  scale   服务名=3

更新服务:
      docker  service  update  --image  172.16.230.31/hie4.0/xxxxx:20200430  服务名

强制重启服务
  docker service update --force 服务名

 

八、故障

8.1  docker service ls 副本数正常, 但是container 启动报错,nacos服务发现只有一个实例

 

 

 

 

nacos中 发现了一个 web-amdin-server 实例, 但是在 docker swarm中 启动了2个,通常是其他两个实例启动错误, 和服务的启动顺序有关, 可以删除 docker service rm 服务名, 重现建立

 

7.2  服务的container中有两个IP地址, 注册到nacos中时,注册IP是ingress, 访问是overlay 网络,所以rcp 调用不通, 需要研发修改配置文件,指定网卡或者网段。

7.3  服务之间的调用使用服务名,例如nginx,  但是nginx服务必须在 hie-rest-server 和 web-admin-server oauth-server 之后启动,否则telnet能通, 但是无法调用通。

 

posted @ 2020-05-06 17:09  fengjian1585  阅读(565)  评论(0编辑  收藏  举报