Redis集群

Redis版本要求:Redis 版本3.0+

Redis Cluster TCP ports

Redis集群的每一个节点需要两个端口号,client port和cluster bus port,比如6379,16379
端口6379:用于redis client连接
端口16379:用于集群节点间的交流通信

cluster bus port = client port + 10000,这是固定的

Redis集群数据分片

Redis 集群有16384个哈希槽,每一个key通过CRC16算法对16384取模,得到相应的槽位
假设集群有如下节点:

  • 节点A, 槽位0 ~ 5500
  • 节点B, 槽位5501 ~ 11000
  • 节点C, 槽位11001 ~ 16383

如果要增加一个节点D,则需要从其他节点A,B,C拿一些槽位给D;反之,如果要删除节点,则需要将自身的槽位转移到其他节点,才能删除该节点

Redis集群参数配置

cluster-enabled 是否开启集群模式
cluster-config-file 记录集群配置,方便重启
cluster-node-timeout 超时时间

手动创建Redis集群

Redis集群最小配置文件 redis.conf

port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

最小集群最少需要三个master,建议3master,3slave

创建步骤如下:

  • 首先执行以下命令
mkdir cluster-test
cd cluster-test
mkdir  7001 7002 7003 7004 7005 7006
  • 在每一个目录下创建相应的 redis.conf 文件

  • 复制redis-server文件到 cluster-test 下

  • 启动每一个Redis实例

cd 7000
../redis-server ./redis.conf

创建集群

  • 对于Redis5
    复制redis-cli文件到 cluster-test 下

执行以下命令

./redis-cli --cluster create 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  127.0.0.1:7006 \
--cluster-replicas 1

--cluster-replicas 1 表示 每一个master:slave,即一个主节点有一个从节点

Redis集群创建成功标志

查询集群所有节点

./redis-cli -p 7001 cluster nodes
查询结果

故障转移测试

端口7001宕机

./redis-cli -p 7001 debug segfault
// 执行结果
Error: Server closed the connection

再重启7001端口,可以看到原先的端口7005从节点变成了主节点


故障转移效果图

扩展一个主节点master

创建7007目录
创建redis.conf文件
启动redis实例 ../redis-server ./redis.conf

将7007节点加入集群

./redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7002
查询结果

槽位分配

./redis-cli --cluster reshard 127.0.0.1:7005
槽位分配过程
槽位分配结果

增加一个从节点

// 127.0.0.1:7006  增加的从节点ip
redis-cli --cluster add-node 127.0.0.1:7006 \
127.0.0.1:7000 --cluster-slave \
 --cluster-master-id \
// 主节点nodeId
3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e

删除一个节点

redis-cli --cluster del-node 127.0.0.1:7001  ``

注意:
删除一个master时,其槽位必须为0

你可能感兴趣的:(Redis集群)