Redis-Sentinel redis的哨兵模式

Redis Sentinel 模式简介

Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis集群可通讯的机器中监控redis集群。

它的主要功能有一下几点

1、不时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
4、哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。

哨兵(sentinel)本身也是支持集群的

很显然,单个哨兵会存在自己挂掉而无法监控整个集群的问题,所以哨兵也是支持集群的,我们通常用三台哨兵机器来监控一组redis集群。

快速开始!

环境准备:
centos7服务器3台,6也可以,没什么区别。
我部署好了三台
redis-1
redis-2
redis-3
清空selinux与iptables

 编译安装redis

yum install gcc* tcl -y
mkdir /opt/soft
cd /opt/soft
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar xf redis-3.2..tar.gz
cd redis-3.2.
make
mkdir conf
mkdir bin
cp utils/redis_init_script bin/redis
cp redis.conf conf/.conf
cd ..
mv redis-3.2. /opt/redis
cd /opt/redis/bin
sed -i s#CLIEXEC=\/usr\/local\/bin\/redis-cli#CLIEXEC=\/opt\/redis\/src\/redis-cli#g redis
sed -i s#EXEC=\/usr\/local\/bin\/redis-server#EXEC=\/opt\/redis\/src\/redis-server#g redis
sed -i s#CONF=\"\/etc\/redis#CONF=\"\/opt\/redis\/conf#g redis
cd /opt/redis/conf
sed -i s#daemonize\ no#daemonize\ yes#g .conf

安装完毕后,修改配置文件。

vim /opt/redis/conf/6379.conf
注释此条
bind 127.0.0.1
protected-mode yes 改为 protected-mode no #关闭安全模式
至此,redis部署完毕。

redis的启动停止脚本在
/opt/redis/bin/redis stop/start
redis的配置文件在
/opt/redis/conf/6379.conf
redis的登陆命令在
/opt/redis/src/redis-cli

redis配置主从

启动两台redis
redis-1 10.0.0.10
redis-2 10.0.0.20

若redis-1为主的话,在redis-2的配置文件中配置
slaveof 10.0.0.10 6379
修改完毕后重启redis即可,重启后我们可通过登陆进入redis后info查看主从信息。

引入哨兵。

redis-1与redis-2搭建完毕主从后,我们开始引入哨兵。
哨兵是一个单独的程序,所以我们需要单独部署它。
若是在其他机器上部署哨兵,那么请用上面的redis安装脚本重新安装一遍redis。
在这里我已经部署完毕了
redis-1
redis-2
redis-3

增加哨兵的配置文件。三台redis都需要增加,文件内容这三台一样。

vim /opt/redis/conf/sentinel.conf
##sentinel for 10.0.0.10 ,its slave is 10.0.0.20
#master1
port
sentinel monitor master1 10.0.0.10
sentinel down-after-milliseconds master1
sentinel failover-timeout master1
sentinel parallel-syncs master1 1
#sentinel auth-pass mymaster 123456  #如果你的redis集群有密码

配置文件的含义请自行百度。

启动哨兵
三台机器都是一个操作方式。

添加窗口
screen -S sentinel

在新窗口启动哨兵
/opt/redis/src/redis-sentinel /opt/redis/conf/sentinel.conf --protected-mode no
启动后即可看到前台输出信息。

后台挂起这个窗口请按:
Ctrl+a+d

下次返回观看这个窗口请输入
screen -r sentinel

我们这里暂时不挂起窗口,可以观察哨兵监控集群的状态。

我们接下来我们进行切换以及增加新的salve节点测试。
关掉redis-1并查看哨兵监控的状态,约30秒内,哨兵探测redis-1客观故障后,即会重新选举新的master,重新选举完毕后我们在redis-2中info查看主从状态,会发现redis-2已经被选举为master。
重新启动redis-1,并不需要修改配置文件,启动后redis-1自动会与redis-2进行同步。

修改redis-3的配置文件,把slaveof指向到redis-2,启动后你会发现哨兵会把redis-3自动添加到集群中。

谢土豪

如果有帮到你的话,请赞赏我吧!

Redis哨兵模式的更多相关文章

  1. Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步

    Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.

  2. Redis哨兵模式大key优化

    目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中.        涉及到的key如下: 0,hash,duser_record, ...

  3. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

  4. Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存

    本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...

  5. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...

  6. Redis 哨兵模式(Sentinel)

    上一篇我们介绍了 redis 主从节点之间的数据同步复制技术,通过一次全量复制和不间断的命令传播,可以达到主从节点数据同步备份的效果,一旦主节点宕机,我们可以选择一个工作正常的 slave 成为新的主 ...

  7. 搭建redis哨兵模式

    搭建redis哨兵模式,一主两从三哨兵   1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...

  8. Redis哨兵模式的配置

    绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...

  9. Redis 哨兵模式实现主从故障互切换

    200 ? "200px" : this.width)!important;} --> 介绍 Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 S ...

随机推荐

  1. Java基础知识强化29:String类之String类构造方法

    1. 常用String构造方法使用: package cn.itcast_01; /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A: ...

  2. hdu 2156

    #include <iostream> #include <stdio.h> using namespace std; int main() { int i,n; while( ...

  3. nyoj 214

    //nyoj 214 这个题目和字符串的问题类似,都是给出一组数据,寻找最长的单调递增字符 这一题一开始我用dp做,发现超时,看了下时间,n*n的复杂度,换过一种思路 用类似于栈的方式,来存储每次更新 ...

  4. boostrap按钮

    bootstrap按钮 对应链接:http://v3.bootcss.com/css/#buttons 使用时添加基础类class:btn 默认样式class=btn-default,控制大小clas ...

  5. spring aop切面配置

    <bean id="aopLog" class="sardine.commodity.biz.AopLog"/>    <aop:config ...

  6. maven项目java包名的路径问题

    maven项目中错误: 找不到或无法加载主类

  7. Struts2 框架验证

    struts2框架验证(xml方式):    * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法        * 创建一个xml格式验证文 ...

  8. 关于laravel框架的Auth::attempt验证失败

    按照官方文档进行认证 发现不管怎么样都是失败 if (Auth::attempt(array('email' => $email, 'password' => $password), tr ...

  9. zabbix log(logrt) key的使用

    今天看了篇帖子是关于如何利用zabbix 自带的key去读log,监控linux异常登陆,一直以来都是自己写脚本去读log的.就想看看这个zabbix log 这个key怎么样..好吧开始: 官方文档 ...

  10. 流Stream个人学习理解

    1.Stream类 命名空间:System.IO 程序集:mscorlib 流是对字节序列的抽象,提供字节序列的一般视图. 流的操作包括三个方面: 1.读取(Read):将流数据传入到数据结构 2.写 ...