前言
- Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
- Redis要求 一主一从的搭配至少要 六个节点,形成三对主从。在项目的实际部署中应用了2台物理机,每台分别部署了3个节点,本篇使用两台虚拟机进行Redis集群部署
部署
一、docker拉取redis
# docker 拉取redis镜像
docker pull redis
# redis 镜像详情(保证redis版本大于5.0.0)
docker inspect redis
二、创建存储目录
# 创建文件夹
mkdir -p /opt/docker/redis-cluster/redis-{6379,6380,6381}
# 在每个文件夹中创建data目录和redis.conf配置文件,取名为:redis-6379.conf、redis-6380.conf、redis-6381.conf
三、修改配置文件的内容
port 7000 ##节点端口
cluster-enabled yes ##cluster集群模式
cluster-config-file nodes.conf ##集群配置名
cluster-node-timeout 5000 ##超时时间
appendonly yes ##持久化模式
protected-mode no ## 保护模式
bind xxx.xxx.xxx.xxx ## 自己的IP地址
四、创建容器
# 要在redis-cluster文件夹下哦
sudo docker run -d \
-v $PWD/redis-6381/redis-6381.conf:/etc/redis/redis.conf\
-v $PWD/redis-6381/data:/data \
--restart always --name redis-6381 --net host\
redis redis-server /etc/redis/redis.conf;
在另外一台机器上重复上述步骤,端口需要不一样
五、启动集群
# 启动集群,由于新版redis-cli 已经包含了redis-trib.rb的功能,所以进入任意一个节点,运行启动集群命令即可,执行集群指令前,开放相应的防火墙端口。
docker exec -it redis-6379 /bin/bash
redis-cli --cluster create 192.168.122.128:6379 192.168.122.128:6380 192.168.122.128:6381 192.168.122.130:6382 192.168.122.130:6383 192.168.122.130:6384
问题解决
一、Could not connect to Redis No route to host问题解决
# 将防火墙关闭
systemctl stop firewalld.service
二、[ERR] Node 192.168.10.204:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
# 先关闭redis删除 redis目录如下文件: dump.rdb nodes-6379.conf
来源:oschina
链接:https://my.oschina.net/u/3873927/blog/4406177