nosql数据库 redis

一、介绍

1、redis与mysql的区别:

Redis是一种基于键值对的内存数据库,数据存储在内存中,因此读写速度非常快。它支持多种数据结构,如字符串、哈希、列表等。

MySQL是一种关系型数据库,数据以表格的形式组织存储在磁盘上,通过SQL查询语言进行操作。

2、redis持久化存储化的方式:

RDB (Redis DataBase):

在指定的时间间隔内生成数据的快照,并将快照保存到一个以.rdb为后缀的文件中,存储到磁盘上。默认开启,故障点到上一次备份之间的数据无备份

AOF (Append Only File):

以追加日志的方式记录 redis 服务器接收到的每个写操作,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复。默认关闭,完整记录数据的操作指令。

3、安装:

源码:Index of /releases/

解压 Redis 源码安装包:tar -zxvf redis-5.0.0.tar.gz

进入 Redis 目录:cd redis

编译(编译前确认操作系统已经安装 gcc)如果没有安装 gcc 会报错,重新编译前需要运行:make && make install

二、redis 主从复制的实现

1、redis主从复制原理:

Redis主从复制是一种在多个Redis节点之间同步数据的机制,旨在实现数据冗余、故障恢复、负载均衡和读写分离。通过主从复制,可以在一个主节点(Master)和一个或多个从节点(Slave)组成的集群中,确保数据的一致性和系统的高可用性。

● 步骤:

① 连接与同步请求:从节点(Slave)主动与主节点(Master)建立网络连接,发送SYNC 命令,请求复制主节点的数据。

② 主节点快照:接收到同步请求后,主节点执行后台保存操作(BGSAVE),生成当前数据集的快照(RDB文件),将生成的RDB文件发送给从节点。

③ 从节点加载与重放:从节点接收并载入RDB文件,然后按照接收到的命令流顺序执行这些写操作,使得自身数据状态与主节点在快照时刻一致。

④ 增量复制:全量同步完成后,主节点持续将后续接收到的所有写命令发送给从节点。从节点实时接收并执行这些命令,保持与主节点数据的实时同步。

⑤ 心跳检测与故障恢复:从节点周期性地向主节点发送心跳(PING)以维持连接并检查主节点状态。

2、主从复制配置:

(1) 环境:
redis master:10.1.1.100

redis slave1:10.1.1.60

redis slave2:10.1.1.80

(2) 修改配置文件:

① 配置监听地址:

在所有机器上配置监听各种的ip地址:
vim /root/redis/redis.conf

bind IP #监听地址(各自写各自的IP)

daemonize yes #后台守护进程运行

② 开启从配置:

从节点上配置主节点的ip地址和端口号

(3) 查询并测试:

① 三台集机器开启redis:

cd redis

redis-server redis.conf

② 登录主服务器查看主从关系:

③ 验证主从同步:

在主节点上添加一个key,从节点上能够查询到该key的value。

三、Sentinel(哨兵)实现Redis的高可用性

1、原理:

Sentinel(哨兵)是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

● 基本原理是:心跳机制+投票裁决:

① 心跳机制(Heartbeat):Sentinel节点通过定期发送心跳(PING)命令来检测Redis主节点和从节点的运行状态。

② 主观下线(Subjective Down):当一个Sentinel节点在一定时间内未收到某个节点(主节点或从节点)的响应时,它会将该节点标记为“主观下线”(SDOWN)。

③ 客观下线(Objective Down):当多个Sentinel节点都报告同一个节点为“主观下线”时,该节点就被确定为“客观下线”(ODOWN)。

④ 投票裁决(Agreement Protocols):在主节点被判定为客观下线后,Sentinel节点之间需要通过投票来决定是否执行故障转移(failover)操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让其他从服务器复制新的主服务器。

2、流程图:

① 正常的主从服务:

② sentinel 监控到主redis 下线:

③ 由优先级升级新主:

④ 旧主修复,作为从redis,新主照常工作:

3、sentinel 配置:

(1) 在每台机器上配置sentinel:

在主节点上配置sentinel哨兵,只需指定主机器的IP,等sentinel 服务开启,它能自己查询到主上的从redis。

cd redis

vim sentinel.conf

port 26379 #Redis Sentinel监听端口为26379,为了避免与Redis服务本身使用的默认端口(6379)冲突。

daemonize yes

sentinel monitor mymaster 10.1.1.100 6379 1 #指定主redis和投票裁决的机器数,即至少有1个sentinel节点同时判定主节点故障时,才认为其真的故障

sentinel down-after-milliseconds mymaster 30000 #如果联系不到节点30000毫秒,我们就认为此节点下线。

sentinel failover-timeout mymaster 180000 #设定转移主节点的目标节点的超时时长。

(2) 从节点指定优先级:

vim redis.conf

replica-priority 100

#复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;当优先级一样时,随机选举。

(3) 每台机器开启sentinel服务:

./src/redis-sentinel sentinel.conf

查看当前的主节点:

(4) 模拟主master-redis 故障:

查看新的主节点:

旧的主节点恢复后,自动变为从节点,直到新的主节点故障后再重新选举主节点。

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值