1、安装docker环境
2、安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
3、下载redis相关镜像
docker pull redis:6.0.5-buster docker pull zvelo/redis-trib
4、编辑redis.conf ,选择一个配置文件目录,用于挂载到docker。本示例在一台机器上启动3个redis服务节点,因此需要编写三个redis.conf。redis.conf中的port不能一致
port 7000 #daemonize yes bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
5、编写docker-compose.yaml文件, 添加如下内容。docker-compose学习地址:https://docs.docker.com/compose/compose-file/
version: '3' services: redis1: image: redis:6.0.5-buster network_mode: host restart: always volumes: - /redis-docker/conf/7000:/usr/local/etc/redis entrypoint: redis-server /usr/local/etc/redis/redis.conf redis2: image: redis:6.0.5-buster network_mode: host restart: always volumes: - /redis-docker/conf/7001:/usr/local/etc/redis entrypoint: redis-server /usr/local/etc/redis/redis.conf redis3: image: redis:6.0.5-buster network_mode: host restart: always volumes: - /redis-docker/conf/7002:/usr/local/etc/redis entrypoint: redis-server /usr/local/etc/redis/redis.conf
5、启动redis镜像
docker-compose -f docker-compose.yaml up -d
备注:redis-cluster最少需要6个节点,本示例采用的是三台服务器,每个服务器部署三个redis节点。
6、加入redis集群
在一台服务器上执行如下命令,将redis节点加入集群
docker run --rm -it zvelo/redis-trib create --replicas 1 10.x.x.75:7000 10.x.x.75:7001 10.x.x.75:7002 10.x.x.76:7000 10.x.x.76:7001 10.x.x.76:7002 10.x.x.77:7000 10.x.x.77:7001 10.x.x.77:7002
7、查看redis集群状态
redis-cli -h 10.x.x.75 -p 7000 cluster nodes
8、添加节点
使用addnode命令来添加节点,第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口.
docker run --rm -it zvelo/redis-trib add-node 10.x.x.76:7001 10.x.x.75:7000
[ERR] Node 192.168.52.131:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决方法:
1)、将需要新增的节点下aof、rdb等本地备份文件删除;
2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;
3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:
x.x.x.x:7001> flushdb #清空当前数据库
通过以上解决方法中的1)、2)或者3)之后再执行脚本,成功执行;
9、删除节点
第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点id,节点id可通过cluster nodes命令查看。
使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这个节点的数据重新分片到其他主节点上.在该主节点的从节点上执行CLUSTER FAILOVER命令。
替代移除主节点的方法是手动执行故障恢复,被移除的主节点会作为一个从节点存在,不过这种情况下不会减少集群节点的数量,也需要重新分片数据.
docker run --rm -it zvelo/redis-trib del-node 10.x.x.75:7000 d552271008bf8383f468e92d09ab93a79e77f2eb
10、查看集群节点状态
$ redis-cli -p 7000 cluster nodes
3fc783611028b1707fd65345e763befb36454d73 127.0.0.1:7004 slave 3e3a6cb0d9a9a87168e266b0a0b24026c0aae3f0 0 1385503418521 0 connected
a211e242fc6b22a9427fed61285e85892fa04e08 127.0.0.1:7003 slave 97a3a64667477371c4479320d683e4c8db5858b1 0 1385503419023 0 connected
97a3a64667477371c4479320d683e4c8db5858b1 :0 myself,master - 0 0 0 connected 0-5959 10922-11422
3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7005 master - 0 1385503419023 3 connected 11423-16383
3e3a6cb0d9a9a87168e266b0a0b24026c0aae3f0 127.0.0.1:7001 master - 0 1385503417005 0 connected 5960-10921
2938205e12de373867bf38f1ca29d31d0ddb3e46 127.0.0.1:7002 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385503418016 3 connected
CLUSTER NODES 命令的输出看起来有点复杂,其实他非常的简单,含义如下:
- 节点ID
- IP:端口
- 标志: master, slave, myself, fail, …
- 如果是个从节点, 这里是它的主节点的NODE ID
- 集群最近一次向节点发送 PING 命令之后, 过去了多长时间还没接到回复。.
- 节点最近一次返回 PONG 回复的时间。
- 节点的配置纪元(configuration epoch):详细信息请参考 Redis 集群规范 。
- 本节点的网络连接情况:例如 connected 。
- 节点目前包含的槽:例如 127.0.0.1:7001 目前包含号码为 5960 至 10921 的哈希槽。
附录:
redis集群相关命令:
http://www.redis.cn/topics/cluster-tutorial.html
https://www.cnblogs.com/kongzhongqijing/p/6867960.html
来源:oschina
链接:https://my.oschina.net/sunhualong/blog/4336983