redis的主从复制和哨兵模式

2023-12-29 22:53:39

redis的集群:

高可用方案:

  1. 持久化
  2. 高可用 ??主从复制 哨兵模式 集群

主从复制:主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用。

主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器只能读)

缺陷:故障无法自动恢复,需要人工干预,无法实现写操作的负载均衡

主从复制的工作原理:

主节点(master)从节点(slave)组成,数据复制是单向的,只能从主节点到从节点

主从复制节点最少要有三台

  1. 建立连接:slave向主发送一个syn command,请求和主节点建立连接
  2. 主节点收到请求之后,他不管slave是第一次连接还是重新连接,主节点都会启动一个后台进程,执行BGSAVE,主节点会把所有修改数据记录的命令加载到缓存和数据文件之中
  3. 数据文件创建完毕之后,master把数据文件传送给slave,slave会把这个数据文件先保存到硬盘,然后再加载到内存。

主从复制推荐使用AOF,通过AOF文件实现实时持久化,主从节点都开启AOF持久化服务从节点同步的就是AOF文件

主从复制流程图:

主 192.168.120.110

从1 192.168.120.70

从2 192.168.120.10

修改master节点的配置文件

vim /etc/redis/6379.conf

?bind 0.0.0.0 ?????????????????????#70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)

?daemonize yes ????????????????????#137行,开启守护进程,后台启动

?logfile /var/log/redis_6379.log ??#172行,指定日志文件存放目录

?dir /var/lib/redis/6379 ??????????#264行,指定工作目录

?appendonly yes ???????????????????#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart ????#重启redis服务

修改slave1节点的配置文件

#修改slave1的配置文件

vim /etc/redis/6379.conf

?bind 0.0.0.0 ???????????????????????#70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)

?daemonize yes ??????????????????????#137行,开启守护进程,后台启动

?logfile /var/log/redis_6379.log ????#172行,指定日志文件目录

?dir /var/lib/redis/6379 ????????????#264行,指定工作目录

?replicaof 192.168.120.110?6379 ??????#288行,指定要同步的Master节点的IP和端口

?appendonly yes ?????????????????????#700行,修改为yes,开启AOF持久化功能?

/etc/init.d/redis_6379 restart ?#重启redis

netstat -natp | grep redis ?????#查看主从服务器是否已建立连接

Slave2节点跟slave1节点操作相同

测试

Master写入数据

Slave1和slave2 只能读无法写

哨兵模式的原理:

哨兵:是一个分布式系统,用于在主从结构之间,对每台redis的的服务进行监控

哨兵模式的投票机制

主节点出现故障时,从节点通过投票的方式选择一个新的master

哨兵模式的结构:

哨兵节点:监控,不存储数据

数据节点:主节点和从节点,都是数据节点

哨兵模式的投票机制:

每个哨兵节点每隔一秒,通过ping命令方式,检测主从之间的心跳线。主节点在一定时间内没有回复或者回复了错误的消息,这个时候,哨兵就会主观的认为主节点下线了,超过半数的哨兵节点认为主节点下线了,这个时候才会认为主节点是客观下线

主节点选举过程:

哨兵节点通过raft算法(选举算法),每个节点共同投票选举出一个新的master,然后新的master实现主节点转移和故障恢复通知

  1. 已经下线的从节点,不会被选为主节点
  2. 选择配置文件当中,从节点优先级最高的replica-priority 100
  3. 选择一个复制数据最完整的从节点

主节点:

cd redis-5.0.7

vim sentinel.conf

#哨兵模式的配置文件

17行

protected-mode no

#解除注释

daemonize yes

#开启后台运行逃兵模式

36行

logfile "/var/log/sentinel.log"

#指定日志文件的存放位置

65行

dir"/var/lib/redis/6379"

#指定数据库存放的位置

85行

sentinel monitor mymaster 192.168.120.110?6379 2

#声明主节点的IP和端口号.2代表至少要有2台服务认为主已经下线才会进行主从切换。一般配置为主从服务器的一半

113行

sentinel down-after-milliseconds mymaster 30000

#服务器宕机的最小时间。单位是毫秒。30秒之内如果主节点但没有响应,主观认为主下线了。时间可以改可以自定义

146行

sentinel failover-timeout mymaster 180000

#服务器宕机的最大时间,180秒之内如果主节点但没有响应,从节点开始投票,客观认为主下线了。时间可以改可以自定义

两台从节点配置和主节点配置一致即可

三台配置完成后需要先起主节点再起从节点

三台主机在redis的源码包中启动哨兵模式

redis-sentinel sentinel.conf &

#启动哨兵模式。&表示后台运行

主节点:

redis-cli -p 26379 info Sentinel

#查看整个集群的哨兵情况

查看主从信息:

tail -f /var/log/redis_6379.log

#查看主节点日志,查看主从信息

模拟故障切换:

可能会有延迟不是立刻切换

ps-elf | grep redis

#查看主节点

kill -9 redis的主进程或者/etc/init.d/redis_6379 stop停止redis都可以测试

测试新主是否可以正常插入数据

测试两从是否可以数据同步

测试旧主机是否还有插入数据

旧主失去写的功能,新主增加写的功能。从2的配置文件指向了新的主

而旧主的配置文件中指向自己的配置将会消失

流程图:

文章来源:https://blog.csdn.net/DDYYmmm/article/details/135181596
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。