redis主从配置以及哨兵模式详解

1.主从简介

1.主从用法

像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。
主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。
redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低redis的处理性能。
主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能。

2.主从同步原理
主从 – 同步原理
从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,
就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,
也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主
服务器将执行的写指令都缓存在内存中。
在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发
送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后
再将其读取到内存中。这个动作完成后,主服务器会将这段时间缓
存的写指令再以redis协议的格式发送给从服务器。
另外,要说的一点是,即使有多个从服务器同时发来SYNC指令,
主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发
给多个从服务器。
而在2.8版本之后,redis支持了效率更高的增量同步策略,这大大降
低了连接断开的恢复成本。主服务器会在内存中维护一个缓冲区,
缓冲区中存储着将要发给从服务器的内容。从服务器在与主服务器
出现网络瞬断之后,从服务器会尝试再次与主服务器连接,一旦连
接成功,主服务器就会向从服务器发送增量内容。
增量同步功能,需要服务器端支持全新的PSYNC指令。这个指令,
只有在redis-2.8之后才具有。

2.部署主从同步

1.准备三台机器
master 				192.168.13.139
slave1     				192.168.13.140
slave2					192.168.13.133
三台机器都要做:
systemctl stop firewalld && setenforce 0 #三台机器全部关闭防火墙和selinux
yum -y install gcc make   #下载编译安装工具
wget http://download.redis.io/releases/redis-4.0.9.tar.gz #下载redis
2.master配置
[root@master ~]# mkdir -p /data/yjssjm     #创建工作目录(自定义的)
[root@master ~]# tar xzf redis-4.0.9.tar.gz -C /data/yjssjm/    #解压,如果你的包跟我的不一样请不要直接复制
[root@master ~]# cd /data/yjssjm/
[root@master yjssjm]# mv redis-4.0.9/ redis #改名字
[root@master yjssjm]# cd redis/
[root@master redis]# make
注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
[root@redis-master redis]# vim redis.conf   
#找到并修改
bind 0.0.0.0
protected-mode no # 将加密保护关掉。此时外部网络可以直接访问

在这里插入图片描述

[root@master src]# cd src
[root@master src]# ./redis-server ../redis.conf &   #启动redis服务,并且加载此文件中的配置信息

如果你嫌上面的启动方式太不容易记,可以进行以下操作来配置到系统管理工具里面

[root@master redis]# cp redis.conf redis.conf.bak
[root@master redis]# vim redis.conf     添加以下代码
[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/data/yjssjm/redis/src/redis-server /data/yjssjm/redis/redis.conf  --daemonize no
ExecStop=/data/yjssjm/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown

[Install]
WantedBy=multi-user.target
======================================================================================
参数详解:
• [Unit] 表示这是基础信息 
• Description 是描述
• After 是在那个服务后面启动,一般是网络服务启动后启动

• [Service] 表示这里是服务信息 
• ExecStart 是启动服务的命令
• ExecStop 是停止服务的指令

• [Install] 表示这是是安装相关信息 
• WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
=========================================================================================
然后你就可以用以下方式开启服务了
[root@master system]# systemctl daemon-reload  #重新加载配置文件
[root@master system]# systemctl start redis.service
3.slave1配置
[root@slave1 ~]# mkdir -p /data/yjssjm     #创建工作目录(自定义的)
[root@slave1 ~]# tar xzf redis-4.0.9.tar.gz -C /data/yjssjm/    #解压,如果你的包跟我的不一样请不要直接复制
[root@slave1 ~]# cd /data/yjssjm/
[root@slave1 yjssjm]# mv redis-4.0.9/ redis #改名字
[root@slave1 yjssjm]# cd redis/
[root@slave1 redis]# make
注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
[root@slave1 redis]# vim redis.conf   
#找到并修改
bind 0.0.0.0
protected-mode no # 将加密保护关掉。此时外部网络可以直接访问
slaveof 192.168.13.139 6379 #master的内网ip和端口

在这里插入图片描述
在这里插入图片描述

[root@slave1 src]# cd src
[root@slave1 src]# ./redis-server ../redis.conf &   #启动redis服务,并且加载此文件中的配置信息
4.slave2配置
[root@slave2 ~]# mkdir -p /data/yjssjm     #创建工作目录(自定义的)
[root@slave2 ~]# tar xzf redis-4.0.9.tar.gz -C /data/yjssjm/    #解压,如果你的包跟我的不一样请不要直接复制
[root@slave2 ~]# cd /data/yjssjm/
[root@slave2 yjssjm]# mv redis-4.0.9/ redis #改名字
[root@slave2 yjssjm]# cd redis/
[root@slave2 redis]# make
注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
[root@slave2 redis]# vim redis.conf   
#找到并修改
bind 0.0.0.0
protected-mode no # 将加密保护关掉。此时外部网络可以直接访问
slaveof 192.168.13.139 6379 #master的内网ip和端口

在这里插入图片描述
在这里插入图片描述

[root@slave2 src]# cd src
[root@slave2 src]# ./redis-server ../redis.conf &   #启动redis服务,并且加载此文件中的配置信息
5.测试
1.在master上面执行
[root@master src]# ./redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name yjssjm
OK
127.0.0.1:6379> get name
"yjssjm"

2.分别在slave1和slave2上面执行:
[root@slave1 src]# ./redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get name
"yjssjm"

在这里插入图片描述

3.redis-sentinel—哨兵模式

1.介绍
1、哨兵简介:Redis Sentinel 
Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。
2、作用
1):Master状态检测 
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave 
3):Master-Slave切换后,sentinel.conf的监控目标会随之调换 
3、工作模式
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令 
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。 
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。 
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。
4、主观下线和客观下线  
主观下线:Subjectively Down,简称 SDOWN,指的是当前 一个Sentinel 实例对某个redis服务器做出的下线判断。 
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN  判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master  Server下线判断,然后开启failover
2.配置

三台机器都需要进行以下操作

1.每台机器上修改sentinel.conf配置文件:修改如下配置
[root@master src]# cd ..
[root@master redis]# vim sentinel.conf
sentinel monitor mymaster 192.168.13.139 6379 2 
#当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。mymaster时自定义的集群名字 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000
#单位毫秒 3000毫秒没响应,认为主观下线
sentinel failover-timeout mymaster 10000   
#若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no  
#关闭加密模式--新添加到sentinel配置文件中
2.每台机器启动哨兵服务:
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf
注意:在生产环境下将哨兵模式启动放到后台执行:     ./src/redis-sentinel sentinel.conf &

在这里插入图片描述
在这里插入图片描述
将master的哨兵模式退出(Crtl+c),再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换)
[root@master redis]# systemctl stop redis.service
或者用kill命令杀死
注意:kill命令一定要杀的是服务
在这里插入图片描述
在这里插入图片描述

发布了38 篇原创文章 · 获赞 116 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/baidu_38803985/article/details/105166535