redis基本上有三种使用方式:standalone,cluster,sentinel。下面进行一些总结。

redis standalone

standalone就是简单的redis的使用,正常单节点,也可以主从部署。

单节点这边就不多说了,直接说主从部署,可以直接只一台机器上部署多个实例:

192.168.225.128:6379主,192.168.225.128:6380从,192.168.225.128:6381从

只要在从服务器的配置中加上

slaveof 192.168.225.128 6379

就可以了,然后就可以主从复制,数据一致(从库默认是只读的)了,然后正常会使用读写分离这种场景。

当然这种情况下,当主数据库挂了,是不能进行主从切换的,需要手动进行主从切换

redis-cli -h 192.168.225.128 -p 6380 slaveof NO ONE

redis sentinel

因为standalone不能实现高可用,自动进行主从切换,使用,我们需要再启动一个sentinel来进行主从切换。

继续使用上面的三个节点,我们再启动三个Sentinel来控制

192.168.225.128:26379sentinel,192.168.225.128:26380sentinel,192.168.225.128:26381sentinel

配置

// Sentinel节点的端口
port 26379  
dir /var/redis/data/
logfile "26379.log"

// 当前Sentinel节点监控 192.168.225.128:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
// 可以通过这个来设置多个主备redis的切换
sentinel monitor mymaster 192.168.225.128 6379 2

//确认确认mymater SDOWN时长
//sentinel config-epoch chTEST 0
//sentinel leader-epoch mymaster 18  ###同时一时间最多18个slave可同时更新配置,建议数字不要太大,以免影响正常对外提供服务
//sentinel known-slave mymaster 192.168.65.129 6379   ###已知的redis slave
//sentinel known-slave mymaster 192.168.65.130 6379   ###已知的redis slave
//sentinel known-sentinel mymaster 192.168.65.130 26379 be964e6330ee1eaa9a6b5a97417e866448c0ae40    ###已知sentinel slave的唯一id
//sentinel known-sentinel mymaster 192.168.65.129 26379 3e468037d5dda0bbd86adc3e47b29c04f2afe9e6  ###已知sentinel slave的唯一id
//sentinel current-epoch 18  ####当前可同时同步的salve数最大同步阀值



//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000

//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1

//故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000

启动(两种方法)

redis-sentinel sentinel-26379.conf
redis-server sentinel-26379.conf --sentinel

这个时候就可以进行主从切换了,当主shutdown了,会重从的里面选择一个出来做主,同事还会继续监控shutdown的那个,重启启动后变成从服务器。

作用

  • 监控:Sentinel节点会定期检测Redis数据节点和其余Sentinel节点是否可达。
  • 通知:Sentinel节点会将故障转移通知给应用方。
  • 主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系。
  • 配置提供者:在Redis Sentinel结构中,客户端在初始化的时候连接的是Sentinel节点集合,从中获取主节点信息。

redis cluster

随着数据的越来越多,也迫切需求支持分布式集群。官方提供了集群的使用模式redis cluster,但是最后是使用ruby脚本来实现对应关系的,使用起来不太友好感觉,这边来进行一个简单部署

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1


./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

目前已经是比较普遍的使用方式了,具体看其实现