抱歉,你查看的文章不存在

高可用之redis主从failover

redis在2.4+即提供了Sentinel模式。(不过还是2.8+ || 3.0+ 稳定些)

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

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

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

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

现给出redis哨兵模式最小集配置

1台master 1台slave 以及2台Sentinel

##redis.conf##redis-0,默认为master
port 6380
##暂且禁用指令重命名
##rename-command
##开启AOF,禁用snapshot
appendonly yes
slave-read-only yes
##redis.conf##redis-0,默认为master
port 6379
##暂且禁用指令重命名
##rename-command
##开启AOF,禁用snapshot
appendonly yes
slave-read-only yes
slaveof 127.0.0.1 6380
port 26379sentinel monitor mymaster 127.0.0.1 6379 1
sentinel failover-timeout mymaster 150000
port 26380sentinel monitor mymaster 127.0.0.1 6379 1
sentinel failover-timeout mymaster 150000

需要确保所有配置文件均可读写,哨兵模式需要rewrite对应的配置文件。

配置文件应当除了端口号其余均保持一致。

在启动哨兵模式之前需要先启动master(防止出现sentinel找不到master)

执行命令

redis-server  redis.conf
redis-server  redis_slave.conf
redis-sentinel  sentinel.conf
redis-sentinel  sentinel_2.conf

此时master的端口为6380

执行命令

redis-cli -p 6380 DEBUG sleep 300

可以使得master fail.此时需要哨兵将会自动切换slave为master

可以看到此时6379已经被提升为master

而哨兵也会重写配置文件持久化配置。

使用jedis做哨兵配置也比较简单

Set<String> sentinels = new HashSet<String>();sentinels.add("127.0.0.1:26379");
sentinels.add("127.0.0.1:26380");       
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster",
      sentinels);
 Jedis jedis = sentinelPool.getResource();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

后端之路

0 篇文章0 人订阅

相关文章

来自专栏编程坑太多

【zookeeper】简单安装

1113
来自专栏Pythonista

redis主从同步

原理: 1. 从服务器向主服务器发送 SYNC 命令。 2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接...

1882
来自专栏三杯水

Redis3.2.9/4.0.1集群部署配置优化

http://www.redis.cn/topics/cluster-spec.html

3402
来自专栏小李刀刀的专栏

[译]Laravel 5.0 之自定义错误页面

本文译自 Matt Stauffer 的系列文章. ---- 在以往版本的 Laravel 中,假如你想自定义错误页面——比如当用户访问不存在的页面时显示一张猫...

3805
来自专栏cnblogs

半小时入门Thrift

      当一个单体软件产品体量达到一定程序,都会想到拆分为不同的模块(当今这么流行微服务)。拆分后一定会存在进程之间的交互(简称:PRC),那么thrift...

1397
来自专栏喵了个咪的博客空间

[喵咪Redis]Redis-Sentinel

[喵咪Redis]Redis-Sentinel ? 前言 redis-Sentinel 是我们这次来一同学习 redis 的重点,在我们现在的系统已经离不开 r...

3244
来自专栏Jaycekon

深入浅出Redis-redis哨兵集群

1、Sentinel 哨兵 ----     Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentine...

48213
来自专栏ytkah

Laravel展示产品-CRUD之show

  上一篇讲了Laravel创建产品-CRUD之Create and Store,现在我们来做产品展示模块,用到是show,①首先我们先修改controller...

813
来自专栏微服务

RabbitMQ入门HelloWorld(C#)(翻译)

介绍 先决条件 本教程假定RabbitMQ已安装并在标准端口(5672)上的本地主机上运行。如果您使用不同的主机,端口或凭据,连接设置将需要调整。 在哪里得到帮...

2779
来自专栏扎心了老铁

记录一次因为硬盘写满造成的redis无法连接

缘起: 今天早晨收到报警,服务不干活了,赶紧起来看问题。。。 为了尽快让服务可用,尝试重启服务,发现服务起不来,报错 redis connection fail...

3798

扫码关注云+社区

领取腾讯云代金券