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 ...
随机推荐
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理8
接下来做的是对页面的增删改查与页面与页面按钮之间的联系.先上代码和页面效果 using AuthorDesign.Web.App_Start.Common; using System; using S ...
- 理解 Keystone 核心概念 - 每天5分钟玩转 OpenStack(18)
作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: 管理用户及其权限 维护 OpenStack Services 的 Endpoint Authentication(认证) ...
- 在CentOS安装PHP5.6
简单介绍一下,如何在CentOS上安装PHP5.6. 配置yum源 追加CentOS 6.5的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux ...
- linux下使用denyhosts防止ssh暴力破解
1.DenyHosts介绍 DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.de ...
- HDU 4622 Reincarnation (查询一段字符串的不同子串个数,后缀自动机)
Reincarnation Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)
题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3. ...
- 三维网格补洞算法(Poisson Method)
下面介绍一种基于Poisson方程的三角网格补洞方法.该算法首先需要根据孔洞边界生成一个初始化补洞网格,然后通过法向估算和Poisson方程来修正补洞网格中三角面片的几何形状,使其能够适应并与周围的原 ...
- rpc框架之 thrift连接池实现
接前一篇rpc框架之HA/负载均衡构架设计 继续,写了一个简单的thrift 连接池: 先做点准备工作: package yjmyzz; public class ServerInfo { publi ...
- 基于SuperSocket的IIS主动推送消息给android客户端
在上一篇文章<基于mina框架的GPS设备与服务器之间的交互>中,提到之前一直使用superwebsocket框架做为IIS和APP通信的媒介,经常出现无法通信的问题,必须一天几次的手动回 ...
- 软件工程(FZU2015)赛季得分榜,第9回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...