1 启动三个redis,端口分别是6379,6380,6381,master是6379端口,slave分别是6380,6381端口
2如果master机器redis服务器挂了。那么会导致整个redis系统都用不了。有两种方案,一种是手动把剩下的两个redis做主从,一个是自动把剩下的做主从。
手动主从
1 修改其中的一个redis为master,比如修改6380端口的redis为master
1修改为slaveof no one
2修改为slave-read-only no
2 修改剩下的6381的端口的redis指向的master服务器为6380端口
1修改为slaveof localhost 8380
使用sentinel自动化主从
1 拷贝sentinel.conf到usr/local/redis/下面
2 修改配置 sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 1 监控master地址和端口
sentinel down-after-milliseconds mymaster 30000 连接多少毫秒连不上认为donw
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000 多少分钟以内没有完成自动监控,则认为失败
3 启动三个redis,并启动sentinel ,关闭6379的redis,过一会会发现master由6379转为6380
./redis-server ./sentinel.conf --sentinel
进入6380的客户端,查看状态,会发现该redis由slave变为master
最后,如果不想由6380变为master,想自己制定的redis变为master,可以修改优先级,修改redis.conf
slave-priority 100 数字越小,优先级越大。
注意如果第1次写后,人工down掉master,剩下的slave会提升成master,第二次写ok,但此时redis节点中,只剩master,没有slave了,从测试结果上看,第二次get还是尝试去找slave节点,但是此时已经不存在了,所以一直在等候,导致后面的的处理被阻塞。
这不是redis的问题,而是Redisson客户端设计不够智能。
鉴于这种现状,如果要使用Redisson,最好做成1主2从的部署结构:(sentinel.conf中的“法定人数”,建议调整成2)
这样的好处是,1个master挂掉后,剩下的2台slave中,会有1台提升为master,整体仍然保证有1个master和1个slave,读写均不受影响。