Docker 版 HAProxy + Keepalived 高可用进阶

http://www.jianshu.com/p/83036a320036

 

上一篇(建议看完再看本篇)

Docker Swarm + HAProxy 实现高可用

本篇简介

使用 HAProxy 镜像实现负载均衡和 Docker Swarm 集群的高可用性,然后再使用 Keepalived 镜像实现VIP(虚拟IP)在2台HA节点上的IP漂移,来保证其中一个HA节点挂掉之后,整个系统仍然可用。

VIP 高可用架构

说明:由于本机内存限制,关闭了所有work节点,所以三个 nginx 容器都在 Manager1 上运行。

开始实现

1、按如上架构图,添加节点 haKeepalived1haKeepalived2

节点终端示例

2、在 haKeepalived1 节点启动 HAProxy 和 Keepalived

  • 启动 HAProxy (上一篇文章有示例),此处修改 haproxy.cfg
global
    daemon
    maxconn 25600
defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
frontend http-in
    bind *:80
    default_backend servers
backend servers
    server server1 192.168.99.100:8080 maxconn 32 check

提示:此处获取镜像慢的话,可以使用我在阿里云的加速镜像
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/haproxy
使用加速镜像后,别忘了制造any-haproxy镜像时 FROM 改为此镜像名称

  • 启动 Keepalived
    首先,获取 any-keepalived 镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/anoy/keepalived

然后,启动 Keepalived,为此节点添加 VIP(192.168.99.200),状态为 MASTER

$ docker run \
  --cap-add=NET_ADMIN \
  --net=host \
  -d \
  --env KEEPALIVED_VIRTUAL_IPS="#PYTHON2BASH:['192.168.99.200']" \
  --env KEEPALIVED_STATE="MASTER" \
  --detach \
  registry.cn-hangzhou.aliyuncs.com/anoy/keepalived
  • 检验 VIP 状态
$ ip a

VIP

并且本机可以 ping 通 192.168.99.200 这个IP。

本机 ping 测试

3、在 haKeepalived2 节点上执行步骤二相同的操作,启动 Keepalived 时命令变更如下:

$ docker run \
  --cap-add=NET_ADMIN \
  --net=host \
  -d \
  --env KEEPALIVED_VIRTUAL_IPS="#PYTHON2BASH:['192.168.99.200']" \
  --env KEEPALIVED_STATE="BACKUP" \
  --detach \
  registry.cn-hangzhou.aliyuncs.com/anoy/keepalived

haKeepalived2 的状态变为 BACKUP

4、测试VIP

  • 访问 http://192.168.99.200:8080/ 可以正常请求到 nginx

访问 VIP
  • 关闭 haKeepalived1 节点, 在本机上执行
$ docker-machine stop haKeepalived1

http://192.168.99.200:8080/ 仍然可以访问。

参考资料

Leave a Reply

Your email address will not be published. Required fields are marked *