[喵咪Redis]Redis-Sentinel

[喵咪Redis]Redis-Sentinel

前言

redis-Sentinel 是我们这次来一同学习 redis 的重点,在我们现在的系统已经离不开 redis 的时候 , redis 挂掉了或者是一些其他问题都是致命的 , 那么怎么做到 redis 的高可用呢 , 官方有提供一个管理 redis 集群自动容灾的一个应用 Redis-Sentinel .那么我们就来一同搭建一个 redis 高可用的 redis 集群.

附上:

喵了个咪的博客:w-blog.cn

Redis官网:http://redis.io/

Redis Sentinel文档:http://redis.io/topics/sentinel

1. 了解Sentinel

Sentinel可以用于管理多个Redis服务,并且会执行三个任务:

  1. 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  2. 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  3. 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 Redis Sentinel 。

2. 准备工作

我们准备2台 Liunx 服务器内网 IP 分别为 192.168.0.20 和 192.168.0.21

然在两台服务器上面各配置好两个 redis 实例为:

  1. 192.168.0.20:6379
  2. 192.168.0.20:6380
  3. 192.168.0.21:6381
  4. 192.168.0.21:6382

然后我们配置好主从关系把192.168.0.20:6379作为主redis其余作为从Redis

在我们redis编译完成的目录中src目录下有一个 redis-sentinel 的程序,我们把他 cp 到 /usr/local/bin/ 下面就可以直接使用 redis-sentinel 命令了

3. 配置Sentinel

我们分别在2台服务器上创建4个 Sentinel 实例我们先配置 192.168.0.20 这台服务器

cd /etc/redis/

vim sentinel_6379.config

port 26379
sentinel monitor master1 192.168.0.20 6379 2
sentinel down-after-milliseconds master1 60000
sentinel failover-timeout master1 180000
sentinel parallel-syncs master1 1
sentinel auth-pass master1 testpassword
  1. 第一行 监听的端口号
  2. 第二行 配置指示 Sentinel 去监视一个名为 mymaster的主服务器,这个主服务器的IP地址为 192.168.0.20,端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
  3. 第三行 down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
  4. 第四行 failover-timeout 设置故障恢复时间 , 也就是当故障了切换了主了之后多久去检测原来的主服务器是否可以用并且进行处理的毫秒数
  5. 第五行 parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
  6. 第六行 配置连接主库的密码,如果主库有密码没有设置此项则会无法联通

然后以同样的配置配置好端口为 192.168.0.20:26380 , 192.168.0.21:26381 和 192.168.0.21:26382

然后我们使用 redis-sentinel 分表在2台服务器上面

redis-sentinel sentinel_6379.config
redis-sentinel sentinel_6380.config
redis-sentinel sentinel_6381.config
redis-sentinel sentinel_6382.config

我们观察终端的语句会出现如下输出

+slave <instance details> :一个新的从服务器已经被 Sentinel 识别并关联。
+sentinel <instance details> :一个监视给定主服务器的新 Sentinel 已经被识别并添加。

看到2个子实例都绑定上了 , 4个 sentinel 也都显示了这个时候就证明已经配置好了 redis-sentinel 然后我们在主服务上面执行如下语句

service redis_6379 stop

这个时候就可以看到在终端中在打印了一些转换的语句,我们在检查主从设置的时候就已经自动转意到了莫一个 redis 子实例上了,当我们重新把主运行起来之后,主实例会自动成为子实例

4. 总结

本节主要介绍了怎么配置一个 redis 集群,以及怎么把 redis-sentinel 跑起来来达到高可用容灾切换的问题,更多的操作可以参考 sentinel 官方文档来了解更多的关于 sentinel 的操作.

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

PhalApi官网QQ交流群:421032344 欢迎大家的加入!

时间: 2024-08-30 17:11:10

[喵咪Redis]Redis-Sentinel的相关文章

[喵咪Redis]Redis安装与介绍

[喵咪Redis]Redis安装与介绍 前言 哈喽大家好啊,这次要来和大家一起来了解学习Redis的一系列技术,最终目的是搭建一个高可用redis集群自动负载灾备,那我们先从最基础的Redis的一些基本介绍以及安装来说起! 附上: 喵了个咪的博客:w-blog.cn Redis官网:http://redis.io/ Redis命令大全:http://doc.redisfans.com/ Redsi源码地址:http://download.redis.io/releases/ GitHub地址:h

[喵咪Redis]Redis配置文件和主从设置

