Swarm模式内置DNS组件,可以自动为集群中的每个服务分配DNS记录。Swarm manager使用内部负载均衡,根据服务的DNS名称在集群内的服务
之间分发请求。
Swarm manager使用 ingress load blancing暴露你想从外部访问集群提供的服务。Swarm manager自动为服务分配一个范围30000-32767端口
的Published Port,也可以为该服务指定一个Published Port。
ingress network是一个特殊的overlay网络,便于服务的节点直接负载均衡。当任何swarm节点在已发布的端口上接收到请求时,它将该请求
转发给调用的IPVS模块,IPVS跟踪参与该服务的所有容器IP地址,选择其中一个,并通过ingress network将请求路由给它。

 

# 进容器查看DNS记录
nslookup hello
# 获取虚拟IP
docker service inspect -f '{{json .Endpoint.VirtualIPs}}' my-web

 

# 设置DNS轮询模式

docker service create \
--replicas 3 \
--name my-web \
--network my-network \
--endpoint-mode dnsrr \
nginx

 

安装nginx带端口

[root@node1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f7472b5cff81        bridge              bridge              local
ef94b6e28914        docker_gwbridge     bridge              local
36b5c10f7be5        host                host                local
qqm12za7nzhg        ingress             overlay             swarm
lzhcjzuhhydo        my-network          overlay             swarm
e9acd92776c4        none                null                local

[root@node1 ~]# docker service create --replicas 5 --name my-nginx -p 80:80 --network my-network nginx
yokp84koaustdgz28rubrnabs

 

[root@node1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE
l1ak4wcy893g my-nginx replicated 5/5 nginx:latest


[root@node1 ~]# docker service ps my-nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
c9cdksc7jaoy my-nginx.1 nginx:latest node2 Running Running 16 seconds ago
r8lzal3vkyee my-nginx.2 nginx:latest node3 Running Running 16 seconds ago
9pkc6ciyk2kw my-nginx.3 nginx:latest node2 Running Running 16 seconds ago
fgd6kfgh9ug3 my-nginx.4 nginx:latest node3 Running Running 16 seconds ago
rqs4p60snnpm my-nginx.5 nginx:latest node1 Running Running 16 seconds ago

 

安装测试busybox

[root@node1 ~]# docker service create --replicas 3 --name hello busybox --network my-network --args "ping www.baidu.com"
n41c3vkp93tdt1rhf2ez8ber7

[root@node1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE
l1ak4wcy893g my-nginx replicated 5/5 nginx:latest
n41c3vkp93td hello replicated 3/3 busybox:latest

  

[root@node2 ~]# docker exec -it 5b1de8300426 sh

nsenter nslookup
/ # nslookup my-nginx
Server: 100.100.2.136
Address 1: 100.100.2.136

Name:  my-nginx

Address 1: 10.0.0.2

  

 

[root@node1 ~]# docker service inspect -f '{{json .Endpoint.VirtualIPs}}' my-nginx
[{"NetworkID":"qqm12za7nzhg5vcsh07072ifc","Addr":"10.255.0.6/16"},{"NetworkID":"lzhcjzuhhydo5ewhf1m149v4w","Addr":"10.0.0.2/24"}]

[root@node1 ~]# curl -I http://192.168.3.245
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Mon, 23 Apr 2018 18:44:21 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

[root@node1 ~]# curl -I http://192.168.3.244
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Mon, 23 Apr 2018 18:44:24 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

[root@node1 ~]# curl -I http://192.168.3.246
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Mon, 23 Apr 2018 18:44:26 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

  

 安装nginx 没有配置端口

[root@node1 ~]# docker service create --replicas 3 --name my-nginx2  --network my-network --endpoint-mode dnsrr nginx         
18cvdt76wcjh8v58m4cdu9e34
[root@node1 ~]# docker service ls
ID            NAME       MODE        REPLICAS  IMAGE
18cvdt76wcjh  my-nginx2  replicated  3/3       nginx:latest
l1ak4wcy893g  my-nginx   replicated  5/5       nginx:latest
n41c3vkp93td  hello      replicated  3/3       busybox:latest

  

/ # nslookup my-nginx2
Server:    100.100.2.136
Address 1: 100.100.2.136

Name: my-nginx2
Address 1:192.168.3.245 ud91h1g1asz11nx6awh7mnhde
Address 2:192.168.3.244 51j22vn5fmr7yxe8by95pjary
Address 3:192.168.3.246 vaa42e77pbpo5citkb57h0o0n

  

服务发现与负载均衡

 

 

 

高可用性

Manager节点任务:
1. 维护集群状态
2. 调度服务
3. 提供swarm模式的HTTP API

 

 

 

# 以管理节点角色加入swarm
docker swarm join-token manager
# 在管理节点手动改变角色
docker node promote <NAME>
docker node demote <NAME>
# 在管理节点查看角色
docker node ls

 

 扩展集群

  Docker UCP(Docker的集群管理工具) 设计为可以随应用大小和使用率的增长而水平扩展。可以在 UCP 集群中添加或删除节点来扩展集群以满足需求。由于 UCP 利用 Docker 引擎提供的集群功能,因此您可以使用 docker swarm join 命令向集群中添加更多节点。在加入新节点时,UCP 服务将在此节点中自动开始运行。

 

# 在将节点加入Swarm集群中时,可以选择加入的是工作节点还是管理节点


# 加入管理节点
[root@node1 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-0blcl3t4a82sutk6dmj9otdjvr5t1y9tklcx624izcvab38vo8-cjv4w9mpwoj3bf6wqjmynmfry \
    192.168.3.245:2377

[root@manager ~]# yum install docker -y

[root@manager ~]#     docker swarm join     --token SWMTKN-1-0blcl3t4a82sutk6dmj9otdjvr5t1y9tklcx624izcvab38vo8-cjv4w9mpwoj3bf6wqjmynmfry     192.168.3.245:2377
This node joined a swarm as a manager.

# 加入工作节点

[root@node1 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-0blcl3t4a82sutk6dmj9otdjvr5t1y9tklcx624izcvab38vo8-8yvuv3p8k5yg8h87ka6e3h3o0 \
    192.168.3.245:2377


[root@node4 ~]# yum install docker -y

[root@node4 ~]#     docker swarm join \
>     --token SWMTKN-1-0blcl3t4a82sutk6dmj9otdjvr5t1y9tklcx624izcvab38vo8-8yvuv3p8k5yg8h87ka6e3h3o0 \
>     192.168.3.245:2377
This node joined a swarm as a worker.

  

 

 

可以通过docker node promote/demote来节点改变成管理或工作节点

[root@node1 ~]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
72664vnxwv9efmib5lr9rli3j *  node1     Ready   Active        Leader
o5gzuhslw14sxyi4lc5yee1f7    node4     Ready   Active        
odtu70p5unyiy3hvowbraw2lj    node3     Ready   Active        
u7fxhqd3afrx62hufl14fauw3    manager   Ready   Active        Reachable
zhg2isim7fj2osyvg7x7yls0i    node2     Ready   Active   

  

[root@node1 ~]# docker node promote node4
Node node4 promoted to a manager in the swarm.
[root@node1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
72664vnxwv9efmib5lr9rli3j * node1 Ready Active Leader
o5gzuhslw14sxyi4lc5yee1f7 node4 Ready Active Reachable
odtu70p5unyiy3hvowbraw2lj node3 Ready Active 
u7fxhqd3afrx62hufl14fauw3 manager Ready Active Reachable
zhg2isim7fj2osyvg7x7yls0i node2 Ready Active

  

 

[root@manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE
18cvdt76wcjh my-nginx2 replicated 3/3 nginx:latest
l1ak4wcy893g my-nginx replicated 5/5 nginx:latest
n41c3vkp93td hello replicated 3/3 busybox:latest

  

 

 

 

[root@node1 ~]# systemctl  stop docker

 

[root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
72664vnxwv9efmib5lr9rli3j node1 Down Active Unreachable
o5gzuhslw14sxyi4lc5yee1f7 node4 Ready Active Reachable
odtu70p5unyiy3hvowbraw2lj node3 Ready Active 
u7fxhqd3afrx62hufl14fauw3 * manager Ready Active Leader
zhg2isim7fj2osyvg7x7yls0i node2 Ready Active

  

 

posted on 2018-04-24 03:55  彼de潘  阅读(334)  评论(0)    收藏  举报