Redis集群安装
Redis集群模式,参考:Redis-Cluster集群
Redis最开始支持的主从复制模式,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。
开源管理工具:Redis-Manager、QuickRedis
Redis-Cluster采用无中心结构,每个节点保存数据(部分桶区间)和整个集群状态,每个节点都和其他所有节点连接(PING-PONG机制)。为了保证数据的高可用性需配置主从模式,一个主节点对应N个从节点。客户端与任意节点直连即可,根据KEY取模定位桶位置,最后重定向到目标IP(客户端有路由缓存)。
- 主节点的作用:
- 提供数据存取
- 异步同步数据给从节点
- 从节点的作用:
- 在所属主节点拉取数据备份
- 若所属主节点宕机,通过投票选举一个从节点作为主节点实现容灾
- 以readonly模式提供读取服务
当某个主节点挂掉后,在对应的从节点列表中选举一个充当主节点,从而保证集群可用。如果A、B、C三台主节点都没有从节点,任何一台宕机都会导致集群不可用,即便剩余主节点还正常(通过cluster-require-full-coverage=no配置,其余节点还可继续工作)。
Redis集群预分好16384个桶,每台机都维护了桶区间与IP的映射关系,桶分配和使用方式:
- 三台主节点的分配情况:
- A:
[0-5460]
- B:
[5461-10922]
- C:
[10923-16383]
- A:
- 新增一个主节点D时,从已有节点的前面各取一部分移动过去:
- A:
[1365-5460]
- B:
[6827-10922]
- C:
[12288-16383]
- D:
[0-1364, 5461-6826, 10923-12287]
- A:
- 当需要存一个Key-Val时,根据
CRC16(key) mod 16384
的值决定将key放到哪个桶中,最后重定向到正确的节点
Redis的安装与启动
# 安装Remi的软件源
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# 安装最新包
yum --enablerepo=remi install redis
# 以服务模式单独启动
service redis start
# 启动或访问有问题,可尝试关闭防火墙
systemctl stop firewalld
# 查看端口占用
lsof -i | grep 6379
# 集群模式配置,注意各节点的端口号和文件目录
# dir /var/lib/redis/node1
# logfile /var/log/redis/node1/redis.log
# port 6379
# pidfile /var/run/redis_6379.pid
# cluster-enabled yes
# cluster-config-file nodes-6379.conf
# daemonize yes
# 启动节点
redis-server /etc/redis/node1.conf
# 停止节点
/usr/libexec/redis-shutdown node1
# 查看启动情况
ps -el | grep redis
# 创建集群(先确认所有节点都已正常启动)
redis-cli --cluster create 0.0.0.0:6381 0.0.0.0:6382 0.0.0.0:6383 \
0.0.0.0:6384 0.0.0.0:6385 0.0.0.0:6386 --cluster-replicas 1
# 以集群模式登录,操作相关key时会提示重定向的slot和节点
redis-cli -c -h 0.0.0.0 -p 6381
# 批量修改配置里的绑定IP
sed -i 's/0.0.0.0/172.16.9.138/g' /etc/redis/node*.conf
# 删除全部节点的备份数据和集群配置文件
rm -f /var/lib/redis/node*/*