redis集群设计方案及道理(4)

利用redis-server呼吁启动该节点:
  redis-server redis-7000.conf
(2)节点握手
  节点启动今后是彼此独立的,并不知道其他节点存在;需要举办节点握手,将独立的节点构成一个网络。
  节点握手利用cluster meet {ip} {port}呼吁实现
  譬喻在7000节点中执行cluster meet 192.168.72.128 7001,可以完成7000节点和7001节点的握手;留意ip利用的是局域网ip而不是localhost或127.0.0.1,
是为了其他呆板上的节点或客户端也可以会见
同理,在7000节点中利用cluster meet呼吁,可以将所有节点插手到集群,完成节点握手:
  1 cluster meet 192.168.72.128 7002
  2 cluster meet 192.168.72.128 8000
  3 cluster meet 192.168.72.128 8001
  4 cluster meet 192.168.72.128 8002
(3)分派槽
  在Redis集群中,借助槽实现数据分区,详细道理后文会先容。集群有16384个槽,槽是数据打点和迁移的根基单元。当数据库中的16384个槽都分派了节点时,集群处于上线状态(ok);假如有任意一个槽没有分派节点,则集群处于下线状态(fail)。
分派槽利用cluster addslots呼吁,执行下面的呼吁将槽(编号0-16383)全部门配完毕:
  1 redis-cli -p 7000 cluster addslots {0..5461}
  2 redis-cli -p 7001 cluster addslots {5462..10922}
  3 redis-cli -p 7002 cluster addslots {10923..16383}
(4)指定主从干系
集群中指定主从干系不再利用slaveof呼吁,而是利用cluster replicate呼吁;参数利用节点id。
通过cluster nodes得到几个主节点的节点id后,执行下面的呼吁为每个从节点指定主节点:
  1 redis-cli -p 8000 cluster replicate be816eba968bc16c884b963d768c945e86ac51ae
  2 redis-cli -p 8001 cluster replicate 788b361563acb175ce8232569347812a12f1fdb4
  3 redis-cli -p 8002 cluster replicate a26f1624a3da3e5197dde267de683d61bb2dcbf1

第二种搭建: 剧本
  利用Ruby剧本搭建集群
  在{REDIS_HOME}/src目次下可以看到redis-trib.rb文件,这是一个Ruby剧本,可以实现自动化的集群搭建。
  (1)安装Ruby情况
  以Ubuntu为例,如下操纵即可安装Ruby情况:
  1 apt-get install ruby #安装ruby情况
  2 gem install redis #gem是ruby的包揽理东西,该呼吁可以安装ruby-redis依赖
  (2)启动节点
  与第一种要领中的“启动节点”完全沟通。
  (3)搭建集群
  redis-trib.rb剧本提供了浩瀚呼吁,个中create用于搭建集群,利用要领如下

  ./redis-trib.rb create --replicas 1 192.168.72.128:7000 192.168.72.128:7001 192.168.72.128:7002 192.168.72.128:8000 192.168.72.128:8001 192.168.72.128:8002

  个中:--replicas=1暗示每个主节点有1个从节点;后头的多个{ip:port}暗示节点地点,前面的做主节点,后头的做从节点。利用redis-trib.rb搭建集群时,要求节点不能包括任何槽和数据。

  执行建设呼吁后,剧本会给出建设集群的打算;打算包罗哪些是主节点,哪些是从节点,以及如何分派槽

集群扩展:

1. 集群伸缩
  实践中经常需要对集群举办伸缩,如会见量增大时的扩容操纵。Redis集群可以在不影响对外处事的环境下实现伸缩;伸缩的焦点是槽迁移:修改槽与节点的对应干系,实现槽(即数据)在节点之间的移动。譬喻,假如槽匀称漫衍在集群的3个节点中,此时增加一个节点,则需要从3个节点中别离拿出一部门槽给新节点,从而实现槽在4个节点中的匀称漫衍。
  增加节点、
  假设要增加7003和8003节点,个中8003是7003的从节点;步调如下:
  (1)启动节点:要领拜见集群搭建
  (2)节点握手:可以利用cluster meet呼吁,但在出产情况中发起利用redis-trib.rb的add-node东西,其道理也是cluster meet,但它会先查抄新节点是否已插手其它集群可能存在数据,制止插手到集群后带来杂乱。
  1 redis-trib.rb add-node 192.168.72.128:7003 192.168.72.128 7000
  2 redis-trib.rb add-node 192.168.72.128:8003 192.168.72.128 7000
  (3)迁移槽:推荐利用redis-trib.rb的reshard东西实现。reshard自动化水平很高,只需要输入redis-trib.rb reshard ip:port (ip和port可以是集群中的任一节点),然后凭据提示输入以下信息,槽迁移会自动完成:
    ○ 待迁移的槽数量:16384个槽均分给4个节点,每个节点4096个槽,因此待迁移槽数量为4096
    ○ 方针节点id:7003节点的id
    ○ 源节点的id:7000/7001/7002节点的id
  (4)指定主从干系:要领拜见集群搭建
  淘汰节点、
  假设要下线7000/8000节点,可以分为两步:
  (1)迁移槽:利用reshard将7000节点中的槽匀称迁移到7001/7002/7003节点
  (2)下线节点:利用redis-trib.rb del-node东西;应先下线从节点再下线主节点,因为若主节点先下线,从节点会被指向其他主节点,造成不须要的全量复制。
  1 redis-trib.rb del-node 192.168.72.128:7001 {节点8000的id}
  2 redis-trib.rb del-node 192.168.72.128:7001 {节点7000的id}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdjdy.html