Redis哨兵模式(Sentinel)的搭建

一、Redis的哨兵模式

Sentinel是Redis官方提供的一种高可用方案(除了Sentinel,Redis Cluster是另一种方案),它可以自动监控Redis master/slave的运行状态,如果发现master无法访问了,就会启动failover把其中一台可以访问的slave切换为master,并且通过pub/sub事件通知Redis客户端新的master的ip地址。

支持Sentinel的Redis客户端(例如java的Jedis)会在连接Redis服务器的时候向Sentinel询问master的ip,并且会在收到master切换的pub/sub事件后自动重新连接到新的master。对调用Redis客户端的业务系统来说,这些都是完全透明的。通过设置一组哨兵sentinel,监控Master的运行,当Master不可用时,自动完成上述的动作,而不需人工干预。下图就是哨兵模式。每个哨兵sentinel会向其它sentinal、master、slave定时发送消息,以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SDOWN)。

若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称ODOWN),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

1、当redis master down了以后

2、监控到N个sentinel无法访问master

3、哨兵进程发起投票启动failover,投票结果为由其中一个哨兵进程发起failover

4、更新sentinel和slave的配置,将slave升级成master

5、向JedisClient发送master切换事件,jedis将访问新的master

二、Redis3.2.3哨兵模式的配置

两台机器:12.99.105.205和12.99.105.206;

一主一从:master 12.99.105.205:6379,slave 12.99.105.206:6379;

三个哨兵进程:12.99.105.205:26379,12.99.105.206:26379,12.99.105.206:26380。

使用root用户 修改 /etc/security/limits.conf文件,新增以下信息

redis hard nofile  30000
redis soft  nofile  30000

使用/usr/local/redis-3.2.3/data/作为数据目录,分配100G以上的空间

master的配置

daemonize yes
port 6379
pidfile "/usr/local/redis-3.2.3/data/redis.pid"
tcp-keepalive 60
logfile "usr/lcoal/redis-3.2.3/logs/redis.log"
dir "/user/local/redis-3.2.3/data"
masterauth "123456"
requirepass "123456"
appendonly yes

slave的配置

daemonize yes
port 6379
pidfile "/usr/local/redis-3.2.3/data/redis.pid"
tcp-keepalive 60
logfile "usr/lcoal/redis-3.2.3/logs/redis.log"
dir "/user/local/redis-3.2.3/data"
masterauth "123456"
requirepass "123456"
appendonly yes
slaveof 12.99.105.205 6379

slave与master的配置区别在于slave多了一行”slaveof 12.99.105.205 6379”。

12.99.105.205哨兵的配置为

port 26379
daemonize yes
pidfile "/usr/local/redis-3.2.3/data/sentinel.pid"
logfile "/usr/local/redis-3.2.3/sentinel.log"
protected-mode no
sentinel monitor mymaster 12.99.105.205 6379 2

12.99.105.206哨兵1的配置为

port 26379
daemonize yes
pidfile "/usr/local/redis-3.2.3/data/sentinel.pid"
logfile "/usr/local/redis-3.2.3/sentinel.log"
protected-mode no
sentinel monitor mymaster 12.99.105.205 6379 2

12.99.105.206哨兵2的配置为

port 26380
daemonize yes
pidfile "/usr/local/redis-3.2.3/data/sentinel.pid"
logfile "/usr/local/redis-3.2.3/sentinel.log"
protected-mode no
sentinel monitor mymaster 12.99.105.205 6379 2

哨兵的配置是一样的,唯一的区别是端口的差异。

sentinel monitor mymaster 12.99.105.205 6379 2

这一行的配置是最重要的,表示它监听的是哪个master,2表示3个哨兵中有2个哨兵认为符合启动failover的条件,才会启动failover,防止失误。

Java应用连接redis3.2.3主从集群需要使用commons-pool2-2.2.jar和jedis-2.8.0.jar,

Redis连接池初始化的代码如下,由于sentinel知道关于主从集群的一切信息(包括哪个是master,哪个slave),所以连接池初始化时,只需要把哨兵的信息传进去就可以了。

 1 Set<String> sentinelSet = new HashSet<String>();
 2 String[] sentinels = new String[]{"12.99.105.205:26379","12.99.105.206:26379","12.99.105.206:26380"};
 3 for(int i=0;i<sentinels.length;i++){
 4     sentinelSet.add(sentinels[i]);
 5 }
 6 String masterName="mymaster";
 7 String password="123456";
 8 int timeout=2000;
 9
