`

Redis实践:使用Pub/Sub实现对服务器群的管理监控

阅读更多

一,背景描述

       某个系统提供并发百万级的用户实时在线业务,部署了几十台接入服务器,十几台业务处理服务器。

       由于历史原因,都是手动配置这些服务器,除了能够监控到这些服务器的网络,带宽,磁盘,内存

等硬件设备信息外,对于每个服务器应用程序的内部状态信息,程序的统计信息无法采集,导致只能通过

外围的一些信息去判断评估问题所在,不准确,耗时耗力,很痛苦。

        为了准确监控每个服务器的内部状态,而且也不影响现有业务逻辑的情况,需要快速部署一个简单的

服务器集中监控系统。经过考虑,可以使用Redis的Pub/Sub功能来实现一个监控系统是非常好合适的。

 

二,解决方案

1,关于Redis的Pub/Sub机制

      Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值

进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能

可以用作实时消息系统。

 

2,系统结构

 

 

 

3,主要流程

3.1 应用服务器的初始化

  •    所有应用服务器作为Redis的Client连接到Redis服务器,保持长连接。
  •    每个应用服务器都会配置一个全局唯一的ServerID,每个应用服务器都会发布两个Channel,一个是状态的channel,名称为ServerID_State,另外一个是统计信息的  Channel,名称为ServerID_Statistic。
  •    每个应用服务器也同时订阅一个属于自己的管理Channel,名字为ServerID_Manage,用于接收来自监控服务器的管理消息。
  • 相应的Redis协议消息举例如下:
[plain] view plaincopy
  1. PUBLISH AppSvr1_State   "Server[AppSvr1] Keep-Alive"  
  2. PUBLISH AppSvr1_Statistic  "Online Server[AppSvr1] user total[10000], Calling user total[100]"  
  3.   
  4. SUBSCRIBE AppSvr1_Manage  

 

3.2 监控服务器的初始化

  • 监控服务器会订阅所有应用服务器的Channel,接收这些服务器的所有状态信息和统计信息,并且也可以通过ServerID_Manage
  • 监控服务器的Redis协议消息举例如下:
[plain] view plaincopy
  1. PSUBSCRIBE AppSvr*_State  
  2. PSUBSCRIBE AppSvr*_Statistic  

 

3.3 监控服务器收到的状态和统计消息举例如下:

[plain] view plaincopy
  1. MESSAGE  "Server[AppSvr1] Keep-Alive"  
  2. MESSAGE   "Online Server[AppSvr1] user total[10000], Calling user total[100]"  


3.4 监控服务器可以向各应用服务器发布管理指令,比如重启,重新reload配置文件等等。

  • 监控服务器向AppSvr1发出服务器重启命令
[plain] view plaincopy
  1. PUBLISH AppSvr1_Manage  “command=restart”  
  • 应用服务器收到后,执行重启过程,并向监控服务器报告自己的最新状态
[plain] view plaincopy
  1. PUBLISH AppSvr1_State  Server[AppSvr1] stop  
  • 应用服务器重启完毕后,会向监控服务器发布新状态
[html] view plaincopy
  1. PUBLISH AppSvr1_State   Server[AppSvr1] startup  
  • 监控服务器先后收到的消息如下:
[plain] view plaincopy
  1. MESSAGE  Server[AppSvr1] stop  
  2. MESSAGE  Server[AppSvr1] startup  
[plain] view plaincopy
  1. MESSAGE  Server[AppSvr1] Keep-Alive  

        
3.5 通过WEB实时获取指定应用服务器的内部统计信息流程

  •  收到WEB请求后通过phpredis发送如下消息
[plain] view plaincopy
  1. PUBLISH  AppSvr1_Manage  command=get_user_online_stat  
  • 应用服务器收到该消息后,向phpredis的客户端发布对应的统计信息 
[plain] view plaincopy
  1. PUBLISH AppSvr1_Statistic Server[AppSvr1] online user total[10000]  


 

三,方案总结

       该方案不但实现了监控服务器对各应用服务器的状态监控和统计数据采集,而且通过双向订阅通道,也实现了向各应用服务器发起简单的管理维护命令。

基于该方案还可以深入开发更丰富的功能。 

 

http://blog.csdn.net/liguohui/article/details/7706815

分享到:
评论

相关推荐

    Redis编程实践【pub/sub】

    NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/1867454

    dtalk(Device Talk)基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)

    dtalk就是为了实现上述的目标而开发的一个Redis发布订阅(pub/sub)系统实现的前端设备控制框架,在dtalk框架上,Redis服务器用于提供中转服务。前端设备通过订阅特定的频道接收管理发送的请求消息,执行对应的功能。...

    【原创】C#通过StackExchange使用Redis的PUB/SUB功能

    完整的代码,使用vs2015创建。通过一个64位StackExchange.Redis.dll(开源,1.2.6版),创建客户端,管理和使用Redis的PUB/SUB功能,适合集成进项目使用。 (需正常配置Redis客户端后才可使用)

    redis-spring-pub_sub

    redis-spring-pub_sub

    redis-desktop-manager

    跨平台的开源Redis DB管理工具 源文件地址:https://redisdesktop.com/

    redis设计与实现学习笔记,转自github:https://github.com/JiangRRRen/Redis-stud

    redis设计与实现学习笔记,转自github:https://github.com/JiangRRRen/Redis-stud

    安装部署-Linux上安装Redis教程

    【安装部署】-Linux上安装Redis教程 本篇是基于CentOS7,安装Redis版本为redis-6.2.6。 一、下载并解压Redis 1、执行下面的命令下载redis: wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压...

    SpringMVC-Mybatis-Shiro-redis-0.2-master

    基于SpringMVC Mybatis Shiro Redis 的权限管理系统,该系统已经部署到线上,线上访问地址:http://shiro.itboy.net,登录账号:admin 密码:sojson,,详细教程参考sojson.com/shiro

    node.js+redis实现消息队列

    程序在nodemq文件夹下 1 默认队列 ... 2 自定义队列 ... 获取队列内容: ...http://127.0.0.1:8000/getList queueName">一个...在安装好redis和nodejs后 配置config js 执行: $ node index js 启动服务 入队: 1 默认队列

    CentOS8镜像(数据库):mysql5.7.38 redis-7.0.0 mongodb5.0.8

    预安装了数据库:mysql5.7.38 redis-7.0.0 mongodb5.0.8 .../usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

    漂亮的Go语言通用后台管理系源码.zip

    漂亮的Go语言通用后台管理系统,包含:计划任务 / MySQL管理 / Redis管理 / FTP管理 / SSH管理 / 服务器管理 / Caddy配置 / DDNS / FRP可视化配置 / 云存储管理 等功能。可运行于 Windows / Linux / MacOS 等主流...

    Redis命令参考手册完整版

    redis-pub/sub断电就清空,而使用redis-list作为消息推送虽然有持久化,但是又太弱智,也并非完全可靠… 作者:韦易笑 链接:https://www.zhihu.com/question/43557507/answer/109727780 来源:知乎 著作权归作者...

    Redis-5.0.0集群配置

    本文档基于以前写的《Redis-3.0.5集群配置》和《Redis-4.0.11集群配置》。  redis-3.0.0开始支持集群,redis-4.0.0开始支持module,redis-5.0.0开始支持类似于kafka那样的消息队列。  本文参考官方文档而成:...

    Sping Boot+Vue实现的前后端分离的管理系统

    Sping Boot+Vue实现的前后端分离的管理系统,由微人事系统再开发而来。 通过leaflet+GIS实现3D地图的预览,包含人员管理 包含前后端代码以及数据库导入脚本,需要电脑上预置redis和RabbitMQ redis教程:...

    linux搭建redis服务器

    在服务器上,你每次重启机器后再去启动redis的服务,这是很麻烦的,所以将Redis作为 Linux 服务随机启动是很有必要的。 修改/etc/rc.local文件 root@ubuntu:/usr/local/redis-2.4.14# vim /etc/rc.local 在最后加入...

    Redis.5.0.8 windows 版本,免安装启动 redis

    使用 Cygwin 编译 redis 5.0.8,解决windows 没有高版的 redis. redis 官网:https://redis.io/ Cygwin 官网:https://cygwin.com/ 编译参考:https://www.cnblogs.com/LUA123/p/11447163.html 编译异常解决参照:...

    redis图形化桌面客户端.zip

    大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:https://redis.io/

    windows下 64位系统 redis的安装(附教程)

    之前用的redis总是时好时坏,遇到大量写入数据的情况,就会发生运行失灵的去情况,必须重启才行,所以重新上传这个资源 教程地址: https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80448995 有问题可以在...

    Redis集群管理工具Redis::Sentinel.zip

    Redis-sentinel是Redis的作者antirez完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需要(详情),花了几个星期写...

    cpp_redis:C ++ 11轻量级Redis客户端:异步,线程安全,无依赖项,流水线,多平台-不再维护-请检查https:github.comcpp-rediscpp_redis

    它没有网络模块,因此您可以自由配置自己的模块,也可以使用默认模块( )例cpp_redis :: client cpp_redis::client client;client.connect();client.set( " hello " , " 42 " );client.get( " hello " , [](cpp_...

Global site tag (gtag.js) - Google Analytics