Redis高可用之主从复制及哨兵模式

一、Redis的主从复制

1.1 Redis主从复制定义

主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用;
主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读)

1.2 主从复制流程

(主从复制推荐使用AOF)

1)若启动一个slave机器进程,则它会向Master机器发送一个sync command命令,请求同步连接

2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中执行bgsave操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中

3)后台进程完成缓存操作之后,Master机器就会向slave机器发送数据文件,slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给slave端机器若slave出现故障导致宕机,则恢复正常后会自动重新连接

4)Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果Master同时收到多个slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常

1.3 主从复制实操(一主二从)

主从复制架构

20.0.0.91:MASTER
20.0.0.92:SLAVE1
20.0.0.93:SLAVE2

关闭防火墙

systemctl stop firewalld
setenforce 0

修改master配置文件

vim /etc/redis/6379.conf 
--70--
bind 0.0.0.0
#修改监听地址为0.0.0.0,允许所有网段访问

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

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

--264--
dir /var/lib/redis/6379
#指定工作目录

--700--
appendonly yes
#开启AOF持久化功能

/etc/init.d/redis_6379 restart

修改slave配置文件

#salve1、slave2相同操作
vim /etc/redis/6379.conf 
--70--
bind 0.0.0.0
#修改监听地址为0.0.0.0,允许所有网段访问

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

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

--264--
dir /var/lib/redis/6379
#指定工作目录

--288--
replicaof 20.0.0.91 6379
#指定要同步的Master节点的IP和端口

--700--
appendonly yes
#开启AOF持久化功能
​​
/etc/init.d/redis_6379 restart  #重启redis
ss -natp | grep redis      #查看主从服务器是否已建立连接

测试

测试主从复制以及读写分离

 

测试slave断开时,master写入数据,slave恢复正常后能否复制

二、Rdis的哨兵模式

在主从复制的基础上,哨兵引入了主节点的自动故障转移。

2.1 哨兵模式的组成

哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

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

2.2 哨兵模式的原理

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

1).监控: 哨兵会不断地检查主节点和从节点是否运作正常。
每个哨兵节点每隔一秒,通过ping命令方式,检测主从之间的心跳线。
主节点在一定时间内没有回复或者回复了错误的消息,此时哨兵就会主观地认为主节点下线,
超过半数的哨兵节点认为主节点下线时,才会将主节点认为客观下线。

2).自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
主节点的选举原则:
已经下线的从节点不会被选为主节点;
选择配置文件当中优先级最高的从节点作为主节点(replica-priority 100);
选择一个复制数据最完整的从节点作为主节点。
(如何实现切换:主节点出现故障时,从节点通过投票的方式选择一个新的master )

3).通知(提醒): 哨兵可以将故障转移的结果发送给客户端。

2.3 哨兵模式实操

修改哨兵节点配置文件

#所有节点相同操作
vim /opt/redis-5.0.7/sentinel.conf
--17--
protected-mode no
#取消注释,关闭保护模式

--21--
port 26379
#Redis哨兵默认的监听端口

--26--
daemonize yes
#指定sentinel为后台启动

--36--
logfile "/var/log/sentinel.log"
#指定日志文件存放路径

--65--
dir "/var/lib/redis/6379"
#指定数据库存放路径

--84--
sentinel monitor mymaster 20.0.0.91 6379 2 
#指定该哨兵节点监控20.0.0.91:6379这个主节点,该主节点的名称是mymaster。
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
​
--113--
sentinel down-after-milliseconds mymaster 30000
#判定服务器down掉的时间周期,默认30000毫秒(30秒)

--146--
sentinel failover-timeout mymaster 180000
#同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

启动哨兵模式并查看哨兵状态

#启动三台节点上的哨兵模式
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
 
#在哨兵节点查看监控状态
[root@localhost ~]# redis-cli -p 26379 info Sentinel

模拟故障测试

#Master
ps -elf | grep redis
kill -9 pid号  #Master节点上redis-server的进程号
netstat -natp | grep redis

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值