Redis持久化、主从与哨兵架构详解(干货满满,感谢诸葛老师)

Redis持久化、主从与哨兵架构详解

持久化
RDB快照(snapshot)

在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。
你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。
比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:

AOF(append-only file)

快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化,将修改的每一条指令记录进文件appendonly.aof中

主从架构图

在这里插入图片描述主从复制是为了什么呢? 无非就是说当master挂掉了,为了保证高可用,继续让slave顶替master去工作呗,在一个就是保证数据的完成性,回头因为master挂了数据丢了那就惨了下面说说原理:

主从复制原理(决定都能听得懂,自己的理解大家挺好,这也是面试必问的啊)

1.当给master配置了slave时(可能是多个从),从呢会给主发送一个命令(sync)大家就理解为一个心跳吧 这期间保持长连接 主和从一直通信着呢.
2.主收到这个请求的时候呢,就会用一个bgsave命令去后台生成rdb快照数据(这个bgsave是异步的啊),与此同时呢 客户端新过来的set操作啊咋办 嘿嘿 在2.8版本之后呢 redis会吧这些数据在内存中穿件一个缓存队列保存着
3.主把用bgsava生成的rdb文件传输给从.
4.然后将内中中缓存数据发送给从 send buffer
5.从将 rdb文件和 buffer 数据合并 刷新本地数据
6.将合并的数据生成新的rdb文件,并且将数据load到内存中
7.由于主从保持的是心跳 或者说是长连接 从而保证主可以一直把数据发送给从
这下大家明白了吧 嘿嘿 感觉还是挺好理解的 面试上应该说出来这些就好了 对于全量复制 和 增量赋值 差别就是那个buffer呦

下面就是搭建主从服务了 嘿嘿 按照我说的做 一次搞定
1、复制一份redis.conf文件

2、将相关配置修改为如下值:
port 6380
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dir /usr/local/redis-5.0.3/data/6380

3、配置主从复制
replicaof 192.168.0.60 6379   # 从本机6379的redis实例复制数据
replica-read-only yes

4、启动从节点
redis-server redis.conf

5、连接从节点
redis-cli -p 6380

6、测试在6379实例上写数据,6380实例是否能及时同步新修改数据

7、可以自己再配置一个6381的从节点

说明一下哈 本人呢是整个了服务器 远程调用的时候呢会发生 127.0.0.1:6379访问被拒绝 那么只需要将
在这里插入图片描述
注释掉就好啦 还有可能呢会报错说模块受保护 别急 看下面
在这里插入图片描述
将YES改成NO 就好啦
现在主从就搭建好了 主从之间也建立的很好的机制 但是现在我们的从是只读的啊 是不可以set数据的呢
记好 一会下面会说这个

Redis哨兵高可用架构

在这里插入图片描述
哨兵是干嘛的呢 就是站岗的嘛 对不对 就是检测redis集群的健康状况 那么问题来了 我干嘛要用你这个呢你说你站岗我就要用你了? 你说你是哨兵,有啥用.这样 我们来说一个场景 假如说按照上图我们的master挂掉了 那么作为程序猿的我们肯定要考虑到这种情况下 那么我们就要自己考虑 主挂掉了 肯定是要把slave变成主嘛 咋搞 修改他的conf文件,然后写一个算法,搞一搞他的选举机制,而且呢还要判断是不是因为网络抖动假死啊 哦 当然了 我没死就是卡了你下 你就把我的地位从主变成从了 闹呢 哈哈 开个玩笑 要实现这套机制是真的很麻烦.
程序猿:哨兵 你这些能干么?
哨兵:废话 等你半天了 我就干这个的.
程序猿:好吧.还是你厉害.
嘿嘿 懂了吧 说说原理吧 官方语言啊.

sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)
怎么玩哨兵呢 超级简单
1、复制一份sentinel.conf文件
cp sentinel.conf sentinel-26379.conf

2、将相关配置修改为如下值:
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel-26379.pid"
logfile "26379.log"
dir "/usr/local/redis-5.0.3/data"
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
sentinel monitor mymaster 192.168.0.60 6379 2

3、启动sentinel哨兵实例
src/redis-sentinel sentinel-26379.conf

4、查看sentinel的info信息
src/redis-cli -p 26379
127.0.0.1:26379>info
可以看到Sentinel的info里已经识别出了redis的主从

5、可以自己再配置两个sentinel,端口26380和26381,注意上述配置文件里的对应数字都要修改

这下就搭建好了 试一试就ok啦 这就是哨兵模式 当然啦这就是基础入门的 后续会更新选举机制啊 做到高可用啊 后期慢慢在分享 先分享到这里吧 有问题欢迎留言 最后感谢诸葛老师的分享和教学 感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值