zoukankan      html  css  js  c++  java
  • redis cluster集群搭建

    redis的集群有多种实现方案且各有优劣,其各种实现的对比参照文章:
    1、Redis常见集群方案、Codis实践及与Twemproxy比较(注意回答时间,太早的参考价值可能会有折扣):http://blog.csdn.net/mawming/article/details/52171116
    2、Redis集群方案应该怎么做:https://www.zhihu.com/question/21419897
    本文主要介绍redis官方提供的redis-cluster的搭建及使用。
    -----------------------------------------------------------------------------

    配置一个6节点集群,3主3从,主节点端口为6379,6380,6381,从节点端口为6389,6390,6391;
    A、全手动方式
    1、修改redis.conf配置文件,只需修改对应端口即可
    port 6379 //节点端口
    cluster-enabled yes //开启集群模式
    cluster-node-timeout 15000 //节点超时时间(接收pong消息回复的时间)
    cluster-config-file /work/redis-4.0.8/rediscluster/data/nodes-6379.conf //集群内部配置数据存储文件(起始可以不存在,启动后会自动创建)
    ps:这里并没有配置从节点slaveof,也就是都是主节点,集群中的主从是后来通过拷贝命令设置的;
    2、启动6个redis实例,查看某个节点的id值

    可以直接查看cluster-config-file配的文件内容,也可以登录节点,用cluste nodes命令查看,结果是一样的;
    启动过程中由于节点数较多,可以考虑手写脚本来启动;
    3、节点握手。各个节点启动后,实际还是相互独立的,彼此不知道对方的存在,需要通过握手操作建立联系,这是集群通信的第一步;

    握手结束后,cluster nodes可以看到节点数据,上图我们可以看到一共6个节点,三个节点被标记为master,myself是说当前登录节点是哪个节点;
    握手成功后,此时集群处于下线状态,禁止所有读写,因为还没有分配哈希槽;

    4、分配哈希槽;redis集群有16384个哈希槽(0-16383),需要设置每个节点对应的槽后集群方可使用;

    注意,此命令老版本为addslots{0...5461}新版本为addslots {0..5461},新命令两个参数中间少了一个点
    移除槽的命令为delslots {0..5461}
    从图中看到,分配结束后,集群状态变更为ok,查看cluster info:

    此时的cluster nodes:

    可以看到所有节点都是master节点,我们想要的是master-slave的,需要手动设置主从:

    5、设置主从关系
    6389、6390跟6391分别设置主节点为6379、6380跟6381,命令为:cluster replicate masterid
    设置完毕后,查看cluster nodes,可以看到3主3从:

    此时集群可用,设置值,会发现被重定向到不同主机:

    可以看到,本来我连接的是6379,结果执行后被重定向到了6381;
    注意:集群模式下,连接使用命令为 redis-cli -h masterip -p port -c,最后有一个-c,表示集群模式,否则会报错而无法重定向;
    B、自动方式
    方式A需要改大量文件并执行一定量脚本,容易疏忽出错;其实redis提供了比较简洁方便的方式来启动集群。这次我们配一个master带两个slave:
    1、准备redis.conf配置文件9份,三组端口分别为:
    6379-----6380-----6381
    6479-----6480-----6481
    6579-----6580-----6581
    其中79作为主节点,80跟81作为从节点
    启动9个redis
    2、在redis-trib.rb所在的目录,执行脚本:
    ./redis-trib.rb create --replicas 2
    192.168.2.100:6379 192.168.2.100:6479 192.168.2.100:6579
    192.168.2.100:6380 192.168.2.100:6480 192.168.2.100:6580
    192.168.2.100:6381 192.168.2.100:6481 192.168.2.100:6581
    为了方便,换行了,实际是一行
    执行后会自动握手并分配哈希槽,执行cluster nodes,可以看到有3个master6个slave;

    redis-trib.rb check ip:port可以检查集群健康情况,如下:

    可以看到三个master分配哈希槽的情况,没有警告,说明一切正常。
    ########################################################
    检测集群是否正常切换主从:
    三个端口79结尾的为master节点,从上图也可以看到,直接kill 杀掉6479

    可以看到kill掉主节点后,日志一直在打印信息,尝试连接主节点
    多次尝试未果,启动fail over机制,启用slave节点

    观察时间,从master失联到从节点切换为主节点,整个集群状态一致,大概20s,截图不到20秒,实际后面仍有部分日志,我本次尝试大概在22秒。
    再次查看集群状态,发现6481切换为master:

    如果要添加密码,需要在配置文件添加requirepass “123456789” 跟 masterauth “123456789”
    主从都要添加,因为从节点可能会变成主节点

    -------------------------------------------

    over

  • 相关阅读:
    2017.9.15 HTML学习总结---表格table
    2017.9.14 HTML学习总结---超链接标签图片标签
    2017.9.13 微机原理学习总结(一)
    2017.9.12 初入HTML -----学习总结(二)
    2017.9.11 初入HTML学习
    【死磕Java并发】-----Java内存模型之happens-before
    Java并发编程:volatile关键字解析[volatile最好的文章]
    【框架】[MyBatis]DAO层只写接口,不用写实现类
    MyBatis结果集处理,中resultType和resultMap的区别
    浅谈 Mybatis中的 ${ } 和 #{ }的区别
  • 原文地址:https://www.cnblogs.com/nevermorewang/p/8647302.html
Copyright © 2011-2022 走看看