参考
http://redis.readthedocs.org/en/latest/topic/cluster-tutorial.html
http://yindashan.github.io/blog/2014/11/02/redisclusterda-jian-jiao-cheng/
主从切换需要使用sentinel
http://blog.mkfree.com/posts/5257683d479e1dd72e7c1b4e
一些说明
集群使用的是gossip协议,是最终一致,并非强一致 数据根据不同的slot分到不同的实例,这个测试的时候需要用用redis-cli上添加-c参数
主从使用sentinel实现自动切换,不需要在配置里面里面强行约束master和slave,应该是动态使用命令验证掉了
以下是我配置的例子
编译redis,重新组织下目录,具体自己搞搞 复制到7000,7001,7002,7003,7004,7005
修改每个实例的配置文件
port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
自己写个run-cluster.sh
cd ./7000; ./bin/redis-server ./conf/redis.conf; cd ../; cd ./7001; ./bin/redis-server ./conf/redis.conf; cd ../; cd ./7002; ./bin/redis-server ./conf/redis.conf; cd ../; cd ./7003; ./bin/redis-server ./conf/redis.conf; cd ../; cd ./7004; ./bin/redis-server ./conf/redis.conf; cd ../; cd ./7005; ./bin/redis-server ./conf/redis.conf; cd ../; ./redis/bin/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;
自己写个sentinel.conf,用于监控redis实例
port 26379 sentinel monitor master1 127.0.0.1 7000 1 sentinel down-after-milliseconds master1 5000 sentinel failover-timeout master1 15000 sentinel parallel-syncs master1 2 sentinel monitor master2 127.0.0.1 7001 1 sentinel down-after-milliseconds master2 5000 sentinel failover-timeout master2 15000 sentinel parallel-syncs master2 2 sentinel monitor master3 127.0.0.1 7002 1 sentinel down-after-milliseconds master3 5000 sentinel failover-timeout master3 15000 sentinel parallel-syncs master3 2
第1行,指定sentinel使用的端口,不能与redis-server运行实例的端口冲突
第3行,显示监控master节点127.0.0.1,master节点使用端口7000,最后一个数字表示投票需要的"最少法定人数",比如有10个sentinal哨兵都在监控某一个master节点,如果需要至少6个哨兵发现master挂掉后,才认为master真正down掉,那么这里就配置为6,最小配置1台master,1台slave,在二个机器上都启动sentinal的情况下,哨兵数只有2个,如果一台机器物理挂掉,只剩一个sentinal能发现该问题,所以这里配置成1,至于master1只是一个名字,可以随便起,但要保证3-6行都使用同一个名字
第4行,表示如果5s内master1没响应,就认为挂了
第5行,表示如果15秒后,master1仍没活过来,则启动failover,从剩下的slave中选一个升级为master
第6行,表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel.sh
./redis/bin/redis-sentinel ./sentinel.conf
测试连接客户端
./redis/bin/redis-cli -c -p 7005
注意,-c参数必须有