Redis——04 学习

Redis——04

之前讲了 redis 的主从复制模型的优点以及搭建效果,但是依然有自己的缺陷,如果主节点宕机,那么其他从节点可能还有运行的,如果此时任意一个从节点升级生了主节点那么一切照旧,反之主节点没有了,那么从节点又只能做读操作,那么此时的 redis 服务就只能提供读而不能提供写操作。这就是主从复制模型的缺陷,所以来了解一下哨兵模型。

哨兵(Sentinel)

redis 默认只有 master 具备写的能力,而 slave 只能读,那么为了解决 master 宕机后,redis 依旧可以读写,加入哨兵,简单原理就是:让一个 slave 变成 master,整个节点就可以继续工作。即便之前的 master 恢复过来,也可以做当前 master 的 slave。

redis 的哨兵就是监控整个节点,当 master 宕机的情况下,帮忙重新选取 master。

redis 中的哨兵支持单哨兵和多哨兵。单哨兵只要发现 master 宕机,就直接选取另一个 master。而多哨兵则是根据设定,达到一定哨兵的临界值之后才认为该 master 宕机,会重新选取一个 master。

1. 准备:

创建一个文件夹(redis-sentinel)专门用作 redis 哨兵模型,注意哨兵不做读写,只是单纯的起到一个服务 redis 整个节点的。

一个哨兵同样的像一个 redis 服务一样,需要一个 redis 的安装包。

并且删除 *.rdb 文件,以及 redis.conf,因为 redis 专门提供了一份哨兵的配置文件 sentinel.conf,在 redis 的源码包下。

2. 单哨兵

复制一份 redis 安装包到 redis-sentinel 下。

1. 配置 sentinel.conf

默认情况下哨兵也是一个服务占用端口的,port:26379

设置后台运行:daemonize yes

还需设置日志文件:logfile "当前哨兵安装跟目录下/sentinel.log"

以及哨兵监控的 master 的 ip 地址和端口号:

image-20221216113453838

在下面可以找到一个相同的配置将其注释掉:sentinel monitor mymaster 127.0.0.1 6379 2 这个端口号后面跟的 2,意思是有 2 个及以上的哨兵节点认为 master 宕机了,才重新在从节点中选取 master 节点。

注意:别名最好设置为 mymaster,虽然是自定义但是好像跟其他的参数设置有关联,可能是需要保持别名一致,默认是 mymaster。

2. 启动 sentinel

和 redis 生成的 dump.rdb 文件一样,在哪里运行的在哪生成sentinel.log 文件,所以一般在 redis 的安装根目录下运行

image-20221216172312644

3. 模拟 redis 的 master 宕机效果image-20221216174007198

此时可以通过日志信息看到 master 已经是 7002 端口的 redis 服务了,可以登录 7002 查看信息(info repication)。而如果此时再启动之前被关闭 master,打印信息会发现之前的 master 启动后变成了 slave。

这就是哨兵的作用。

3. 多哨兵

在单哨兵的基础上增加哨兵个数,并且有一个配置需要更改:

sentinel monitor mymaster <masterIP> <6379|masterPort> <2|判定 master 宕机的哨兵个数>

而后面的参数 2,则是判断 master 宕机的哨兵个数,如果有 2 个确定了master 宕机了,就重新选取一个 slave 变成 master 继续服务。而这个数最好是(哨兵个数 - 1) / 2 ,而为了防止出现同票,所以哨兵个数最好是奇数。

效果原理跟单哨兵一样。

posted @ 2022-12-19 10:32  CN_DADA  阅读(21)  评论(0编辑  收藏  举报