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主-从部署实践的更多相关文章

  1. 部署Redis主-从

    Redis主-从部署实践 0. 前言 这篇文章简要介绍Redis的主从部署,实现了一主二从,使用两个哨兵监控,以实现简单的HA,其中从库作为备机. 1. 部署 这里有三台服务器,其中239主机上的Re ...

  2. 阿里云ECS部署Redis主备哨兵集群遇到的问题

    一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...

  3. Redis容灾部署(哨兵Sentinel)

    Redis容灾部署(哨兵Sentinel) 哨兵的作用 1. 监控:监控主从是否正常2. 通知:出现问题时,可以通知相关人员3. 故障迁移:自动主从切换4. 统一的配置管理:连接者询问sentinel ...

  4. Redis服务快速部署

    官方对Redis的阐述: Redisis an open source, BSD licensed, advanced key-value cache and store. It is often r ...

  5. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  6. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  7. winserver的consul部署实践与.net core客户端使用(附demo源码)

    winserver的consul部署实践与.net core客户端使用(附demo源码)   前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的 ...

  8. 转 -Filebeat + Redis 管理 LOG日志实践

    Filebeat + Redis 管理 LOG日志实践 小赵营 关注 2019.01.06 17:52* 字数 1648 阅读 24评论 0喜欢 2 引用 转载 请注明出处 某早上,领导怒吼声远远传来 ...

  9. Redis介绍及部署在CentOS7上(一)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

随机推荐

  1. Ajax的笔记

    Ajax指异步JavaScript及XML(Asynchronous JavaScipt And XML),是一种异步交互式网页开发技术,用于创建快速动态网页.与服务器进行少量数据交换中,Ajax可以 ...

  2. RHEL7.2和RHEL6.5的配置网络yum源和本地yum源

    RHEL7.2配置本地yum源 [root@localhost ~]#monut /dev/sr0 /mnt      #挂载光盘 [root@localhost ~]# rm -rf /etc/yu ...

  3. Android资源(图片)命名规范

    (转自:http://www.jb51.net/article/38796.htm) 图片命名注意: 1,不能以下划线("_")开头: 2,以数字加下划线("[0-9]_ ...

  4. 利用varnish做Discuz论坛的缓存服务器

    实验背景:公司有一台BBS服务器,用的是LNMP的架构搭建的.正好手头有一台空闲的虚拟机,于是想着给BBS前端加一台缓存服务器.于是选定了varnish,搜了很多教程,跌跌撞撞的完成了配置.这其中很多 ...

  5. Ubuntu开发笔记

    这些操作在ubuntu14.04.1或者ubuntu12.04.5中进行 首先,安装ubuntu12.04(LTS)版本 安装按照高级安装方式,系统分配40G如下: /dev/sda*   ext4 ...

  6. Linux服务器磁盘扩展和oracle表空间文件迁移操作记录

    1.环境介绍 服务器硬件:Dell R710 服务器OS:红帽子Linux   RHEL4.8 数据库:Oracle 10g 2.出现的问题 因为数据表每天有上百万的数据写入表,加上建立索引,导致表空 ...

  7. 【2016-11-15】【坚持学习】【Day26】【WPF 命令绑定到事件】

    今天同事跟我说了已经有用的东西. System.Windows.Interativity 这个命名空间可以让我在界面上将命令绑定到对应的事件上.解决了我一直的疑问,只有点击事件可以绑定??现在有答案了 ...

  8. java 链表数据结构

    首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了.下面直接进入正题: 先要定义一个结点类 ...

  9. Java程序设计之扑克牌

    这段代码的主要实现功能扑克牌的洗牌和发牌功能,一副牌,红桃,黑桃,梅花,方片,A~K,不含大小王. 构造一个class. 首先是声明花色: private String[] sign={"方 ...

  10. 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但

    片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但片元着色器是一个更合适的名字, 因为此时的片元并不是一个真正意义上的像素.