Docker安装redis环形集群

Docker安装redis环形集群

背景

因为有需求要3台机器来做一个redis高可用(o(╥﹏╥)哭o~~~),没办法,只能用一个奇怪的方式安装redis集群了。这里我们用的不是主从哨兵哦,阅读本文的作者不要误会啦。再就是,真不推荐用3个机器来做redis集群。

因为配置里的cluster-announce-ip不能用域名,只能用ip,而pod的IP在K8S里经常变,所以不能用K8S部署了,我们这里使用docker和docker-compose部署,总得来说还是很简单的,代码我上传至github上了
https://github.com/lizhenwei/redis-cluster-in-docker.git

拓扑图

假设我们用3台机器,IP地址192.168.0.94,192.168.0.95,192.168.0.96 ;分别是node1,node2,node3

-------    -------    -------
|node1| ---|node2|----|node3|
-------    -------    -------
master1    master2    master3
slaver2    slaver3    slaver1

安装完毕之后,需要我们手动通过`CLUSTER REPLICATE`命令调节master和slaver所处的容器,形成如上拓扑,这样假使node1挂掉的时候,我们的node2上能运行一个master2,node3上运行master3,master1(此处的master1是由slaver1变过来的)

安装方法

1.在每台机器上安装docker和docker-compose。国内可以用daocloud去下载。会比较快http://get.daocloud.io/
2. 在每台机器上下载该代码,进入代码目录,运行shell命令,会根据IP地址更改配置文件,并且创建redis的docker应用:

# 在每台机器上输入该命令,注意替换IP地址
bash docker-init.sh 192.168.0.94
3. 在任意一台机器上通过redis-cli创建集群
# 在每台机器上输入该命令,注意替换IP地址
bash redis-init.sh 192.168.0.94 192.168.0.95 192.168.0.96
# 弹出来的提示直接输入yes
4. 完成之后执行命令,检查集群是否运行成功
#进入redis容器
docker exec -it redis-cluster bash
#检查集群是否运行成功
redis-cli -a 92F1q99f9CnrkAuwJPItdj8brqeMtN3r -p 7000 cluster nodes

python代码访问redis-cluster

$ pip install redis-py-cluster
```
测试代码
```
>>> from rediscluster import RedisCluster
>>> # Requires at least one node for cluster discovery. Multiple nodes is recommended.
>>> startup_nodes = [{"host": "192.168.0.94", "port": "7000"}, {"host": "192.168.0.94", "port": "7001"},{"host": "192.168.0.95", "port": "7000"}, {"host": "192.168.0.95", "port": "7001"},{"host": "192.168.0.96", "port": "7000"}, {"host": "192.168.0.96", "port": "7001"}]
>>> rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True,password='password')
>>> rc.set("foo", "bar")
True
>>> print(rc.get("foo"))
'bar'

苏ICP备18047533号-1