10 JedisPoolConfig poolConfig=new JedisPoolConfig();
11 poolConfig.setMaxTotal(300);
12 poolConfig.setMaxIdle(200);
13 poolConfig.setTestOnBorrow(true);
14 poolConfig.setTestWhileIdle(false);
15
16 Pool<Jedis> pool = new JedisSentinelPool(masterName,sentienlSet,poolConfig,timeout,password);

三、Redis3.2.3哨兵模式的验证

测试程序应用通过Jedis不断地向redis主从集群set和get,当kill掉redis master 的进程,应用会出现短暂的报错(约30到40秒),之后又恢复正常。在这30~40秒的时间内,哨兵进程发起failover,更新sentinel、slave和原master的配置,将slave升级成master。

时间: 2024-08-20 07:30:07

Redis哨兵模式(Sentinel)的搭建的相关文章

Redis哨兵(Sentinel)模式

Redis哨兵(Sentinel)模式 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式. 一.哨兵模式概述 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行.其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例. Redis哨兵 这里的哨兵有两个作用 通过发送命令,让Re

Redis之哨兵模式Sentinel配置与启动(五)

一.介绍 上一篇我们已经介绍了Redis的主从复制,传送门:<Redis高可用之主从复制实践(四)>,想必大家对redis已经有一个概念了,那么问题来了,如果redis主从复制的master服务器挂掉了,那么整体redis就崩溃了,因为master无法进行写数据,导致slave中无法更新数据. 那么为了解决这个问题我们就需要有一种方案让redis宕机后可以自动进行故障转移,还好redis给我们提供一种高可用解决方案 Redis-Sentinel.Redis-sentinel本身也是一个独立运行

Redis哨兵模式集群部署

上次搭测试环境的时候写了一个redis哨兵模式搭建的博客,不幸的是我的博客网站挂掉了,这次搭生产环境再将redis哨兵模式集群模式搭建记录一次.(博客园不会丢掉我的数据吧..) 本次部署包含三个节点,一个主节点,两个从节点,从节点上面有两个哨兵(sentinel). 一.将需要安装redis压缩包上传到其中一台服务器的/usr/local目录下. cd /usr/local //进入文件夹tar -xvf redis-5.0.4.tar.gz //解压cd redis-5.0.4 //进入目录m

Redis 复制、Sentinel的搭建和原理说明(转)

Redis 复制.Sentinel的搭建和原理说明 转自:http://www.cnblogs.com/zhoujinyi/p/5570024.html. 背景: Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master

Redis 哨兵模式与Redis集群

第1章 Redis哨兵模式: 1.1 sentinel的功能: 1.      监控,sentinel会不断的检查你的主服务器和从服务器是否运行正常 2.      提醒.当被监控的某个redis服务器出现问题时,sentinel可以通过API向管理员或者其他应用程序发送通知 3.      自动故障迁移 1.2 服务器连接: 1.2.1 sentinel通过用户配置的配置文件来发现主服务器 sentinel会与被监视的主服务器创建两个网络连接: 1.      命令连接用于向主服务器发送命令

Spring 集成Redis哨兵模式

Spring 集成Redis哨兵模式 1.pom文件添加以下jar <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.RELEASE</version> </dependency> <!-- redis客户端jar -->

Redis哨兵模式的配置

绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其他两台为slave. 1.在Master上配置redis.conf文件 配置文件内容如下: protected-mode no (关闭保护模式) port 6379 daemonize yes (设置redis在后台启动) pidfile /var/run/redis_6379.pid logfil

Springboot2.x集成Redis哨兵模式

Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar <!-- 集成Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</arti

redis sentinel哨兵模式集群搭建教程

1.环境说明 我们将使用192.168.220.128.192.168.220.129.192.168.220.130三台机器搭建sentinel集群 当前我们已在192.168.220.128上按redis安装教程安装了redis,192.168.220.129和192.168.220.130两台上没有安装 2.配置并启动192.168.220.128上的sentinel 2.1修改conf/redis.conf,配置masterauth字段值 2.2修改conf/sentinel.conf,