redis的主从复制,哨兵值守
环境:
主服务器:192.168.10.10 Centos 7 redis-5.0.4
从服务器:192.168.10.129 Centos 7 redis-5.0.4
从服务器:192.168.10.130 Centos 7 redis-5.0.4
关于如何安装redis不再本文讨论范围内,不过您可以参考https://www.cnblogs.com/caesar-id/p/10846541.html
1、自定义192.168.10.10主服务器配置文件
[root@localhost ~]# vim /etc/myredis.conf
bind 192.168.10.10 // 绑定本机IP地址
port // redis端口号
daemonize yes // 设置后台启动
pidfile /var/log/redis/myredis.pid // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
loglevel notice // 设置日志等级
logfile /var/log/redis/myredis.log // 设置日志文件
dbfilename dump.rdb
dir /opt/redis-5.0./data/myredis // redis数据库文件路径
protected-mode no // 为了方便这里关闭了安全模式,实际中应开启次选项
注意:这里的路径必须存在,redis没有智能到帮你把路径都创建好的,所以你需要自己创建上面所需要的文件路径。
2、创建配置文件中对应的目录
[root@localhost ~]# mkdir -p /var/log/redis // redis的日志文件存放路径
[root@localhost ~]# mkdir -p /opt/redis-5.0./data/myredis // 创建redis的数据库存储目录
到此主服务器的配置已经算是初步完成。下面配置从服务器
3、自定义从服务器192.168.10.129配置文件
[root@localhost ~]# vim /etc/myredis.conf
bind 192.168.10.129 // 绑定本机IP地址
port // 为了和主服务器区分这里使用9001
daemonize yes // 设置后台启动
pidfile /var/log/redis/myredis.pid // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
loglevel notice // 设置日志等级
logfile /var/log/redis/myredis.log // 设置日志文件
dbfilename dump.rdb
dir /opt/redis-5.0./data/myredis // redis数据库文件路径
protected-mode no // 为了方便这里关闭了安全模式,实际中应开启次选项
slaveof 192.168.10.10 // 主服务器的IP和端口
4、同样创建配置文件中对应的路径
[root@localhost ~]# mkdir -p /var/log/redis // redis的日志文件存放路径
[root@localhost ~]# mkdir -p /opt/redis-5.0./data/myredis // 创建redis的数据库存储目录
此时从服务器192.168.10.129配置初步完成,下面配置从服务器192.168.10.30。
5、 自定义从服务器192.168.10.129配置文件
[root@localhost ~]# vim /etc/myredis.conf
bind 192.168.10.130 // 绑定本机IP地址
port // 为了区分这里使用9002
daemonize yes // 设置后台启动
pidfile /var/log/redis/myredis.pid // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
loglevel notice // 设置日志等级
logfile /var/log/redis/myredis.log // 设置日志文件
dbfilename dump.rdb
dir /opt/redis-5.0./data/myredis // redis数据库文件路径
protected-mode no // 为了方便这里关闭了安全模式,实际中应开启次选项
slaveof 192.168.10.10 // 主服务器的IP和端口
6、创建配置文件中对应的路径
[root@localhost ~]# mkdir -p /var/log/redis // redis的日志文件存放路径
[root@localhost ~]# mkdir -p /opt/redis-5.0./data/myredis // 创建redis的数据库存储目录
好了主从关系到此算是配置完成,下面我们进行验证配置是否正确。
7、验证主从配置
7.1开启192.168.10.10主服务器的redis
[root@localhost ~]# redis-server /etc/myredis.conf
[root@localhost ~]# ps -ef | grep redis

如果你看到上图说明我们的主服务器192.168.10.10中的redis已经运行起来了。
7.2开启192.168.10.129从服务器的redis
[root@localhost ~]# redis-server /etc/myredis.conf
[root@localhost ~]# ps -ef | grep redis

非常幸运的跑起来了。
7.3开启192.168.10.130从服务器的redis
[root@localhost ~]# redis-server /etc/myredis.conf
[root@localhost ~]# ps -ef | grep redis

一切都很顺利。
7.4登陆192.168.10.10主服务器查看主从关系
[root@localhost ~]# redis-cli -p -h 192.168.10.10

希望你也能看到和上面一样的信息。
7.5登陆192.168.10.129从服务器查看主从关系
[root@localhost ~]# redis-cli -p -h 192.168.10.129

7.6登陆192.168.10.130从服务器查看主从关系
[root@localhost ~]# redis-cli -p -h 192.168.10.129

7.7在主服务器添加一个键查看是否会同步到从服务器

上面虽然是实现了主从复制的功能,但是如果我们的主服务器突然挂了呢?我们知道从服务器是只读的,没有写入的权限。我们来看下杀掉主进程会变成什么样子。
8、删掉主服务器192.168.10.10的redis

