mysql一主一从需要哨兵吗

mysql一主一从需要哨兵吗,第1张

一般的文档,都把redis的集群方式分成三种:主从、哨兵、集群(这里的集群只是广义集群的一种)。但是这么分类很不严谨,哨兵模式,单独使用是没有意义的,哨兵的作用有两个:监控:监控主节点和从节点是否正常运行

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

故障迁移:主数据库出现故障时自动将从数据库转换为主数据库

说白了,哨兵就是一个打辅助的,本身并不提供数据存储功能,能独立使用的方式只有两种,主从模式和集群模式,所以我认为将redis分为两类比较合适:主从集群配合哨兵使用

分布式(分区)集群

2 主从集群

主从集群,将数据库分为两种角色,一种是主数据库(master),另一种是从数据库(slave)。主数据库可以进行读写 *** 作,从数据库只能有读 *** 作(并不一定,只是推荐这么做,后续会说明)。当主数据库有数据写入,会将数据同步复制给从节点,一个主数据库可以同时拥有多个从数据库,而从数据库只能拥有一个主数据库。值得一提的是,从节点也可以有从节点,级联结构。

Sentinel(哨兵)进程的作用:

1.监控(Monitoring): sentinel会不断地检查你的Master和Slave是否运作正常

2.提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知

3.自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移 *** 作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断

客观下线 (Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的服务器下线判断。(一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)

https://www.cnblogs.com/JJY-/articles/12066861.html

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。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8461818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存