[喵咪Redis]Redis配置文件和主从设置 前言 上一节已经介绍了redis的基本使用也运行起来了redis,本节来进一步了解一下redis的配置,以及怎么配置主从关系,主从关系配置好了我们的redis就可以以一个集群的方式运行了.那么话不多说,就和笔者来进一步了解redis把! 附上: 喵了个咪的博客:w-blog.cn Redis官网:http://redis.io/ Redis命令大全:http://doc.redisfans.com/ Redsi源码地址:http://downloa

【Redis】Sentinel 高可用架构

一 前言    Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换.它的主要功能有: 1 不时地监控redis是否按照预期良好地运行; 2 如果发现某个redis节点运行出现状况,能够通知另外一

[喵咪MQ(1)]RabbitMQ简单介绍准备工作

[喵咪MQ(1)]RabbitMQ简单介绍准备工作 前言 哈喽大家好呀! 看标题就知道我们这次要讲MQ,之前博客中有提到的KafKa理论上来说也是一个优秀的MQ队列软件,比较知名的MQ有:Go语言编写的 nsq , 阿里云的RocketMQ , 大名鼎鼎的KafKa 以及 redis(也可以做队列),不过我们这次的主角是RabbitMQ. 附上: 喵了个咪的博客:w-blog.cn RabbitMQ官网 :http://www.rabbitmq.com/ 1.队列做什么?RabbitMQ是什么?

[喵咪KafKa(1)]KafKa的介绍以及使用场景

[喵咪KafKa(1)]KafKa的介绍以及使用场景 前言 哈喽!大家好呀,真是一坑未平一坑又起,otter还在继续更新的同时,笔者也为大家带来了关于kafka相关的一系列博客,要说到kafka就离不开现在特别火热的大数据技术,了解的童鞋可能只要一些大数据的带名词比如Hadoop,spark,storm,包括最近很火的微服务,kafka也是其中一员,但是不同的是kafka并不负责处理数据,要给kafka一个定义的话应该是一个分布式发布订阅消息系统可以说是一个数据通道保证数据稳定传输,要是感兴趣就

[喵咪Golang(1)]Go语言开篇

[喵咪Golang(1)]Go语言开篇 前言 哈喽大家好啊!喵咪我今天又来开坑了,最近学习和使用了go语言了一段时间,也在组合一些好的组件编写phalgo开发框架.在想是不是可以来写一个套关于go语言的文章和一些好的组件的介绍使用,虽然自己也是半桶水但是我相信在编写的过程中能给自己很多收获,最好也能帮助大家了解和熟悉golang这门语言,话不多说那么就开始今天的go语言之旅吧~ 附上: 喵了个咪的博客:w-blog.cn phalgo地址:github.com/wenzhenxi/phalgo

[喵咪Linux(2)]环境变量的坑

[喵咪Linux(2)]环境变量的坑 前言 玩过linux的童鞋对环境变量都不陌生,我们在安装好一些软件,组件之后想要直接使用它都需要加入环境变量,并且比如java啊golang都必须依赖你设置的环境变量来运行,在最近笔者在日常工作中遇到了一些关于环境变量的坎,所以今天把这些"坑"分享出来和大家交流! 附上: 喵了个咪的博客:w-blog.cn 1. 两场景 笔者有个习惯就是喜欢追问场景,比如别人问我一个问题,token要怎么用sign要怎么玩,我都会先问你是什么场景,什么场景才使用什

[喵咪Golang(2)]安装和Helloworld

[喵咪Golang(2)]安装和Helloworld 前言 哈喽大家好啊!今天我们紧接着来学习关于Go语言的安装和使用Go打印出helloworld,本节内容将会讲解关于Go语言在Liunx下怎么安装,环境变量怎么配置分别起到了什么作用,然后我们把go运行起来并且打印出helloworld,那么就开始今天的Go语言之旅吧! 附上: 喵了个咪的博客:w-blog.cn phalgo地址:github.com/wenzhenxi/phalgo Go语言圣经:docs.ruanjiadeng.com/

[喵咪MQ(3)]RabbitMQ集群安装配置

[喵咪MQ(3)]RabbitMQ集群安装配置 w-blog博客 在各项生产环境使用中,容灾总是一个很重要的话题,如果单点故障会导致整个系统奔溃或者是丢失数据是不是好气好气的,领导会追着你问这是怎么了?你只能说是我们没有经验什么什么组件故障了,这个是低级玩法,高级玩法是配置好集群容灾,告诉老板死一两台机器宕机了没有事没有影响,所以我们今天就来讲讲RabbitMQ的集群模式... 附上: 喵了个咪的博客:w-blog.cn RabbitMQ官网 :http://www.rabbitmq.com/