9、查看从服务器状态

上面的结果我确信并不是我们想要的,我们想要的是主服务器在突发情况下down后,有一台从服务器能够代替主服务器继续工作。
这里有两种解决方案:
- 我们手动指定一台从服务器为主服务器。
- 通过哨兵实现自动在从服务器中选举出一个主服务器。
1、手动指定192.168.10.129为主服务器(关闭服务器的从服务器的角色)
[root@localhost ~]# redis-cli -p -h 192.168.10.129
192.168.10.129:> slaveof no one // 关闭从服务器角色
1.1、在192.168.10.130从服务器中指定主服务器是192.168.10.129
[root@localhost ~]# redis-cli -p -h 192.168.10.130
192.168.10.130:> slaveof no one // 关闭从服务器角色
192.168.10.130:> slaveof 192.168.10.129 // 指定主服务器是192.168.10.129
1.2、最终查看配置如下

也许你会认为这种方式很low并且不智能,我也认为你说的是对的。
在进行下面哨兵选举前,请先把192.168.10.10,192.168.10.129和192.168.10.130的配置文件调整为初始状态。因为上面已经指定了192.168.10.129为主服务器,
192.168.10.130是192.168.10.129的从服务器,192.168.10.10是一台单独的主服务器,你也可以把192.168.10.10调整为192.168.10.129的从服务器。不过这样你就会和我下面做的不太一样了。但无论怎样,调整好配置文件,重新启动主/从服务器的redis在进行下面的操作。
2、通过哨兵选举,在从服务器中选择一个从服务器作为主服务器。
2.1先停止所有主、从服务器的redis
[root@localhost ~]# pkill - redis

·2.2在主服务器192.168.10.10中添加哨兵的配置文件
[root@localhost ~]# vim /etc/myredis-sentinel.conf
bind 192.168.10.10 // 绑定本机地址
port // 哨兵端口
dir "/opt/redis-5.0.4/data/myredis-sentinel" // 哨兵工作目录
logfile "/var/log/redis/mysentinel.log" // 哨兵日志文件位置
daemonize yes // 开启守护进程
protected-mode no // 关闭安全模式
sentinel monitor myredis 192.168.10.10 9000 2 // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认
sentinel down-after-milliseconds myredis 30000 // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。
sentinel parallel-syncs myredis 1 // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。
sentinel failover-timeout myredis 180000 // 故障转移超时时间。
2.3创建哨兵的工作目录
[root@localhost ~]# mkdir -p /opt/redis-5.0./data/myredis-sentinel
2.4添加从服务器192.168.10.129的哨兵配置文件
[root@localhost ~]# vim /etc/myredis-sentinel.con
bind 192.168.10.129 // 绑定本机地址
port // 哨兵的端口号
dir "/opt/redis-5.0.4/data/myredis-sentinel" // 哨兵工作目录
logfile "/var/log/redis/mysentinel.log" // 哨兵日志目录
daemonize yes // 开启守护进程
protected-mode no // 关闭安全模式
sentinel monitor myredis 192.168.10.10 9000 // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认
sentinel down-after-milliseconds myredis 30000 // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。
sentinel parallel-syncs myredis 1 // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。
sentinel failover-timeout myredis 180000 // 故障转移超时时间。
2.5创建哨兵的工作目录
[root@localhost ~]# mkdir -p /opt/redis-5.0./data/myredis-sentinel
2.6添加从服务器192.168.10.130的哨兵配置文件
[root@localhost ~]# vim /etc/myredis-sentinel.conf
bind 192.168.10.130 // 绑定本机地址
port // 哨兵端口号
dir "/opt/redis-5.0.4/data/myredis-sentinel" // 哨兵工作目录
logfile "/var/log/redis/mysentinel.log" // 哨兵日志目录
daemonize yes // 开启守护进程
protected-mode no // 关闭安全模式
sentinel monitor myredis 192.168.10.10 9000 // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认
sentinel down-after-milliseconds myredis 30000 // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。
sentinel parallel-syncs myredis 1 // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。
sentinel failover-timeout myredis 180000 // 故障转移超时时间。
2.7创建哨兵的工作目录
[root@localhost ~]# mkdir -p /opt/redis-5.0./data/myredis-sentinel
2.8开启主/从服务器的redis服务
[root@localhost ~]# redis-server /etc/myredis.conf

2.9查看主从关系

由上图可知,redis的主从关系正常。
2.10.1开启主/从哨兵服务
[root@localhost ~]# redis-sentinel /etc/myredis-sentinel.conf

2.10.2查看哨兵当前状态
[root@localhost ~]# redis-cli -p -h 192.168.10.10 info sentinel // 查看主服务器的哨兵(在主服务器192.168.10.10)
[root@localhost ~]# redis-cli -p -h 192.168.10.129 info sentinel // 查看从服务器的哨兵(在从服务器192.168.10.129)
[root@localhost ~]# redis-cli -p -h 192.168.10.130 info sentinel // 查看从服务器的哨兵(在从服务器192.168.10.130)

