Redis在Docker Swarm中的HA和LB

业务场景之一

Redis在业务场景中也很重要,涉及到的,所以这次迁移到docker swarm中来跑,目标是高可用及负载均衡,任意一台机器关掉,服务不中断。

为什么用Docker Swarm service的方式

这个是根据业务数据的写入方式来决定的,也考虑过Redis cluster,哨兵,swarm volume+分布式存储的方式,因为业务数据没有持久化的需求,仅仅是把redis当做业务多类型键值缓存服务来使用,所以这里保证Redis服务高可用即可。

docker swarm的搭建略过,不懂的同学可以自行Google(为什么不用百度,你懂的~~)

Let’s do it!

好,先建立Redis的服务,复制三个副本

1
docker service create --name redis -p 6379:6379 --replicas 3 --restart-condition on-failure redis

看看运行效果:

Good~,接下来配置HAproxy

先准备好配置文件,考虑一下部署策略,如果要以service方式来部署,建议采用分布式存储文件如Ceph,GlusterFS,OpenStack cinder等解决方案。这里条件有限,采取单机部署,

1
docker run -d --name haproxy -v /data/haproxy_config:/usr/local/etc/haproxy -p 29000:29000 -p 443:443 -p 172.16.2.5:16379:16379 haproxy

备注:
-v /data/haproxy_config:/usr/local/etc/haproxy 挂载编辑好的 配置文件到haproxy到容器里面

好,看看HAproxy的配置:

1
2
3
4
5
6
7
8
9
10
11
12
frontend haproxy_redis
bind *:16379
mode tcp
log global
default_backend redis_server

backend redis_server
mode tcp
balance source
server redis1 172.16.2.2:6379 check port 6379 inter 20s rise 2 fall 3
server redis2 172.16.2.3:6379 check port 6379 inter 20s rise 2 fall 3
server redis3 172.16.2.4:6379 check port 6379 inter 20s rise 2 fall 3

然后开始模拟测试,随意关掉一台,OK。应用仍能提供服务,再关掉一台,还有一台。

那有人说,全挂了咋办啊,额。。。。。。难道上线不做监控报警吗?第一台有问题了就应第一时间知道并处理了啊~~~

0%