Redis---08Redis集群(一)
一、什么是Redis集群
Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求
二、安装环境(CentOS 7)
执行yum install ruby
执行yum install rubygems
设置redisXXX.conf配置文件,把里面6379替换成相应的XXX(XXX代表端口号),一共配置六个,我配置的是6379 6380 6381 6389 6390 6391这6个端口

三、集群操作
1.通过对应的redisXXX.conf配置文件,开启6个redis实例,开启后生成6个对应的nodes-xxx文件

2.进入解压redis-3.2.5.tar.gz后生成的redis-3.2.5文件夹里面的src;例:
cd /opt/redis-3.2.5/src/
3.进入目录后,执行下面的语句
# --replicas 1 表示对每个主节点创建一个从节点
./redis-trib.rb create --replicas 1 本机IP:6379 本机IP:6380 本机IP:6381 本机IP:6389 本机IP:6390 本机IP:6391
例如我的CentOS的IP为192.168.207.128,其中的端口号为开启的redis实例的端口号:
./redis-trib.rb create --replicas 1 192.168.207.128:6379 192.168.207.128:6380 192.168.207.128:6381 192.168.207.128:6389 192.168.207.128:6390 192.168.207.128:6391

4.以集群的方式进去客户端
redis-cli -c -p 端口号 或者 redis-cli -p 端口号(下面会讲区别)

5.通过cluster nodes查看集群信息

四、相关知识
1.redis cluster如何分配这6个节点
一个集群至少要有3个主节点
在六个节点合体时,使用的命令中 --replicas 1 表示对每个主节点创建一个从节点
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上
2.插槽
①:一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
②:集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:
节点 A 负责处理 0 号至 5500 号插槽。
节点 B 负责处理 5501 号至 11000 号插槽
节点 C 负责处理 11001 号至 16383 号插槽
3.登录客户端使用-c与不使用的区别
使用-c会自动重定向key对应插槽的客户端,不使用-c不会自动重定向,会报错,并告诉你应前往的redis实例地址和端口
4.不在一个插槽的键值,不能使用mget、mset等多键操作;可以通过{}来定义组,使key{xxx}内相同的内容的键值对放到一个插槽中
5.主节点宕机,从节点会自动变成主节点,主节点会变成从节点
6.如果所有某一段插槽的主从节点都当掉,redis服务不能继续服务,因为这一段插槽不会自动分配到其他节点中去。
redis.conf中参数 cluster-require-full-coverage yes ; 默认16384个插槽全部正常时才工作
7.相关命令
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

浙公网安备 33010602011771号