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
目前已经是比较普遍的使用方式了,具体看其实现。