Redis主-从部署实践
0. 前言
这篇文章简要介绍Redis的主从部署,实现了一主二从,使用两个哨兵监控,以实现简单的HA,其中从库作为备机。
1. 部署
这里有三台服务器,其中239主机上的Redis作为主库,其余两个作为从库。这里涉及到了认证,所以当这里在主库和从库都使用了requirepass和masterauth,因为当主库宕机后,哨兵将其中一个从库提升为主库的时候会要求认证,这里简单起见,配置文件使用了同一配置和密码。
239主库涉及的配置:
requirepass messagequeue
masterauth messagequeue
从库涉及相关配置:
slaveof 172.16.17.239 masterauth messagequeue
requirepass messagequeue
两个哨兵的配置:
sentinel monitor gateway 172.16.17.239
sentinel auth-pass gateway messagequeue
下图为最终的部署图。

最后部署完后可以通过redis-cli连接哨兵查看。
如下图所示:可以看到主库的ip和端口,从机数量以及哨兵的数量

2. 哨兵的详细配置说明:
#端口号
port # dir <working-directory>
dir /tmp # 监控主数据库
sentinel monitor gateway 172.16.17.239 #认证密码
sentinel auth-pass gateway messagequeue #发送PING间隔,大于1秒则按1秒间隔,小于1秒则按配置的时间间隔
sentinel down-after-milliseconds gateway # 当进行灾备时同时进行重新配置从机的个数
# 当从机用于查询时,用来保证灾备时一定量的从机可以继续服务。
sentinel parallel-syncs gateway # .自上次尝试灾备后,再次进行灾备的时间
# .从机根据哨兵,从一个错误的主机强制去复制一个正确主机的所需时间,即灾备超时时间。
# .取消灾备的时间,即SLAVEOF NO ONE发送到从机,而从机没有应答,超时。
# .所有从机配置指向主机的最大时间(灾备总时间)
# 3分钟
sentinel failover-timeout gateway # 脚本最大运行时间为60秒,当脚本终止码为1时则表示失败重新再次执行(默认最多10次),为2时表成功
# 通知脚本,用以通知管理员(通过SMS,Email等)
# 该脚本传入两个参数,第一个是事件类型,第二个是事件描述
# sentinel notification-script mymaster /var/redis/notify.sh # 客户端重新配置脚本(脚本应该为可重入)
# 用于主库变更时执行一些特定任务,如通知客户端主库变更。
# sentinel client-reconfig-script <master-name> <script-path>
# 下面参数会传递给脚本
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
#
# <state> 永远为 "failover"
# <role> 是"leader" 或者 "observer"
# from-ip/from-port为旧数据库地址
# to-ip/to-port 为变更后主库地址
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
3. 哨兵应用
哨兵提供了一些方法,以供在灾备切换主库后查询主库的信息。
1. 如上配置文件,可以使用脚本方式来通知。
2. 可以通过连接哨兵使用 SENTINEL master <master_name>来查询(其中master_name为上述哨兵配置文件sentinel monitor后面的gateway)。
如下局部代码(采用hiredis库,连接后要使用AUTH命令认证方可操作):
const char *pCommand = "SENTINEL master %s";
redisReply *pReply = (redisReply*)redisCommand(pRedisContext->pContext, pCommand, pMasterName); if (NULL != pReply)
{
if (REDIS_REPLY_ARRAY == pReply->type && pReply->elements >= )
{
nMasterIpLen = REDIS_MIN(, pReply->element[]->len);
memcpy(pMasterIP, pReply->element[]->str, nMasterIpLen);
pMasterIP[nMasterIpLen] = '\0';
*pMasterPort = atoi(pReply->element[]->str);
nRet = REDIS_SUCCESS;
}
freeReplyObject(pReply);
}
4. 总结
如上图所示的部署主要用于公司一个项目,实现在简单的消息队列,这里不采用其他开源消息队列(如activemq,zeromq,rabbitmq等)有一些其他的因素在。
Redis主-从部署实践的更多相关文章
- 部署Redis主-从
Redis主-从部署实践 0. 前言 这篇文章简要介绍Redis的主从部署,实现了一主二从,使用两个哨兵监控,以实现简单的HA,其中从库作为备机. 1. 部署 这里有三台服务器,其中239主机上的Re ...
- 阿里云ECS部署Redis主备哨兵集群遇到的问题
一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...
- Redis容灾部署(哨兵Sentinel)
Redis容灾部署(哨兵Sentinel) 哨兵的作用 1. 监控:监控主从是否正常2. 通知:出现问题时,可以通知相关人员3. 故障迁移:自动主从切换4. 统一的配置管理:连接者询问sentinel ...
- Redis服务快速部署
官方对Redis的阐述: Redisis an open source, BSD licensed, advanced key-value cache and store. It is often r ...
- 基于nginx+lua+redis高性能api应用实践
基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- winserver的consul部署实践与.net core客户端使用(附demo源码)
winserver的consul部署实践与.net core客户端使用(附demo源码) 前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的 ...
- 转 -Filebeat + Redis 管理 LOG日志实践
Filebeat + Redis 管理 LOG日志实践 小赵营 关注 2019.01.06 17:52* 字数 1648 阅读 24评论 0喜欢 2 引用 转载 请注明出处 某早上,领导怒吼声远远传来 ...
- Redis介绍及部署在CentOS7上(一)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
随机推荐
- 算法: 斐波那契数列C/C++实现
斐波那契数列: 1,1,2,3,5,8,13,21,34,.... //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...
- 安装Ubuntu的那些事儿(续)
由于我的第一篇Blog并没有给出完全解决进Ubuntu系统时显卡所造成的问题,至于那个装显卡驱动的方法本人也没有去做,感兴趣的朋友可以在网上教程试一试. 至于我的那个在高系选项中进行配置也不是好的方法 ...
- jni调试3(线程调试env变量问题)
jni层调试线程死机原因 一,导致死机原因: jni层中 线程函数中 只要添加调用env 的函数 ,,就会死机 二,解决方法 第一我们应该理解: ①(独立性) JNIEnv 是一个与线 ...
- 从微软下载安装Windows10
如果你需要安装或重新安装 Windows 10,可以通过此页面上的工具,使用 U 盘或 DVD 创建你自己的安装介质. 开始之前 确保你具有以下内容: Internet 连接(可能产生 Interne ...
- JSP连接MySQL数据库问题
之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...
- (转)String、StringBuffer与StringBuilder之间区别
原文地址: http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺 ...
- NYOJ---540奇怪的排序
奇怪的排序 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情.惟独对自然数的理解与人类不一 ...
- Bootstrap CSS 栅格、代码和表格
一.bootstrap栅格 Bootstrap 提供了一套响应式.移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. Bootstrap 网格系统(G ...
- Java 线程同步
线程同步 1.线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏. 2.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的 ...
- Spring 事务
实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...