部署Swarm

网友投稿 270 2022-10-20

部署Swarm

1、简介

在已安装docker的基础上如果swarm集群中只有一个管理节点,该管理节点如果宕机或者离开集群环境,那么该集群就不存在了。所以在一个具有N个管理节点的集群环境中,一定有管理节点总数的50%以上的节点来处理请求和保持可用。Swarm中的管理节点都是通过实现Raft一致性算法来管理所有节点的状态。通过实现Raft Consensus Algorithm,可以确保集群中的所有任务、存储等都是一致的状态通常情况下,一个Raft 集群包括了若干个服务器。在给定的任意时间点上,每个服务器都处在以下三种状态的一种:指挥者、跟随者,或候选者。在一般操作中,一定会有一个指挥者,剩下的服务器都是跟随者。跟随者是被动的:它们自己不提交任何需求,仅仅响应指挥者和候选者提出的需求。指挥者处理所有的客户端需求(如果客户端向跟随者发送了需求,跟随者会把它转交给指挥者)。至于第三种状态——候选者——则是用来选举一个新的指挥者。Raft 用一种心跳机制来触发指挥者选举。当服务器启动时,它们先从跟随者做起,并会在接收到指挥者或候选者发送的有效RPC 协议(远程过程调用协议)之前,一直执行跟随者的工作。指挥者定时向全体跟随者发送心跳信息,以保持它们的授权。如果一个跟随者超过一定时间没有接收到心跳信息(这段时间称为“选举超时”),它就会假设指挥者已经失效,然后启动选举,来选择一个新的指挥者。

2、配置Swarm

1.初始化集群sudo docker swarm init --advertise-addr 192.168.56.1022.创建集群网络sudo docker network create -d overlay --subnet=10.0.10.0/24 --attachable well3.节点加入集群docker swarm join --token SWMTKN-1-0tixq1sc9nzs02hrinrl5710qs14b6qfz1ey2be92i6l1xde72-c7kogarn0vmobiih7f6le7fjk 192.168.56.102:23774.删除集群sudo docker swarm leave --force5.提升节点为备用管理节点(备用节点需要超过总节点半数HA生效)sudo docker node promote docker6.创建服务6.1.通过标签限制节点运行sudo docker node update --label-add env=proxy mece1sudo docker node update --label-add env=proxy mece2sudo docker service create --name zhao2 --hostname zhao2 -p 9000:5000 --network well --replicas 20 --constraint 'node.labels.env!=proxy' registry6.2.通过hostname限制节点运行sudo docker service create --name registry --hostname registry -p 5000:5000 --network zhao --replicas 4 --constraint 'node.hostname!=mece1' --constraint 'node.hostname!=mece2' registry6.3.通过label运行sudo vi /lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --insecure-registry 192.168.209.0/24 --label hostname=mastersudo systemctl daemon-reloadsudo systemctl restart dockerdocker service create --name web --replicas 4 --constraint engine.labels.hostname==master nginx7.更新服务sudo docker service update --replicas 5 --image registry registry8.服务示例8.1.nginx服务docker run -d --name nginx-proxy1 --hostname nginx-proxy1 --network test --restart=always -p 80:80 -p 443:443 -v /data/conf/nginx.conf:/etc/nginx.conf -v /data/ssl:/ssl registry.test.com/nginx:1.12.28.2.registry服务docker run -d --name registry --hostname registry --network test --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry.test.com/registry:2.08.3.portainer服务(IE访问)docker run -d --name portainer --hostname portainer --network test --restart=always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock registry.test.com/portainer:2.08.4.zookeeper服务docker run -d --name zk1.test.com --hostname zk1.test.com --network test --restart=always -e SERVER_ID=1 -e ADDITIONAL_ZOOKEEPER_1=server.1=zk1.test.com:2888:3888 -e ADDITIONAL_ZOOKEEPER_2=server.2=zk2.test.com:2888:3888 -e ADDITIONAL_ZOOKEEPER_3=server.3=zk3.test.com:2888:3888 registry.test.com/zookeeper:3.4.118.5.dubbo服务docker service create --name settlementweb-jar --hostname settlementweb-jar --network test registry.test.com/jdk:1.8u1628.6.tomcat服务docker service create --name merchantpcweb-war --hostname merchantpcweb-war --network test registry.test.com/tomcat:9.0.68.7.redis服务docker run -d --name redis1.test.com --hostname redis1.test.com --network test -v /data/redis:/data/redis/data --restart=always --ip 10.0.9.210 registry.test.com/redis:3.0.69.helathcheck使用docker run --rm -d \--name=elasticsearch \--health-cmd="curl --silent --fail localhost:9200/_cluster/health || exit 1" \--health-interval=5s \--health-retries=12 \--health-timeout=2s \elasticsearch:5.5备注: --interval=<间隔>:两次健康检查的间隔,默认为30秒 --timeout=<间隔>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认30秒 --retries=<次数>:当连续失败指定次数后,则将容器状态视为unhealthy,默认3次 --start-period=<间隔>: 应用的启动的初始化时间,在启动过程中的健康检查失效不会计入,默认0秒; (从17.05)引入

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:RestTemplate自定义请求失败异常处理示例解析
下一篇:基础镜像-Zookeeper
相关文章

 发表评论

暂时没有评论,来抢沙发吧~