Redis Cluster集群部署

≡放荡痞女 提交于 2020-10-20 06:09:36

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!