2.10.3杀掉主服务器192.168.10.10的redis服务,查看哨兵是否会在从服务器中选举出一台主服务器。
[root@localhost ~]# ps -ef | grep redis // 查看redis的进程号
[root@localhost ~]# kill - // 根据redis的进程id杀掉它

杀掉主服务器后查看两个从服务器的状态

发现两台从服务器都已经检测到主服务器192.168.10.10的redis已经无法连接,我们稍等片刻,在来看看我们的哨兵是否尽职尽责,为我们自动选举出一台主服务器。

好了哨兵值守就演示到这里吧。
redis的主从复制,哨兵值守的更多相关文章
- 浅谈:redis的主从复制 + 哨兵模式
浅谈:redis的主从复制 + 哨兵模式 主从模式 在谈论redis的主从复制之前,我们先回想下mysql的主从搭建过程,第一步呢首先要在主库服务器中修改my.cnf,开启一下bin_log功能, ...
- linux安装redis及主从复制、读写分离、哨兵模式
Redis安装与部署 版本最好选择3.0及以上.以后还可以部署Redis集群. 1.下载: [root@bogon redis-3.0.0]# cd /usr/local [root@bogon lo ...
- 5.如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?
作者:中华石杉 面试题 如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么? 面试官心理分析 其实问这个问题,主要是考考你,redis ...
- redis之 主从复制和哨兵
一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...
- redis的主从复制和哨兵模式
Redis主从复制是什么? 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 Redis主从复制 ...
- contos7下安装redis&redis的主从复制的配置&redis 哨兵(sentinel)
一.centos7下安装redis 1.解压 redis-5.0.5.tar.gz 压缩文件 解压命令为: .tar.gz -C redis 解压后进入 redis 工作目录,进入 redis-5.0 ...
- Redis如何实现高可用【主从复制+哨兵机制+keepalived】
实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...
- 《【面试突击】— Redis篇》-- Redis的主从复制?哨兵机制?
能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注左上角编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis的主从复制?哨兵机制? 在这个 ...
- Redis的主从复制与Redis Sentinel哨兵机制
1 Redis的主从复制 1.1 什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损 ...
随机推荐
- JavaWeb项目 IDEA+Tomcat+Nginx 部署流程
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11375100.html 一:IDEA Maven项目打包 1.修改打包方式 在maven项目的pom文件中, ...
- 2019CCPC网络赛 C - K-th occurrence HDU - 6704(后缀数组+ST表+二分+主席树)
题意 求区间l,r的子串在原串中第k次出现的位置. 链接:https://vjudge.net/contest/322094#problem/C 思路 比赛的时候用后缀自动机写的,TLE到比赛结束. ...
- day23_7.29 多态和类的内置方法
一.多态 在现实生活中,多态也会体现.如对于水这种物质,有固态:冰,液态:常态,气态:水蒸气, 在程序中,其官方定义是:多个不同对象可以相应同一方法,产生不同的结果. 而在python中,多态不是一个 ...
- opencv鼠标事件
#include <opencv2\opencv.hpp> using namespace cv; struct mouse_para { cv::Mat org; cv::Mat img ...
- Git 创建点开头的文件和目录
Git 创建点开头的文件和目录 # 创建 .gitignore 文件 1@DESKTOP-3H9092J MINGW64 /e/x1/x1/demo1 (master) $ echo .idea &g ...
- maven介绍(一)
一.什么是maven Maven 翻译过来就是专家,其官网为: http://maven.apache.org/ Maven使用POM (Project Object Model)项目对象模型,就是通 ...
- Python 包:
分享一波油藏描述方面的Python开源包 前一阵去捷克参加了数学地质年会(IAMG2018),听完汇报,发现在数学地质领域用python的越来越多了,他们的很多成果都是用python做出来的.不管喜不 ...
- DES介绍
DES对称加密算法中的一种.是一个分组加密算法. 密钥长64位.(密钥事实上是56位参与DES运算(第8.16.24.32.40.48.56.64位是校验位)56 位 8位奇偶校验位. DES算 ...
- Python进阶-V 迭代器(Iterator)、生成器(Generator)函数
一.迭代器 1.可循环的有哪些,即可用for语句或者while语句的数据类型有哪些? 字符串(str).列表(list).元组(tuple).字典(dic).集合(set).枚举类(enumerate ...
- node fs相对路径
如果在js里面使用了node.js的fs,在传入path参数时,如果使用相对路径,按照根目录的层级就是用就好. 比如:目录结构为: a -b -c -c1.js d 在c1.js中调用时,如果需要使用 ...