Tip:生活不易,码农辛苦
我是小刀,在互联网中夹缝求生 我希望你开心…
Redis ——主从复制和哨兵模式
开篇简介
因为上一篇文章讲了 redis 的安装并且在项目跑起来之后就想玩一下redis的分布式集群,之后就是各种学习,发现Mac系统下操作网上的资源少的狠而且坑还多,跟他步骤一样但是效果却不一样,太难了。其次就是版本差距太大,百度上的东西基本都是redis 3* ,版本不一样就会有好多目录结构不一样,所以我搞的是redis5.0的。过程并不麻烦,还是要多理解原理,下面就是我的安装过程和原理介绍。
安装redis和扩展
未安装的小伙伴点击传送门
传送门:https://blog.csdn.net/m0_46693411/article/details/105398841
搭建主从
一. 总结
在Redis集群中,让若干个Redis服务器去复制另一个Redis服务器,所以定义被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),这种模式叫做主从复制模式。可以为数据提供多个副本,实现高可用,并实现读写分离(主节点负责写数据,从节点负责读数据,主节点并把数据同步到从节点保证数据的一致性)。
二. 创建目录
本人创建多个有其他用处,我们以7000 和 7001节点为实列
三. 配置文件
-
将redis 中的redis.conf文件分别拷贝到7000,7001节点下
-
修改主节点 redis.conf配置文件
#修改端口号为6379 port 6379 #修改 是否要用守护线程的方式启动 daemonize yes
-
分别修改7000,7001节点redis.conf文件
#端口号分别修改为7000,7001 port 7000/7001 #守护线程修改过就不用在修改 daemonize yes #配置主机复制的主ip和端口 slaveof/replicaof 127.0.0.1 6379 #配置从节点是否只读 replica-read-only yes
-
多开几个终端分别启动6379,7000,7001节点服务
以7000节点启动为例
-
redis-cli -p 端口 进入redis , 使用info replication命令查看当前状态
四. 缺点
延时问题,由于所有的写操作都是在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使得这个问题更加严重。
哨兵模式
一. 总结
哨兵(Sentinel):具有监控(Monitoring),提醒(Notification),自动故障迁移(Automatic failover)功能。主要是为了解决在主从复制架构中出现宕机的情况,主从复制有一个问题就是故障无法自动化,哨兵模式就可以很好解决主节点故障自动化转移的问题,进一步提高系统的高可用。
二. 配置文件
-
分别将redis安装目录下的sentinel.conf拷贝到7000,7001节点目录下
-
修改sentinel.conf 配置文件
# 添加守护进程模式 daemonize yes # 添加指明日志文件名 logfile "/usr/local/redis/sentinel.log" # 修改启动端口 port 26379 # 添加关闭保护模式 protected-mode no # 修改sentinel monitor # sentinel monitor <master-name> <ip> <redis-port> <quorum> # macrog-master:监控主数据的名称,自定义即可. # 127.0.0.1:监控的主数据库的IP # 6379:监控的主数据库的端口 # 2:最低通过票数 sentinel monitor macrog-master 127.0.0.1 6379 2 #依次修改7000,7001 配置
-
启动哨兵命令
#在各个节点目录中 redis-server sentinel.conf --sentinel
-
通过登入哨兵查看集群的信息
redis-cli -p 26379 sentinel master macrog-master//查看master的状态 sentinel slaves macrog-master //查看salves的状态 sentinel sentinels macrog-master //查看哨兵的状态 sentinel get-master-addr-by-name macrog-master //获取当前master的地址 info sentinel //查看哨兵信息
-
通过kill掉redis主节点进程来模拟故障
故障前
故障后
三. 哨兵缺点
哨兵在发现master挂掉后会进行故障转移,也就是启动其中 一个slave为master,在这过程中,可能会导致数据丢失的情况,主要有异步复制导致的数据丢失和脑裂导致的数据丢失两种问题。还有哨兵在读写分离场景下,从节点故障会导致读服务不可用,需要我们对从节点做额外的监控、切换操作。此外,哨兵仍然没有解决写操作无法负载均衡、及存储能力受到单机限制的问题。