问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

redis主从和哨兵

发布网友 发布时间:2022-09-06 19:34

我来回答

1个回答

热心网友 时间:2024-02-01 16:40

主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性

a,配置主从复制方式一、新增redis6380.conf, 加入 slaveof 192.168.152.128 6379, 在6379启动完后再启6380,完成配置;
b,配置主从复制方式二、redis-server --slaveof 192.168.152.128 6379 临时生效

c,查看状态:info replication
d,断开主从复制:在slave节点,执行6380:>slaveof no one
e,断开后再变成主从复制:6380:> slaveof 192.168.152.128 6379
f,数据较重要的节点,主从复制时使用密码验证: requirepass
e,从节点建议用只读模式slave-read-only=yes, 若从节点修改数据,主从数据不一致
h,传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis提供repl-disable-tcp-nodelay参数决定是否关闭TCP_NODELAY,默认为关闭
参数关闭时:无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景,
参数启用时:主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,主从的同步延迟40毫秒,适用于网络环境复杂或带宽紧张,如跨机房

a)一主一从:用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要),这样即保证了数据的安全性,也避免持久化对主节点的影响

b)一主多从:针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定

c)树状主从:一主多从的缺点(主节点推送次数多压力大)可用些方案解决,主节点只推送一次数据到从节点B,再由从节点B推送到C,减轻主节点推送的压力。

redis 2.8版本以上使用psync命令完成同步,过程分“全量”与“部分”复制
全量复制:一般用于初次复制场景(第一次建立SLAVE后全量)
部分复制:网络出现问题,从节点再次连接主节点时,主节点补发缺少的数据,每次数据增量同步
心跳:主从有长连接心跳,主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率

a)主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主
b)主从复制主节点的写能力单机,能力有限
c)单机节点的存储能力也有限

a)主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点;
b)其它的节点成为新主节点的从节点,并从新节点复制数据;
c)需要人工干预,无法实现高可用。

1. 为什么要有哨兵机制?

原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

其实整个过程只需要一个哨兵节点来完成,首先使用Raft算法(选举算法)实现选举机制,选出一个哨兵节点来完成转移和通知

任务1:每个哨兵节点每10秒会向主节点和从节点发送info命令获取最拓扑结构图,哨兵配置时只要配置对主节点的监控即可,通过向主节点发送info,获取从节点的信息,并当有新的从节点加入时可以马上感知到

任务2:每个哨兵节点每隔2秒会向redis数据节点的指定频道上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其它哨兵节点的信息及对主节点的判断,其实就是通过消息publish和subscribe来完成的

任务3:每隔1秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据

客观下线:当主观下线的节点是主节点时,此时该哨兵3节点会通过指令sentinel is-masterdown-by-addr寻求其它哨兵节点对主节点的判断,当超过quorum(选举)个数,此时哨兵节点则认为该主节点确实有问题,这样就客观下线了,大部分哨兵节点都同意下线操作,也就说是客观下线

a)每个在线的哨兵节点都可以成为领导者,当它确认(比如哨兵3)主节点下线时,会向其它哨兵发is-master-down-by-addr命令,征求判断并要求将自己设置为领导者,由领导者处理故障转移;
b)当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;
c)如果哨兵3发现自己在选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举…………

a)由Sentinel节点定期监控发现主节点是否出现了故障

sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了

b) 当主节点出现故障,此时3个Sentinel节点共同选举了Sentinel3节点为领导,负载处理主节点的故障转移

c) 由Sentinel3领导者节点执行故障转移,过程和主从复制一样,但是自动执行

流程:

1. 将slave-1脱离原从节点,升级主节点,

d) 故障转移后的redis sentinel的拓扑结构图

a) 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点

b) 选择salve-priority从节点优先级最高(redis.conf)的

c) 选择复制偏移量最大,指复制最完整的从节点

以3个Sentinel节点、2个从节点、1个主节点为例进行安装部署

1. 前提:先搭好一主两从redis的主从复制,和之前的主从复制搭建一样,搭建方式如下:

A)主节点6379节点(/usr/local/bin/conf/redis6379.conf):

修改 requirepass 12345678,注释掉#bind 127.0.0.1

B) 从节点redis6380.conf和redis6381.conf: 配置都一样

修改 requirepass 12345678 ,注释掉#bind 127.0.0.1,

加上访问主节点的密码masterauth 12345678 ,加上slaveof 192.168.152.128 6379

2. redis sentinel哨兵机制核心配置(也是3个节点):

将三个文件的端口改成: 26379 26380 26381

然后:sentinel monitor mymaster 192.168.152.128 63792 //监听主节点6379

三个配置除端口外,其它一样。

3. 哨兵其它的配置:只要修改每个sentinel.conf的这段配置即可:

