Redis 集群模式的配置及演示

集群模式

I. Redis 集群中的投票

  1. 集群中所有 master 参与。
  2. 如果半数以上 master 节点与 master 节点通信超过 cluster-node-timeout 中设置的时间,认为当前 master 挂掉。

II. 怎样判断节点不可用

  1. 如果集群中任意 master 挂掉,且当前 master 没有 slave ,集群进入 fail 状态,也可以理解成集群的 slot 映射 [0 - 16383] 不完整时进入 fail 状态
  2. 入库过集群超过半数以上的 master 挂掉,无论是否有 slave ,集群进入 fail 状态,当集群不可用时,所有对集群的操作都不可用,会收到 ((error) CLUSTERDOWN The cluster is down) 错误。

III. 集群搭建

  1. 首先我们对集群做一个简单规划,假设我的集群中一共有三个节点,每个节点一个主机一个从机,这样我一共需要 6 个 Redis 实例。

  2. 这里的操作与配置主从模式类似,也需要有多个 conf 配置。这里也是复制了 7001 - 7006 这 6 个配置文件进行配置。

集群配置的conf配置文件

  1. 具体的配置如下,这里以 7001 为例

    # cluster-enabled yes	这是开启集群,默认是关闭的
    # cluster-config-file nodes-7001.conf	这是集群的配置文件
    
    # 先全局替换::%s/6379/7001/g
    # 然后把上面那两个默认注释的,删除掉 # 号。
    
    port 7001
    #bind 127.0.0.1
    cluster-enabled yes
    cluster-config-file nodes-7001.conf
    protected no
    daemonize yes
    masterauth 123
    
  2. 然后启动,可以看到如下的状态,每一个 redis 实例后面都有一个 [cluster]

    启动集群后的状态

  3. 此时,每一个 redis 实例是相互独立的,是有没加到集群里面的,那么下面就开始集群的创建了。

    [root@localhost redis-7.0.0]# ./src/redis-cli --cluster create --cluster-replicas 1 192.168.73.128:7001 192.168.73.128:7002 192.168.73.128:7003 192.168.73.128:7004 192.168.73.128:7005 192.168.73.128:7006 -a 123
    

    注: --cluster create 集群的创建;replicas 后面的 1 表示每一个主机都带有 1 个从机;192.168.73.128 自己的地址

  4. 在 redis 的安装目录下执行,如下图

    创建集群1

    Can I set the above configuration? (type 'yes' to accept) 这里直接 yes 即可

    创建集群2

  5. 注意创建过程的日志,每个redis都获得了一个编号,同时日志也说明了哪些实例做主机,哪些实例做从机,每个从机的主机是谁,每个主机所分配到的hash槽范围等等。

IV. 查询集群信息

  1. 集群创建成功后,我们可以登录到 Redis 控制台查看集群信息,注意登录时要添加 -c 参数,表示以集群方式连接

    cluster info 查看集群信息

    集群信息

    cluster nodes 查看集群的节点

    集群的节点

V. 添加节点

  1. 首先我们准备一个端口为 7007 的主节点并启动,准备方式和前面步骤一样,启动成功后,通过如下命令添加主节点

    [root@localhost redis-7.0.0]# ./src/redis-cli -a 123 -p 7001 --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
    

    add-node 添加一个节点;127.0.0.1:7001 需要传一个现有的节点

  2. 然后重新查看集群的节点,会发现 7007 已经添加进来了。但此时是没有办法做数据存储的,因为此时的 7007 节点没有 slot ,即还没有分配哈希槽,所以是没有办法存储数据的。

    添加节点1

  3. 哈希槽一个只有 16384 个,此时已经随机分配到了刚刚随机生成的 3 个 master 中,所以如果此时给 7007 分配哈希槽,需要从 master 中分一些过来

    [root@localhost redis-7.0.0]# ./src/redis-cli -a 123 -p 7001 --cluster reshard 127.0.0.1:7001
    

    (1) 执行之后,会有这么一段 How many slots do you want to move (from 1 to 16384)? ,意思是想要分配多少 slot 出来。

    (2) 确定之后,接着会有 What is the receiving node ID? 意思是,分配出来的 slot 要给的 ID(此时我的需求是,给 7007 的 ID,把 7007 的 ID copy 过来即可)

    (3) Please enter all the source node IDs. 即分配出来的 slot 由谁来出。这里有两种情况,如果想要单个或多个出,则输入他们的 ID ,输入完成后 done 结束;如果所有 master 一起出,则输入一个 all 即可。

    Please enter all the source node IDs.
      Type 'all' to use all the nodes as source nodes for the hash slots.
      Type 'done' once you entered all the source nodes IDs.
    Source node #1: 
    

    (4) Do you want to proceed with the proposed reshard plan (yes/no)? 这里输入 yes 即可。继续按照计划执行(可以理解为输入密码的时候中的再次确认密码)

  4. 分配 slot 完成后,再次进来查看节点信息,此时 7007 已经具备 slot 可以数据的存储了

    添加节点2

VI. 删除节点

  1. 删除节点比较简单

    [root@localhost redis-7.0.0]# ./src/redis-cli -a 123 -p 7001 --cluster del-node 127.0.0.1:7001 8a452b4b7f26ddd52f2eb1bfa1c4865363b4143a
    
  2. 执行后会发现有一个报错,这是因为该节点中有 slot ,所以删除失败。那么首先需要把哈希槽给清空掉。

    删除节点

  3. 其实移出很简单,只需要把刚刚添加节点的命令再过一遍就可以了

    (1) 上面中添加了 700 的 slot,那么此时移出的也还是 700 ;

    (2) 那么这 700 分配给谁呢?此时就不是上面的 7007 了,这里是从 7007 分配给三个 master 中的任意一个都可以;

    (3) 这里输入的是 7007 的 ID 然后 done 结束。表示从 7007 这里的 solt 值去分

  4. 然后就完事了,把哈希槽清空掉,删除就一段代码的事情了。

更详细的 Redis 总结可以参考一下这里:Redis 总结

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天怎么不会塌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值