Redis主从、哨兵详解及安装

前言

Redis 主从复制的优缺点

Redis 主从复制是现在流行的 Redis 高可用方案,他的优点是可以分担压力,扩展读的能力,并且一台节点挂了,这个节点是主节点的话,从节点可以挑起大梁,承担重任。

Redis主从有啥缺点呢?

主节点宕机, 从节点上位, 那么需要人为修改所有应用方的主节点地址(改为新的master地址), 还需要命令所有从节点复制新的主节点。

Redis-sentinel (下面统称为哨兵)可以解决上面的问题。

Redis 哨兵模式的工作方式

  • 每个 sentinel 节点每秒都会向他所知的主节点、从节点、其他 sentinel 节点发送ping,每10秒向主节点和从节点发送 info 指令。
  • 如果一个实例距离最后一次回复 ping 命令的时间超过 down-after-milliseconds 的值,则被这个 sentinel 标记为主观下线。
  • 如果这个 master 节点 被多个哨兵都标记主观下线后,这个节点会被标记客观下线。
  • 当master节点被标记为客观下线后,该 sentinel 会与其他 sentinel 协商选出领头 sentinel 进行故障转移工作。每个发现主服务器进入客观下线的 sentinel 都可以要求其他sentinel选自己为领头 sentinel,选举是先到先得。如果所有超过一半的 sentinel 选举某 sentinel 领头 sentinel。之后该sentinel进行故障转移操作。
  • 首先是 slave 中选出一个从节点作为新的主节点。选点的依据依次是:网络连接正常->5秒内回复过INFO命令->10*down-after-milliseconds内与主连接过的->从服务器优先级->复制偏移量->运行id较小的。
  • 选出之后通过slaveif no ont将该从服务器升为新主服务器。 通过slaveof ip port命令让其他从服务器复制该信主服务器。
  • 之后会通过发布新的配置信息,修改配置信息。
    Redis主从、哨兵详解及安装_第1张图片
    Redis主从、哨兵详解及安装_第2张图片
    图片来源于https://www.cnblogs.com/huangfuyuan/p/9880379.html

主从复制的安装

废话不多说,我们直接来安装吧,使用版本如下:
Linux:CentOS 7 Redis:5.0.3

Redis 安装链接:https://www.cnblogs.com/heqiuyong/p/10463334.html

安装

首先,在/usr/local/redis 目录下创建一个文件夹 conf 和 db,db下创建三个文件夹

mkdir conf db
cd db
mkdir master slave_one slave_two

然后,配置三个配置文件 redis-6379.conf、redis-6380.conf、redis-6381.conf
内容分别是:
redis-6379.conf:

# 使用后台模式启动
daemonize yes
# 注释以下内容开启远程访问
# bind 127.0.0.1
# 修改启动端口为6379
port 6379
# 修改pidfile指向路径--Redis以守护进程方式运行时把pid写入文件
pidfile /usr/local/redis/conf/redis_6379.pid
# 数据文件的存放位置
dir /usr/local/redis/db/

redis-6380.conf:

# 使用后台模式
daemonize yes
# 关闭保护模式
#protected-mode no
# 注释以下内容开启远程访问
# bind 127.0.0.1
# 修改启动端口为6379
port 6380
# 修改pidfile指向路径
pidfile /usr/local/redis/conf/redis_6380.pid
#数据库的存放位置
dir /usr/local/redis/db/slave_one
#可以将当前服务器转变为 xx服务的从服务
slaveof 127.0.0.1 6379

redis-6381.conf:

# 使用后台模式
daemonize yes
# 关闭保护模式
#protected-mode no
# 注释以下内容开启远程访问
# bind 127.0.0.1
# 修改启动端口为6379
port 6381
# 修改pidfile指向路径
pidfile /usr/local/redis/conf/redis_6381.pid
#数据库的存放位置
dir /usr/local/redis/db/slave_two/
#可以将当前服务器转变为 xx服务的从服务
slaveof 127.0.0.1 6379

启动 Redis 服务

/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6379.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf 

查看是否启动成功

验证

在主库中插入一个key,然后去从库中查询
Redis主从、哨兵详解及安装_第3张图片

使用 info replication 可以查看主从状态
主库中, connected_slaved 属性表示从库数量
Redis主从、哨兵详解及安装_第4张图片

从库的 info replication 中,role:slave 表示自己是个从库。

master_last_io_seconds_ago:7 表示距上次io同步已经过了7秒,默认是 10 秒一次。

Redis主从、哨兵详解及安装_第5张图片

哨兵配置

配置

我们在原来的 redis 安装包中, 找到 sentinel.conf ,复制到 conf 文件夹。复制三份,分别为 sentinel-26379.conf、sentinel-26380.conf和 sentinel-26381.conf。

sentinel-26379.conf 配置如下

# sentinel 节点的端口
port 26379
# 不在后台启动,因为后面看日志会比较方便
daemonize no
# 这里代表监听哪个redis服务,2代表权重
sentinel monitor mymaster 127.0.0.1 6379 2
# 这个地方默认30000,即30秒,为了测试方便设置了12秒
sentinel down-after-milliseconds mymaster 12000

sentinel-26380.conf 和 sentinel-26381.conf 的配置只有 port 属性改成对应端口即可,其他属性一致。

启动哨兵

/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel-26379.conf
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel-26380.conf
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel-26381.conf

检查哨兵状态

使用 info sentinel 命令验证是否启动正常
Redis主从、哨兵详解及安装_第6张图片
图中最后一行表示 状态正常,master 节点地址 是6379 端口,两个从节点和三个哨兵节点。

验证哨兵1 从节点退出

先进入 redis-cli -p 6380 ,然后执行 shutdown。
此时,多个哨兵节点都打印了一行日志:

12702:X 18 May 2020 00:23:39.002 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379

表示有一个从节点 127.0.0.1:6380 已经被标记为主观下线。

6380节点启动之后,哨兵们会报出日志:

12702:X 18 May 2020 00:33:35.670 * +reboot slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
12702:X 18 May 2020 00:33:35.746 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379

验证哨兵2 主节点退出

进入主节点,然后进行 shutdown后,哨兵则输出日志:
Redis主从、哨兵详解及安装_第7张图片
我们可以看到,主节点挂了之后,6381 节点被选成了主节点,进入6381 查看主从状态:
Redis主从、哨兵详解及安装_第8张图片
图中可以看出,6381 成了主节点,6380 继续是从节点。

验证哨兵3 选举新的主节点后,旧的主节点启动

刚才 6381 成了主节点后,如果 6379 重新启动,会回到主节点的位置么?
答案是否,6379 只有当从节点的份。就比如你被一个小弟抢了你老大的位置,他肯给回你这个位置吗。因此当master 回来之后,他也只能当个小弟。
6379启动后,哨兵节点打印日志:

12714:X 18 May 2020 00:43:07.302 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
12714:X 18 May 2020 00:43:17.240 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381

进入 6379,输入 info replication:
Redis主从、哨兵详解及安装_第9张图片

你可能感兴趣的:(Redis,redis)