Redis Cluster集群的搭建与实践

Redis Cluster集群

一、redis-cluster设计

Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下:

其结构特点:

     1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
     2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
     3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
     4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。

     5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

集群环境搭建-手动篇

 1,在/usr/local/bin/clusterconf目录,

 

63896379的从节点,63906380的从节点,63916381的从节点

 

2,分别修改637963807381638963906391配置文件

   port 6379                      //节点端口

   cluster-enabled yes              //开启集群模式

   cluster-node-timeout 15000       //节点超时时间(接收pong消息回复的时间)

   cluster-config-file  /usrlocalbin/cluster/data/nodes-6379.conf 集群内部配置文件

  其它节点的配置和这个一致,改端口即可

3,配置完后,启动6redis服务

   命令:cd /usr/local/bin/clusterconf/data

         cat nodes-6379.conf  //查看6379节点ID

 

       也可以这样查看        6379>cluster nodes

 

 

3,各节点启动后,使用cluster meet ip port与各节点握手,是集群通信的第一步

 

   

 

5,握手成功后,使用cluster nodes可以看到各节点都可以互相查询到

   

 

6,节点握手成功后,此时集群处理下线状态,所有读写都被禁止

 

 

7,使用cluster info命令获取集群当前状态

   

 

8redis集群有16384个哈希槽,要把所有数据映射到16384槽,需要批量设置槽

  redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0...5461}

  但我的虚拟机按范围分配有问题,同学们回去试一下看有没有问题

  错误为: (error) ERR Invalid or out of range slot 

 

  批量不行,单个是可以的

  redis-cli -h 127.0.0.1 -p 6379 cluster addslots 1 2 3 4

  因此,我写一个脚本/usr/local/bin/addSlots.sh, 详情可见些脚本……

  执行这个脚本可分配好槽位……

 

 

 

9,分配完槽后,可查看集群状态

   

 

10,然后再查看cluster nodes,查看每个节点的ID

    

 

11,6389639063916379,6380,6381做主从映射

   127.0.0.1:6389> cluster replicate af2c99b58aa8a0a8fd82ba594654ce9264ffb9bc

127.0.0.1:6390> cluster replicate 2d6e6deb9512324336754b7b3fdf86032445c77c

   127.0.0.1:6391> cluster replicate 61bd9fbbd3c154da318b502b86b1ee6516b82c17

12注:这是手动模式,在生产环境我们一般采用以下自动模式安装

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

 

13自动安装模式:

/usr/local新建目录:ruby

 

下载链接:https://pan.baidu.com/s/1kWsf3Rh 密码:n3pc

从这个链接下载  ruby-2.3.1.tar.gz   和  redis-3.3.0.gem

tar -zxvf ruby-2.3.1.tar.gz

 

  a,  cd ruby-2.3.1

  b,  ./configure -prefix=/usr/local/ruby

  c,  make && make install   //过程会有点慢,大概510分钟

  d, 然后gem install -l redis-3.3.0.gem  //没有gem需要安装yum install gem

                                                 yum install rubygems

 

   e,准备好6个节点,(注意不要设置requirepass,/usr/local/bin/clusterconf/dataconfig-file删除;依次启动6个节点:./redis-server clusterconf/redis6379.conf

如果之前redis有数据存在,flushall清空;(:不需要cluster meet ..)

  f, 进入cd /usr/local/bin,  执行以下:1代表从节点的个数

./redis-trib.rb create --replicas 1 192.168.1.111:6379 192.168.1.111:6380 192.168.1.111:6381 192.168.1.111:6389 192.168.1.111:6390 192.168.1.111:6391

主从分配,63796389的从节点

 

貌似只有主节点可读写,从节点不可以

主节点死后,从节点变成主节点

 

e,集群健康检测:

redis-trib.rb check 192.168.1.111:6379   (注:redis先去注释掉requirepass,不然连不上)

 

如此出现了这个问题,63795798槽位号被打开了

解决如下:

 

637963806381的有部分槽位被打开了,分别进入这几个节点,执行

6380:>cluster setslot 1180 stable

cluster setslot 2998 stable

cluster setslot 11212 stable

其它也一样,分别执行修复完后:

 

此时修复后的健康正常;

当停掉6379后,过会6389变成主节点

 

注意:使用客户端工具查询时要加-c

      ./redis-cli -h 192.168.1.111 -p 6379 -c

mset aa bb cc dd,批设置对应在不同的solt上,缺点

 

14,集群正常启动后,在每个redis.conf里加上

   masterauth “12345678”

   requiredpass “12345678”

  当主节点下线时,从节点会变成主节点,用户和密码是很有必要的,设置成一致

 

15,这上面是一主一从,那能不能一主多从呢?

 

./redis-trib.rb create --replicas 2

192.168.1.111:6379 192.168.1.111:6380 192.168.1.111:6381

 

192.168.1.111:6479 192.168.1.111:6480 192.168.1.111:6481

 

192.168.1.111:6579 192.168.1.111:6580 192.168.1.111:6581 






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值