系列文章目录
!!!是的没错,胖友们,保姆教程系列又更新了!!!
保姆教程系列一、Redis部署 so easy
保姆教程系列二、Redis高可用(主从同步+哨兵模式)
保姆教程系列三、Redis高可用(Cluster集群模式)
文章目录
- 系列文章目录
- 前言
- 一、主从同步
- 什么是主从复制
- 主从复制的作用
- 主从复制的原理
- 第一步、环境准备
- 第二步、主从复制
- 2.1 redis环境配置
- 2.2 启动redis服务
- 2.3 查看主从状态
- 第三步、主从测试
- 3.1 主节点
- 3.2 从节点
- 二、哨兵模式
- 什么是哨兵模式
- 哨兵模式的原理
- 第一步、搭建哨兵
- 1.1 哨兵配置
- 1.2 启动哨兵
- 1.3 哨兵状态
- 1.4 容灾切换
- 哨兵模式的优缺点
- 三、下篇预告
- 总结
前言
请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、
上篇我们介绍到 保姆教程系列一、Redis部署 so easy
提示:以下是本篇文章正文内容,下面案例可供参考
一、主从同步
什么是主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。master以写为主,slave以读为主
。
主从复制的作用
数据冗余
:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复
:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。负载均衡
:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。读写分离
:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;高可用基石
:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
主从复制的原理
- Slave 启动成功连接到 master 后会发送一个
sync同步命令
master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步
。 - 全量复制:slave
服务在接收到数据库文件数据后,将其存盘并加载到内存中
。 - 增量复制:master
继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要是重新连接master,一次完全同步(全量复制)将被自动执行!主机的数据一定可以在从机中看到
。
第一步、环境准备
先准备四台服务器,并安装好redis服务,友情链接:
Centos下安装redis
注意:我们需要设置一下防火墙,否则主从机之间无法同步数据,命令如下,这里根据自己设置的端口进行更改。或者关闭防火墙
也可以
#查看防火墙是否开启
firewall-cmd --state 结果:not running没有运行
#关闭防火墙
systemctl stop firewalld.service
第二步、主从复制
2.1 redis环境配置
注意:修改四台机器redis安装路径下的配置文件redis.conf
#修改redis.conf
bind 0.0.0.0 #限定redis访问网卡
port 6739 # 绑定端口号
daemonize yes #用来指定redis是否要用守护进程的方式启动,默认为no
protected-mode no #设置为后台启动
logfile /usr/local/redis/log/redis_6379.log #redis日志文件
pidfile /usr/local/redis/log/redis_6379.pid #当redis以守护进程方式运行
replicaof 192.168.248.128 6379 #绑定主节点的方法,注意:主节点不需要这个配置,只配置从节点!!!
requirepass admin123 #本地redis密码
masterauth admin123 #主节点redis密码 注意:主节点也要配置,后边哨兵容灾切换用到
slaveof 192.168.248.128 6379 #从节点所依赖的主节点ip+端口,注意:主库不需要这个配置,只配置从库!!!
2.2 启动redis服务
注意:确保四台redis进程及端口存在
#启动redis服务
redis-server /usr/local/redis/conf/redis.conf &
#连接客户端
redis-cli -p 6379 -h 127.0.0.1
#验证密码
127.0.0.1:6379> auth admin123
OK
2.3 查看主从状态
info replication
详解:
role:master/slave # 当前角色是主/从节点
master_host:192.168.248.128 #主机信息
slave0:ip=从节点0的ip和端口
slave1:ip=从节点1的ip和端口
slave2:ip=从节点2的ip和端口
第三步、主从测试
3.1 主节点
192.168.248.128:6379> set key 123456
OK
3.2 从节点
192.168.248.129:6379> keys *
1) "key"
192.168.248.130:6379> get key
"123456"
192.168.248.131:6379> get key
"123456"
至此redis互为主从同步已经搭建完成
主从同步说明:
1、主机可以写,从机不能写,只能读。主机中的所有数据都会保存到从机中去。
2、主机断开连接,从机依旧连接到主机的,但是没有写操作,这个时候,主机如果回来了,从机依旧可以直接获取到主机写的信息!
3、如果是使用命令行,来配置的主从,这个时候如果重启了,就会变回主机!只要变为从机,立马就会从主机中获取值!
思考:
此时redis主从同步只是起到了数据灾备效果,当主机挂掉,从节点只能读取数据,不能写数据。这就导致当有新数据需要写入redis存储时,redis没有主机可写导致服务不可用,如何让redis实现真正高可用呢?
这就引申出redis的哨兵模式
二、哨兵模式
什么是哨兵模式
Redis Sentinel是Redis 的高可用性解决方案,由一个或多个Sentinel(哨兵)实例组成
。它可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器
,它的主要功能如下:
监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
通知(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel可以通过API向管理员或者其他应用程序发送通知。
故障迁移:
当主服务器不能正常工作时,Sentinel会自动进行故障迁移,也就是主从切换
。
统一的配置:
管理连接者询问sentinel取得主从的地址。
哨兵模式的原理
Sentinel 使用的算法核心是 Raft算法
,主要用途就是用于分布式系统,系统容错,以及Leader选举,每个Sentinel都需要定期的执行以下任务:
每个 Sentinel会自动发现其他 Sentinel 和从服务器,它以每秒钟一次的频率向它所知的主服务器、从服务器以及其他Sentinel实例发送一个 PING 命令
。
如果一个实例(instance)距离最后一次有效回复 PING 命令
的时间超过 down-after-milliseconds选项所指定的值, 那么这个实例会被Sentinel标记为主观下线。 有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN
。
如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有Sentinel要以每秒一次的频率确认主服务器的确进入了主观下线状态。
如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断,
那么这个主服务器被标记为客观下线。
在一般情况下, 每个Sentinel会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令
。当一个主服务器Sentinel标记为客观下线时,Sentinel向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10秒一次改为每秒一次。
当没有足够数量的Sentinel同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向Sentinel的 PING命令返回有效回复时, 主服务器的主管下线状态就会被移除。
第一步、搭建哨兵
1.1 哨兵配置
注意:在部署redis服务器上分别部署哨兵,每台服务器一个哨兵,配置方式相同,如下:
#创建工作路径
mkdir -p /usr/local/redis/sentinel
#进入安装包存放路径
cd /usr/local/redis/conf
#创建哨兵配置文件
vim sentinel.conf
sentinel.conf内容:
#端口默认为26379
port 26379
#关闭保护模式,可以外部访问。
protected-mode no
#设置为后台启动。
daemonize yes
#指定服务器IP地址和端口,并且指定当有3台哨兵认为主机挂了,则对主机进行容灾切换。 注意:三台哨兵这里的ip配置均为主节点ip和端口
sentinel monitor mymaster 192.168.248.128 6379 3
#当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster admin123
#这里设置了主机多少秒无响应,则认为挂了。
sentinel down-after-milliseconds mymaster 3000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的snetinel parallel-syncs mymaster 1
#故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000
#进程文件
pidfile "/usr/local/redis/redis-sentinel_26379.pid"
# log日志保存位置
logfile "/usr/local/redis/log/redis-sentinel.log"
# 工作目录
dir "/usr/local/redis/sentinel"
1.2 启动哨兵
注意:分别在三台从服务器上启动各自的哨兵
#进入redis解压缩包内
cd /opt/redis-6.2.6/bin
#开启哨兵,指定哨兵配置文件
redis-sentinel /usr/local/redis/conf/sentinel.conf
1.3 哨兵状态
#连接客户端,注意端口!!!
redis-cli -p 26379
#查看哨兵
info sentinel
哨兵已经监听到主节点IP端口和运行状态,并且有3个从节点,3个哨兵
1.4 容灾切换
(1)模拟主机宕机,将主机 redis 服务关闭,来查看哨兵的作用
(2)关闭主节点之后,我们去查看哨兵日志
(3)在其它节点中查看哨兵主从切换是否成功
(4)重新连接挂掉的主节点(当主节点连接回来之后自动变成了从节点,并且成功连上了主机)
(5)再去主节点确认一下节点信息
哨兵模式的优缺点
优点
- 哨兵集群,基于主从复制模式,所有的主从配置优点,它全有
- 主从可以切换,故障可以转移,系统的可用性就会更好
- 哨兵模式就是主从模式的升级,手动到自动,更加健壮!
缺点
- Redis不好在线扩容,集群容量一旦到达上限,在线扩容就十分麻烦
- 哨兵模式的配置繁琐
三、下篇预告
敬请关注下篇保姆教程系列三、Redis高可用(Cluster集群模式)
总结
我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!
参考链接、参考链接