08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法

5 Redis 集群

2.8版本之前, Redis采用主从集群模式. 实现了数据备份和读写分离

2.8版本之后, Redis采用Sentinel哨兵集群模式 , 实现了集群的高可用

5.1 主从集群搭建

首先, 基本所有系统 , “读” 的压力都大于 “写” 的压力

Redis 的主从集群是一个“一主多从”的读写分离集群(运用哨兵机制后会升级为3主多从)。
集群中的 Master 节点负责处理客户端的读写请求,而 Slave 节点仅能处理客户端的读请求

一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

5.1.0 集群节点数总是建议为奇数

首先,集群必须有过半的机器是正常工作的,整个集群才可对外服务。

那么我们列举一些情况,来看看在这些情况下集群的容错性。

如果有2个节点,那么只要挂掉1个节点,集群就不可用了。此时,集群对的容忍度为0;
如果有3个节点,那么挂掉1个节点,还有剩下2个正常节点,超过半数,可以重新选举,正常服务。此时,集群的容忍度为1;
如果有4个节点,那么挂掉1个节点,剩下3个,超过半数,可以重新选举。但如果再挂掉1个,只剩下2个,就无法正常选举和服务了。此时,集群的容忍度为1;
依次类推,5个节点,容忍度为2;6个节点容忍度同样为2;

也就是2n和2n-1的容忍度是一样的,都是n-1。那么,为了节省资源,集群当然选择奇数节点。

5.1.1 伪集群搭建与配置

在采用单线程 IO 模型时,为了提高处理器的利用率,一般会在一个主机中安装多台 Redis,构建一个 Redis 主从伪集群。当然,搭建伪集群的另一个场景是,在学习 Redis,而学习用主机内存不足以创建多个虚拟机。

下面要搭建的读写分离伪集群包含一个 Master 与两个 Slave。它们的端口号分别是:6380、 6381、6382。

5.1.1.1 在集群文件夹中创建公共redis.conf文件
  1. 在 redis 安装目录中 mkdir 一个目录,名称随意。这里命名为 cluster。

  2. 然后将 redis.conf文件复制到 cluster 目录中。称为公共conf

尽管一主两从主机会有自己的conf文件, 且配置各不相同. 但他们三者之间配置相同的地方, 就放到这个公共conf文件中.

稍后各台结点使用include命令将公共conf文件包含进自己特有的conf文件中
08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第1张图片

5.1.1.2 修改 redis.conf文件
  1. masterauth
    08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第2张图片

  2. repl-disable-tcp-nodelay

08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第3张图片

5.1.1.3 新建每个节点自己的conf文件并启动
  1. 在cluster下新建三个 redis 配置文件, 分别为 redis6380.conf, redis6381.conf , redis6382.conf. 其内容如下
#将公共conf文件包含进来
include redis.conf
#分配不同的pid与端口
pidfile /var/run/redis_6380.pid
port 6380
#指定RDB和AOF持久化文件的文件名
dbfilename dump6380.rdb
appendfilename appendonly6380.aof
#若master挂了 , 这个salve被选举为master的优先级
#默认是100 , 越小越高.
#例外是0. 若设为0, 指定该主机永远不能当master
replica-priority 90

# logfile access6380.log
include redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
appendfilename appendonly6381.aof
replica-priority 80
# logfile access6381.log
include redis.conf
pidfile /var/run/redis_6382.pid
port 6382
dbfilename dump6382.rdb
appendfilename appendonly6382.aof
replica-priority 70
# logfile access6382.log
  1. 使用三个配置文件分别启动三台redis
    08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第4张图片
5.1.1.4 设置主从关系

再打开三个会话框,分别使用客户端连接三台 Redis。

  1. 通过redis-cli -p 指定端口号, 进而指定进入哪个redis 的命令行
  2. 在三台节点的命令行分别输入 info replication命令 , 可发现三台节点的 role 都是 master
  3. 通过 slaveof 命令,指定 6380的 Redis 为 Master。 其中127.0.0.1是本地环回地址, 意为三台节点同属一个ip地址
    08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第5张图片
  4. 在三台节点的命令行分别输入 info replication命令 ,
    可发现81和82的 role 已经变为 slave, 且带有master的信息
    80端口会显示所有从节点的信息
    08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第6张图片
5.1.1.5 主从集群的性质
  1. 在80端口set几个键值对, 在81和82端口上可以正常查询到
  2. 在82/83端口set键值对时, 会报错. 因为从节点不允许写
    在这里插入图片描述
  3. 尽管从节点关机不会影响整个集群的正常的工作, 但每次从节点的重新启动后 , 都要重新用slaveof命令将从节点纳入集群.

5.1.2 分级管理

若 Redis 主从集群中的 Slave 较多时,它们的数据同步过程会对 Master 形成较大的性能压力。此时可以对这些 Slave 进行分级管理。
08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法_第7张图片设置方式很简单,只需要让低级别 Slave 指定其 slaveof 的主机为其上一级 Slave 即可。不过,上一级 Slave 的状态仍为 Slave,只不过,其是更上一级的 Slave。

5.1.3 容灾冷处理

在 Master/Slave 的 Redis 集群中,若 Master 出现宕机怎么办呢?
有两种处理方式,一种是通过手工角色调整,使 Slave 晋升为 Master 的冷处理;一种是使用哨兵模式,即热处理 , 来实现 Redis集群的高可用 HA(High Availability)

但无论 Master 是否宕机,Slave 都可通过 slaveof no one 将自己由 Slave 晋升为 Master。如果其原本就有下一级的 Slave,那么,其就直接变为了这些 Slave 的真正的 Master 了。而原来的 Master 也会失去这个原来的 Slave。


5.2 主从复制

主从复制,是指将master节点的数据,复制到slave节点中, 发生在slaveof命令之后。

数据的复制是单向的,只能由主节点到从节点。

中小项目未必会做Redis 的集群,但是至少都做了主从()

集群和主从的概念区别?
集群是多台机器做同一件事情(高性能HPC) 或

你可能感兴趣的:(08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法)