redis的集群

高可用方案

1、持久化

2、高可用 主从复制 哨兵模式 集群

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

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

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

主从复制的工作原理
主从复制的工作原理流程图

redis的集群_第1张图片

1、建立连接:slave向主发送一个syn command(同步),请求和主节点建立连接

2、主节点收到请求之后,他不管slave是第一次连接还是重新连接,主节点都会启动一个后台进程,执行BGSAVE,主节点会把所有修改数据记录的命令加载到缓存和数据文件之中

3、数据文件创建完毕之后,master把数据文件传送给slave,slave会把这个数据文件,先保存到硬盘,然后再加载到内存

主从复制实验

架构(redis服务器)

20.0.0.20 主

20.0.0.21 从1

20.0.0.22 从2

关闭防护墙和安全机制
主配置
vim /etc/redis/6379.conf
监听地址为
0.0.0.0
700行
no改为yes
重启服务

配置从1
vim /etc/redis/6379.conf
监听地址为
0.0.0.0
278行
replicaof 20.0.0.20 6379
700行
no改为yes
重启服务

配置从2
vim /etc/redis/6379.conf
监听地址为
0.0.0.0
278行
replicaof 20.0.0.20 6379
700行
no改为yes
重启服务

主节点查看日志
tail -f /var/log/redis_6379.log

所有服务器登录redis
在主创建set键值对,并在从上查看是否同步
从只能读 

查看主从策略
redis-cli info replication
哨兵模式

先有主从再有哨兵

在主从复制的基础之上,实现主节点故障的自动切换

哨兵模式的原理

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

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

哨兵模式也需要三个节点

哨兵模式的结构

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

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

哨兵模式的工作机制流程图

redis的集群_第2张图片

1、主从节点上都有哨兵

2、主节点的哨兵监控从节点1和从节点2

3、从节点1的哨兵监控主节点和从节点2

4、从节点2的哨兵监控主节点和从节点1

哨兵投票机制

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

主节点选举过程

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

主节点的选举过程

1、已经下线的从节点,不会被选为主节点

2、选择配置文件当中,从节点优先级最高的replica-priority 100

3、选择一个复制数据最完整的从节点

主节点
cd /opt/redis-5.0.7
vim sentinel.conf
17行
取消注释
关闭保护模式

26行
daemonize yes
后台运行

36行
logfile "/var/log/sentinel.log"
指定日志文件

65行
dir "var/lib/redis/6379"
数据库存放路径

84行 
sentinel monitor mymaster 20.0.0.20 6379 2
2表示至少需要2台服务器,认为主已经下线,才会进行主从切换

113行
sentinel down-after-milliseconds mymaster 30000
判断时间周期30秒(最小)

从节点1
cd /opt/redis-5.0.7
vim sentinel.conf
17行
取消注释
关闭保护模式

26行
daemonize yes
后台运行

36行
logfile "/var/log/sentinel.log"
指定日志文件

65行
dir "var/lib/redis/6379"
数据库存放路径

84行 
sentinel monitor mymaster 20.0.0.20 6379 2
2表示至少需要2台服务器,认为主已经下线,才会进行主从切换

113行
sentinel down-after-milliseconds mymaster 30000
判断时间周期30秒(最小)


从节点2
cd /opt/redis-5.0.7
vim sentinel.conf
17行
取消注释
关闭保护模式

26行
daemonize yes
后台运行

36行
logfile "/var/log/sentinel.log"
指定日志文件

65行
dir "var/lib/redis/6379"
数据库存放路径

84行 
sentinel monitor mymaster 20.0.0.20 6379 2
2表示至少需要2台服务器,认为主已经下线,才会进行主从切换

113行
sentinel down-after-milliseconds mymaster 30000
判断时间周期30秒(最小)

先启动主节点,再启动从节点(在源码包下)
redis-sentinel sentinel.conf &

查看整个集群的哨兵模式
redis-cli -p 26379 info Sentinel
模拟故障切换
查看主节点的进程号
ps -elf | grep redis

主停服务
查看日志

你可能感兴趣的:(redis,数据库,缓存)