redis哨兵和集群区别是什么?

redis哨兵和集群区别是什么?,第1张

redis哨兵和集群区别是:

监控主数据库和从数据库是否正常运行。

主数据库出现故障时自动将从数据库转换为主数据库。sentinel发现master挂了后,就会从slave中重新选举一个master。哨兵模式强调高可用。

Sentinel会不断地检查你的主服务器和从服务器是否运作正常。

提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作。

它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器。

当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。

客户端中不会记录redis的地址(某个IP),而是记录sentinel的地址,这样我们可以直接从sentinel获取的redis地址。

因为sentinel会对所有的master、slave进行监控,它是知道到底谁才是真正的master的,例如我们故障转移,这时候对于sentinel来说,master是变了的,然后通知客户端。

而客户端根本不用关心到底谁才是真正的master,只关心sentinel告知的master。

集群即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。

为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容,共有16384个slot。

每个redis分得一些slot,hash_slot = crc16(key) mod 16384找到对应slot,键是可用键,如果有{}则取{}内的作为可用键,否则整个键是可用键。

集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。cluster是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器。

集群模式提高并发量。

Redis:Remote Dictionary Server ,即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

很精辟的一段话,"未曾清贫难做人,不经打击永天真;成熟不过是善于隐藏,沧桑不过是无泪有伤。"

redis的主从配置比较容易,主从配置后,主主要进行写的操作,从主要进行读的操作,那么如果主挂了,是不是就没法进行写了?所以redis中可以进行哨兵的配置,具有高可用性,即是在主挂了之后,哨兵检测到后,会在从中进行投票,投票数多的晋升为主。这个配置可折腾我了,按照找的资料进行了哨兵的配置,可是当我把主服务停掉之后,从还在一致尝试连接主

启动哨兵日志

停掉主后从的日志

停掉后哨兵中,日志情况

就是这个问题我一直尝试找到解决办法,看了其中" sentinel-16379conf"中的配置差不多,跟网上的一样。但是就是不行。

sentinel-16379conf配置如下

这是我把这个配置文件的注释和空格都去掉后的结果

实际中我修改了如下几个配置

其他的可能都是自动生成的。当然你也可以自己指定日志位置。

auth-pass是因为我的主中做了配置密码了。

官网的配置说明: https://redisio/topics/sentinel

所以那为什么我的哨兵没有起作用了,最后我找了公司运维一起看,问题的原因就是我的从中的bind的这个属性没有做配置。

加上了这个,all done!!!

如果你直接使用

报错如下

因为bind只配置了101039105所以连接如下

哨兵启动结果

干掉主进程

哨兵的日志打印状况

从服务器的日志情况:

连接39105设置数据如下

哨兵监控如下:

测试从是否可以设置数据

在主上设置数据

在从上get数据

三:问题说明

上面也说了,第一次没有成功的原因是因为bind问题

我尝试翻译下如下

Redis的Sentinel文档

概述:Redis的Sentinel系统用于管理多个Redis服务器,该系统执行以下三个任务:

如何使用?

启动Sentinel

    对于 redis-sentinel 程序,你可以用一下命令来启动Sentinel系统:

    对于 redis-server 程序,你可以用下面的命令来启动一个运行在Sentinel模式下的Redis服务器

    两种方式都可以启动一个sentinel实例,启动sentinel实例必须指定相应的配置文件,系统会使用配置文件来保存sentinel的当前状态,并在Sentinel重启时通过载入配置文件来进行状态还原。

    注意:如果启动Sentinel时没有指定相应的配置文件,或者指定的配置文件不可用(not writabel),那么Sentinel会拒绝启动。

    如何配置Sentinel?

    Redis 源码中包含了一个名为 sentinelconf 的文件, 这个文件是一个带有详细注释的 Sentinel 配置文件示例。

运行一个 Sentinel 所需的最少配置如下所示:

    解读一下第一条指令的意思:

    其他选项的基本格式如下

学到这里我们进行实操一下,感受一下哨兵的威力!

    我们先在test目录下,新建三个配置文件:26379conf、26380conf、26381conf(Sentinel服务器端口号默认是在redis服务器前拼个2),用 vi 命令创建这三个配置文件,然后我们在配置文件中写入一些简单的配置:

端口号:26379,哨兵名称:mymaster,主机地址:127001,监控的redis端口号:6379,必须要2台从Sentinel服务器同意才会切换master,并进行故障迁移。(注意,这三个配置文件监控的redis服务器端口都是6379)

用相同的方法,创建了另外两个sentinel配置文件

我们先启动一个6379作为master

再启动6380、6381,作为两个slave

接下来正菜上场了!启动Sentinel!

可以发现,有两个slave正在跟随master,我们只要拿哨兵监控master,就可以看到有几个slave

我们继续启动,再接着启动两个Sentinel服务器

现在我们做一个小实验:如果我们将master服务器(6379)关闭,两个slave之间会发生什么?

当把master关闭之后,两个slave直接会有一段时间提示主服务器拒绝访问:

而哨兵开始也没有立马进行选举投票,选出新master,因为redis选举默认配的时间是有些长的,要过一点时间才开始选举投票,经过重新选举之后,sentinel选择了6381作为新的master。

那既然6381作为新秀,它应该有了很大的指导权,我们现在看看:

我们可以看到,在6381中设置的数据,确实在6380中可以查的到!说明6380在跟随6381,说明哨兵自动帮我们实现了故障转移。

我们再查看一下配置文件,看看有何变化?

可以发现,和原来我们写进去的2句配置完全不一样了,也就是说哨兵会自己改动配置文件。现在的master是6381。

接下来探讨一个问题:哨兵是如何发现其他哨兵的?

答案是:发布订阅机制。活着的master会去查看slave是谁,然后会去订阅其他的slave

我们可以用 psubscribe 去查看相关的发布订阅情况

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » redis哨兵和集群区别是什么?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情