docker swarm 集群搭建和臫servoce对服务扩容
层次关系
docker 用来搭建容器,一个个容器自己搭建累,
docker-compose 来批量运行容器,形成一个项目,项目需要高可用,需要集群化
docker swarm来对docker集群进行编排管理的,后期用k8s代替swarm,基本十台左右的集群 没必要用k8s,用swarm也可以.
ca Display and rotate the root CA #显示swarm的证书
init Initialize a swarm
--advertise-addr string Advertised address (format: <ip|interface>[:port]) 给swarm添加一个Ip(这里可以选私网也可以选公网,私网流量免费)
--autolock Enable manager autolocking (requiring an unlock key to start a stopped manager)
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--data-path-port uint32 Port number to use for data path traffic (1024 - 49151). If no value is set
or is set to 0, the default port (4789) is used.
--default-addr-pool ipNetSlice default address pool in CIDR format (default [])
--default-addr-pool-mask-length uint32 default address pool subnet mask length (default 24)
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
--external-ca external-ca Specifications of one or more certificate signing endpoints
--force-new-cluster Force create a new cluster from current state
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--max-snapshots uint Number of additional Raft snapshots to retain
--snapshot-interval uint Number of log entries between Raft snapshots (default 10000)
--task-history-limit int Task history retention limit (default 5)
join Join a swarm as a node and/or manager
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--token string Token for entry into the swarm
join-token docker swarm join-token [OPTIONS] (worker|manager) 显示加入管理节点或者工作节点的令牌
-q, --quiet Only display token
--rotate Rotate join token
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm
swarm 节点 分管理节点(Manager)和工作节点(Worker)
只有manager才能进行操作配置,manager之间相互通信相互管理,manager控制worker,但是worker不能控制manager
swarm 根据Raft算法一致性,需要至少3个管理节点运行集群服务才能正常运行
swarm的命令如下
这里要清楚一点 集群就是多台服务器,如果按照三主三从的原则,就是6台服务器, 那么假如第一台服务器,私网ip为172.18.0.2
那么docker swarm init --advertise-addr 172.18.0.2 就会把这台服务器创建成管理节点的master,另外可以通过提示得到加入工作节点和新增管理节点的命令
第二台机器粘贴 docker swarm join --token SWMTKN-1-2rv9be2a6dfyodnbp4p954ya40ai6jl2h5qu6m4duc1zd9iged-91nqungv5xgu3u5lfo4y3sdq7 172.18.0.2:2377
就会变成工作节点
通过docker node ls可以看到有leader标识为管理节点
同时在第一台管理节点上 通过打印docker swarm join-token worker/manager,会显示加入管理和工作节点的命令,再其他的服务器粘贴即可加入对应节点
docker swarm join-token worker
docker swarm join --token SWMTKN-1-2rv9be2a6dfyodnbp4p954ya40ai6jl2h5qu6m4duc1zd9iged-91nqungv5xgu3u5lfo4y3sdq7 172.18.0.2:2377
docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2rv9be2a6dfyodnbp4p954ya40ai6jl2h5qu6m4duc1zd9iged-2371e8napgmtn05v8bqkrannm 172.18.0.2:2377
reachable和leader都是管理节点, reachable算是leader的备份管理节点,一旦leader崩溃,reachable节点会升为leader,而leader重新上线后会变为reachable
Raft协议 集群可用,至少要3个主节点,集群在Raft协议下运行的前提是 至少要>1台的管理节点存活.
swarm leave 如果要把工作节点改成管理节点,可以先用leave命令,然后生成加入管理节点的令牌
对任何一个节点使用了 leave就意味着离开集群,过一会集群中 docker node ls命令会看到显示down
swarm 的网络模式 PublishMode,ingress,Overlay
Overlay: 4台服务器的集群,会有4个ip,内部的容器也无法ping通,通过Overlay模式会把4台主机加入到一个大的虚拟网络中,这样他们彼此之间可以相互访问
ingress: Overlay的加强版,具有负载均衡的功能
看下面的docker service 起来的服务,一台机子上运行了5个tomcat服务
5个服务并到了一个A类的内网网段中去了.
docker service
swarm形成的集群提供了服务的概念,但是他的优点还在于扩容便捷.比如平时三主三从,突然访问量变大需要扩容到五主五从,那么可以通过创建服务副本的概念瞬间扩容,这里就需要用到docker service
service的大致命令如下
Commands:
create Create a new service 增 --mode string replicated, global, replicated-job, or global-job) (default "replicated")
创建的任务以何时模式启动,默认是副本模式,只在服务的副本里运行启动,global是不分副本还是原生,随机都可以启动
inspect Display detailed information on one or more services 查
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services 删
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services 和下面 update ----replicas功能一样,用来扩容和缩容服务副本
update Update a service 改 --replicas uint 用来创建副本个数
启动一个docker service 语法:docker service create -p 8080:8081 --name sql mysql:5.7
语法其实和docker run 一模一样 镜像不存在也会自动去拉镜像
而docekr run启动的容器无法扩缩容器的功能,所以如果想要扩缩容器,启动的时候要用docker service, 因为他启动的是一种服务的概念而不是容器
docker service update --replicas 10 mysql:5.7
这条命令会让主从机器上运行10个mysql的容器服务,默认分配是几台服务器机子随机分配,
要缩容也方便, docker service update --replicas 1 mysql:5.7
就把10个缩成了1个
还可以用docker service scale mysql=5
语法也可以实现服务副本的扩容缩容