Redis从3.0版本开始支持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放到哪个桶中。

redis cluster连接数 redis cluster怎么连接_redis

redis cluster连接数 redis cluster怎么连接_Redis_02


Redis服务器说明


10.199.194.14 6379
10.199.194.14 6380
10.199.194.14 6381
  
10.199.194.14 6382
10.199.194.14 6383
10.199.194.14 6384



部署步骤

1、编译安装redis, 安装目录:/apps/svr


cd /apps/svr
tar -zxf redis-3.0.5.tar.gz
cd redis-3.0.5
make && make install



2、创建redis集群节点


mkdir /apps/svr/redis_cluster
cd /apps/svr/redis_cluster
mkdir 6379 6380 6381 6382 6383 6384



3、复制默认的节点配置文件到集群节点中


cp /apps/svr/redis-3.0.5/redis.conf /apps/svr/redis_cluster/6379



4、修改默认配置文件


[root@testdb-5qvnf 6379]# vim /apps/svr/redis_cluster/6379/redis.conf
daemonize yes                              //redis后台运行
pidfile /var/run/redis_6379.pid            //pidfile文件对应6379
port 6379                                  //端口6379
cluster-enabled yes                        //开启集群 把注释#去掉
cluster-config-file nodes-6379.conf        //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 6000                  //请求超时
appendonly yes                             //日志开启,环境测试开启,正式环境建议关闭
bind 10.199.194.14                         //修改监听的地址为本机地址



5、修改完后把配置文件复制到7001上并修改相应的端口


[root@testdb-5qvnf 6379]# cp /apps/svr/redis_cluster/6379/redis.conf /apps/svr/redis_cluster/6380
[root@testdb-5qvnf 6379]# cp /apps/svr/redis_cluster/6379/redis.conf /apps/svr/redis_cluster/6381
[root@testdb-5qvnf 6379]# cp /apps/svr/redis_cluster/6379/redis.conf /apps/svr/redis_cluster/6382
[root@testdb-5qvnf 6379]# cp /apps/svr/redis_cluster/6379/redis.conf /apps/svr/redis_cluster/6383
[root@testdb-5qvnf 6379]# cp /apps/svr/redis_cluster/6379/redis.conf /apps/svr/redis_cluster/6384




6、启动各个节点,并检查是否正常启动


redis-server /apps/svr/redis_cluster/6379/redis.conf &
redis-server /apps/svr/redis_cluster/6380/redis.conf &
redis-server /apps/svr/redis_cluster/6381/redis.conf &
redis-server /apps/svr/redis_cluster/6382/redis.conf &
redis-server /apps/svr/redis_cluster/6383/redis.conf &
redis-server /apps/svr/redis_cluster/6384/redis.conf &



查看启动进程


[root@testdb-5qvnf 6379]# ps -ef|grep redis
root     31862     1  0 16:22 ?        00:00:00 redis-server 10.199.194.14:6379 [cluster]           
root     31881     1  0 16:23 ?        00:00:00 redis-server 10.199.194.14:6380 [cluster]           
root     31882     1  0 16:23 ?        00:00:00 redis-server 10.199.194.14:6381 [cluster]           
root     31883     1  0 16:23 ?        00:00:00 redis-server 10.199.194.14:6382 [cluster]           
root     31884     1  0 16:23 ?        00:00:00 redis-server 10.199.194.14:6383 [cluster]           
root     31894     1  0 16:23 ?        00:00:00 redis-server 10.199.194.14:6384 [cluster]




8、创建集群

创建集群命令需要以下软件支持

#安装ruby

yum install ruby -y 

#安装相关组件

gem install redis



确认所有的节点都启动后, 执行创建集群命令


/apps/svr/redis-3.0.5/src/redis-trib.rb create --replicas 1 10.199.194.14:6379 10.199.194.14:6380 10.199.194.14:6381 10.199.194.14:6382 10.199.194.14:6383 10.199.194.14:6384



查看redis集群状态


/apps/svr/redis-3.0.5/src/redis-trib.rb check 10.199.194.14:6379




测试redis集群


# redis-cli -c -p 6379 -h 10.199.194.14
10.199.194.14:6379> set hello world
10.199.194.14:6379> get hello



查看进程


[root@testdb-5qvnf /]# ps aux |grep redis          
root      2629  0.0  0.0 103244   864 pts/0    S+   10:17   0:00 grep redis
root     31862  0.0  0.4 137444  9536 ?        Ssl  May26   0:57 redis-server 10.199.194.14:6379 [cluster]           
root     31881  0.0  0.4 137444  9532 ?        Ssl  May26   0:56 redis-server 10.199.194.14:6380 [cluster]           
root     31882  0.0  0.4 137444  9536 ?        Ssl  May26   0:57 redis-server 10.199.194.14:6381 [cluster]           
root     31883  0.0  0.3 137444  7664 ?        Ssl  May26   0:54 redis-server 10.199.194.14:6382 [cluster]           
root     31884  0.0  0.3 137444  7420 ?        Ssl  May26   0:55 redis-server 10.199.194.14:6383 [cluster]           
root     31894  0.0  0.3 137444  7412 ?        Ssl  May26   0:54 redis-server 10.199.194.14:6384 [cluster]



[root@testdb-5qvnf /]# kill -9 31862   //关闭6379端口,看数据会不会丢失  




查看集群情况,发现变成了3主2从


/apps/svr/redis-3.0.5/src/redis-trib.rb check 10.199.194.14:6380
Connecting to node 10.199.194.14:6380: OK
Connecting to node 10.199.194.14:6384: OK
Connecting to node 10.199.194.14:6383: OK
Connecting to node 10.199.194.14:6382: OK
Connecting to node 10.199.194.14:6381: OK



[root@slave2 redis]# redis-cli -c -p 6380 -h 10.199.194.14

192.168.10.219:6379> get hello  



三 集群管理

  1. 查看集群情况
    redis-trib.rb check 127.0.0.1:7000
  2. 添加主节点,将新节点7006添加到集群
    redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
  3. 添加子节点,分配给最少从节点的主节点(执行以下命令如果提示Node 10.199.194.14:6380 is not empty,则先登录该节点清空数据(flushdb),再执行以下命令)
    redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000
  4. 添加子节点,指定主节点
    redis-trib.rb add-node --slave --<master-id> 127.0.0.1:7006 127.0.0.1:7000
  5. 重新分配槽
    redis-trib.rb reshard --from <node-id> --to <node-id> --slots <number_of_slots> --yes <host:port>
  6. 数据导入
    redis-trib.rb import --from <host:port> <host:port>
  7. 删除节点(移除主节点,要求主节点为空,即移除前要先将槽移动到其他节点)
    redis-trib.rb del-node 127.0.0.1:7000 <node-id>