sentinel monitor mymaster 192.168.152.128 6379 2

//监控主节点的IP地址端口,sentinel监控的master的名字叫做mymaster,2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了

sentinel auth-pass mymaster 12345678 //sentinel连主节点的密码

sentinel config-epoch mymaster 2 //故障转移时最多可以有2从节点同时对新主节点进行数据同步

sentinel leader-epoch mymaster 2

sentinel failover-timeout mymasterA **180000 **//故障转移超时时间180s,

a,如果转移超时失败,下次转移时时间为之前的2倍;

b,从节点变主节点时,从节点执行slaveof no one命令一直失败的话,当时间超过180S时,则故障转移失败

c,从节点复制新主节点时间超过180S转移失败

sentinel down-after-milliseconds mymasterA 300000//sentinel节点定期向主节点ping命令,当超过了300S时间后没有回复,可能就认定为此主节点出现故障了……

sentinel parallel-syncs mymasterA 1//故障转移后,1代表每个从节点按顺序排队一个一个复制主节点数据,如果为3,指3个从节点同时并发复制主节点数据,不会影响阻塞,但存在网络和IO开销

4. 启动redis服务和sentinel服务:

a)先把之前安装的redis里面的标绿色的文件都拷贝到 usr/local/bin目录下,然后再再bin目录下新建一个conf文件夹存放配置好的redis主从配置文件和哨兵配置文件

b)启动主从复*务,先启动主再启动从

主:./redis-server conf/redis6379.conf &

从:

./redis-server conf/redis6380.conf &

./redis-server conf/redis6381.conf &

c)启动sentinel服务:

./redis-sentinel conf/sentinel_26381.conf &

到此服务全部启动完毕

连接到6379的redis的服务,可看到6379就是主节点,他有6380和6381两个从节点

5. 测试:kill -9 6379 杀掉6379的redis服务

可以看到杀掉6379以后6380变为了主节点,6381变为了6380的从节点

重新启动6379以后变为6380的从节点

看日志是分配6380 是6381的主节点,当6379服务再启动时,已变成从节点

假设6380升级为主节点:进入6380>info replication 可以看到role:master

打开sentinel_26379.conf等三个配置,sentinel monitor mymaster 192.168.152.128 63802

打开redis6379.conf等三个配置, slaveof 192.168.152.128 6380,也变成了6380

注意:生产环境建议让redis Sentinel部署到不同的物理机上。

a,sentinel节点应部署在多台物理机(线上环境)

b,至少三个且奇数个sentinel节点

c,通过以上我们知道,3个sentinel可同时监控一个主节点或多个主节点

sentinel参考资料:
redis sentinel的机制与用法一: https://segmentfault.com/a/1190000002680804

redis sentinel的机制与用法二: https://segmentfault.com/a/1190000002685515

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉民政职业学院地址在哪里 全国有哪些民政学院 武汉民政学院 北京哪些区较好 北京哪个区环境好 北京海淀区属于什么档次 北京市哪个区最好 北京哪个区房子最好 递延是什么意思通俗 婚后是不是一定要自己买房子才可以结婚呢? eye假睫毛胶水怎么打开 给农村的父母上什么保险最好呢? 物业工程主管工作总结 2021最吉祥的,2021年能带来好运的微信名字有哪些? 物业工程工作总结 大学生怎样提高科学素养 灰指甲治疗多少钱如题 谢谢了 火锅和冒菜得区别 无法登录怎么办? 登陆不了怎么办 登陆不了怎么处理 如何快速提升自己的科学素养 不小心把402胶水滴到车座上,怎么处理 如何将.bin转换成apk格式? 为什么不当护士 红烧乳鸽是哪里的菜? 顺丰在线人工客服怎么查看聊天记录 在ipad上如何解锁已经停用的ipad? 美味烙菜饼怎么做好吃,美味烙菜饼的家常做 谁会烙菜饼呀,怎样做才好吃呢? 有什么幸福的故事? Redis集群模式1-主从复制+哨兵机制 Redis主从复制与一致性 「故障演练」 Redis Cluster集群,当master宕机,主从切换 为什么我的QQ微信桌面图标不会显示未读消息数目呢??? 溪桥的意思 写桥的诗词名句 用来形容不脚踏实地耍小聪明的名言 行尸走肉在哪里能看? 在哪里可以看行尸走肉第6季。 行尸走肉第七季第二集在哪里能看。 怎么选中当前页word中 吃什么能补充蛋白质有哪些食物 期货真正赚钱的是哪几类人?其实就是这两类人! 联通光猫上红灯闪烁是什么意思? 含有两个既、又的句子 用两个又造句 仿写句子用又又 又什么又什么造句中间两个字的 2022年北京冬奥会小学生主题作文 3、5、9、17、33、下一个数字是多少