一、集群是什么?

集群:集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。

集群的作用:

  • 分散单台服务器的访问压力,实现负载均衡;
  • 分散单台服务器的存储压力,实现可扩展性;
  • 降低单台服务器宕机带来的业务灾难。

二、集群的存储结构设计

在这里插入图片描述
对于输入的一个key,不是直接将其存储到某台服务器中,而是通过算法设计计算出应该存放的位置,之后再存储。

在这里插入图片描述

如果此时集群中加入了新的服务器,那么各个服务器需要需要给出各自的部分空间组成新的存储空间(给出的空间称为槽)。各个机器持有一定的槽,当加机器时分出自己的部分槽给新的机器,减机器时再将这些槽返回给其余机器。
不管多少台服务器,槽(slot)的总数不变都是16387,但是随着空间的增大每个槽的内存变大了。从而实现了扩容。

在这里插入图片描述
各个数据库相互通信,每个数据库都持有所有槽的编号数据。
当一个key经过两次算法计算得到具体的位置数值,如果此时访问A会去A中查找,如果命中了直接返回。如果一次未命中,则告知具体的位置直接去查找。

  • 槽用来区分数据的存储空间;
  • key 用来加密后确定数据的存储位置;
  • 一次命中或者两次命中就能够找到我们的数据。
  • 主机有槽但是从机没有槽,从机需要从主机那里复制过来。

三、集群的搭建

  1. 修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    # 开启集群
    cluster-enabled yes

    # 集群中单台机器的配置文件(每台机器不同需要区分开)
    cluster-config-file nodes-6379.conf

    # 机器下线时间(下线多久后得到反馈)
    cluster-node-timeout 10000
  2. 安装 ruby
    由于 redis 集群需要使用 ruby命令,因此我们需要安装 ruby,步骤如下:

    1
    2
    yum install ruby  #安装ruby
    yum install rubygems #ruby的包管理器gems,运行gem文件
  3. 启动六个redis实例(redis-server xxx.conf)

  4. 搭建集群(新版本已经不推荐使用ruby脚本的方式来搭建集群了):
    切换到 redis安装目录下的src目录下,执行里面的 redis-trib.rb ruby脚本文件
    ./redis-trib.rb create --replicas 1 主机1ip:port 主机2ip:port .... 从机1ip:port 从机2ip:port .....
    在这里插入图片描述
    新版本建议使用:
    redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
    在这里插入图片描述5. 数据存取
    连接客户端时使用: redis-cli -c -p xxx 这样能够做到自动路由到数据存储点
    在这里插入图片描述

四、主从下线和主从切换

1. 主从下线

  • 如果从机宕机: 从机宕机后不影响主机和其余机器,当从机恢复后重新从主机那里同步数据,恢复slave身份。
    在这里插入图片描述
  • 如果主机宕机: 主机宕机后会从从机中选举出一个服务器作为新主机。这时即使原本的主机恢复,它的身份就变为了从机。

在这里插入图片描述

总结

  • Cluster配置
    在这里插入图片描述
  • Cluster节点操作命令
    在这里插入图片描述

参考文章:
Redis集群的简单搭建
DNS递归查询与迭代查询