Redis集群搭建

Redis集群搭建

什么是集群

所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。
Redis集群实现了对Redis 的水平扩容,即启动N个redis 节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
Redis集群通过分区(分区)来提供一定程度的可用性(可用性):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

搭建基础集群

删除持久化数据

删除掉目录中的 RDB AOF文件 并且关闭AOF配置

制作6个实例来模拟最简单的1主1从服务器集群
vi redis6379.conf
#引入redis配置
include ./redis.conf
#端口号保存地址
pidfile "/var/run/redis_6379.pid"
#端口号
port 6379
#日志文件
...
#数据文件名
dbfilename "dump6379.rdb"
#打开集群模式
cluster-enabled yes
#设定节点配置文件名
cluster-config-file nodes-6379.conf
#设置节点失联时间
cluster-node-timeout 15000

vi redis6380.conf
vi redis6381.conf
vi redis6389.conf
vi redis6390.conf
vi redis6391.conf 
集群合体

redis6中不需要安装 Ruby环境 如果是其他版本则需要先安装 Ruby
找到最先安装redis的目录,进入redis/src

输入命令

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6389 127.0.0.1:6390 127.0.0.1:6391

这里我用的是腾讯云用公网IP和内网IP 出现以下错误
Could not connect to Redis at xx.xx.xx.xx:6379: Connection refused
Could not connect to Redis at xx.xx.xx.xx:6379: Connection timed out

可以尝试切换内网IP和公网IP替换127.0.0.1 以及打开安全组策略
当你看到如下页面时 则redis集群部署成功

[WARNING] Some slaves are in the same host as their master
M: 673fb6700795b153a26052aba359fab1e89f995d 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
M: 1379c9c1fc18f605f46b86999dff8509fdacc65e 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
M: 6eb429efe6e4d70e4e85714f4560d8adab61a7b3 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
S: 3252a4ed8998cee1aac64f62173c08b33182034f 127.0.0.1:6389
   replicates 6eb429efe6e4d70e4e85714f4560d8adab61a7b3
S: 52bd786bc6510f285959550ab04da36a89523c42 127.0.0.1:6390
   replicates 673fb6700795b153a26052aba359fab1e89f995d
S: 947808919ee76f0649282daff02e62cdf0307ae5 127.0.0.1:6391
   replicates 1379c9c1fc18f605f46b86999dff8509fdacc65e
Can I set the above configuration? (type 'yes' to accept): yes
[OK] All nodes agree about slots configuration.
Check for open slots.. .
Check slots coverage...
[OK] All 16384 slots covered.
测试
redis-cli -c -p 6379
127.0.0.1:6379 > cluster nodes
6eb429efe6e4d70e4e85714f4560d8adab61a7b3 127.0.0.1:6381@16381 master - 0 1640158258000 3 connected 10923-16383
1379c9c1fc18f605f46b86999dff8509fdacc65e 127.0.0.1:6380@16380 master - 0 1640158257000 2 connected 5461-10922
947808919ee76f0649282daff02e62cdf0307ae5 127.0.0.1:6391@16391 slave 1379c9c1fc18f605f46b86999dff8509fdacc65e 0 1640158258000 2 connected
3252a4ed8998cee1aac64f62173c08b33182034f 127.0.0.1:6389@16389 slave 6eb429efe6e4d70e4e85714f4560d8adab61a7b3 0 1640158258976 3 connected
52bd786bc6510f285959550ab04da36a89523c42 127.0.0.1:6390@16390 slave 673fb6700795b153a26052aba359fab1e89f995d 0 1640158259979 1 connected
673fb6700795b153a26052aba359fab1e89f995d 127.0.0.1:6379@16379 myself,master - 0 1640158257000 1 connected 0-5460

插槽

可以注意到在以上的节点信息中主服务器最后都带了一个范围参数

6eb429efe6e4d70e4e85714f4560d8adab61a7b3 127.0.0.1:6381@16381 master - 0 1640158258000 3 connected 10923-16383
1379c9c1fc18f605f46b86999dff8509fdacc65e 127.0.0.1:6380@16380 master - 0 1640158257000 2 connected 5461-10922
673fb6700795b153a26052aba359fab1e89f995d 127.0.0.1:6379@16379 myself,master - 0 1640158257000 1 connected 0-5460

这个参数就是这个集群的插槽,每一个redis集群都包含16383个插槽,数据库中的所有key都属于这16383个插槽当中的一个。
集群使用公式 CRC16(key) % 16383来计算当前key属于哪一个插槽。

CRC16(key) 用于计算key和 CRC16校验和
CRC : 循环冗余检验

127.0.0.1:6379> set k1 v1
# 在这里我们设置了一个k1 发现比普通添加多了一句话 下面就是通过计算 k1属于 12706这个插槽所以把他放到了6381里面
-> Redirected to slot [12706] located at 127.0.0.1:6381
OK

需要注意的是,当你使用集群添加多个key的时候

127.0.0.1:6379> mset k2 v2 k3 v3
(error) CROSSSLOT Keys in request don't hash to the same slot
#要使用mset创建多个 必须要把他们组成一个组
127.0.0.1:6379> mset name{user} linda age{user} 20
-> Redirected to slot [5474] located at 127.0.0.1:6380
OK
127.0.0.1:6380> keys *
1) "age{user}"
2) "name{user}"
集群故障恢复

当主节点挂掉以后从节点上升为主节点,如果重启主节点那么主节点变成上升为主节点的从节点的从节点。
如果主节点和从节点一起挂掉会根据你的配置

cluster-require-full-coverage yes | no

当他为yes的时候,一段插槽的主从都挂掉以后整个集群会挂掉。反之,则是属于该插槽的值不能读取写入。

集群一些常用命令
# 计算插槽的值
127.0.0.1:6380> cluster keyslot k1
(integer) 12706
# 获取插槽中的值 但是只能看自己插槽中的值
cluster countkeysinslot 12706
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值