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 地址和端口号:
在下面可以找到一个相同的配置将其注释掉:sentinel monitor mymaster 127.0.0.1 6379 2
这个端口号后面跟的 2,意思是有 2 个及以上的哨兵节点认为 master 宕机了,才重新在从节点中选取 master 节点。
注意:别名最好设置为 mymaster
,虽然是自定义但是好像跟其他的参数设置有关联,可能是需要保持别名一致,默认是 mymaster。
2. 启动 sentinel
和 redis 生成的 dump.rdb
文件一样,在哪里运行的在哪生成sentinel.log
文件,所以一般在 redis 的安装根目录下运行
3. 模拟 redis 的 master 宕机效果![image-20221216174007198](https://picimg-blog.oss-cn-nanjing.aliyuncs.com/blog-img/image-20221216174007198.png)
此时可以通过日志信息看到 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
,而为了防止出现同票,所以哨兵个数最好是奇数。
效果原理跟单哨兵一样。