设为首页 收藏本站
查看: 1723|回复: 0

[经验分享] Redis实践:使用Pub/Sub实现对服务器群的管理监控

[复制链接]

尚未签到

发表于 2016-12-21 08:39:32 | 显示全部楼层 |阅读模式
一,背景描述
       某个系统提供并发百万级的用户实时在线业务,部署了几十台接入服务器,十几台业务处理服务器。
       由于历史原因,都是手动配置这些服务器,除了能够监控到这些服务器的网络,带宽,磁盘,内存
等硬件设备信息外,对于每个服务器应用程序的内部状态信息,程序的统计信息无法采集,导致只能通过
外围的一些信息去判断评估问题所在,不准确,耗时耗力,很痛苦。
        为了准确监控每个服务器的内部状态,而且也不影响现有业务逻辑的情况,需要快速部署一个简单的
服务器集中监控系统。经过考虑,可以使用Redis的Pub/Sub功能来实现一个监控系统是非常好合适的。
 
二,解决方案
1,关于Redis的Pub/Sub机制
      Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值
进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能
可以用作实时消息系统。
 
2,系统结构
  DSC0000.jpg
 
 
3,主要流程
3.1 应用服务器的初始化

  •    所有应用服务器作为Redis的Client连接到Redis服务器,保持长连接。
  •    每个应用服务器都会配置一个全局唯一的ServerID,每个应用服务器都会发布两个Channel,一个是状态的channel,名称为ServerID_State,另外一个是统计信息的  Channel,名称为ServerID_Statistic。
  •    每个应用服务器也同时订阅一个属于自己的管理Channel,名字为ServerID_Manage,用于接收来自监控服务器的管理消息。
  • 相应的Redis协议消息举例如下:
[plain] view plaincopy



  • PUBLISH AppSvr1_State   "Server[AppSvr1] Keep-Alive"  
  • PUBLISH AppSvr1_Statistic  "Online Server[AppSvr1] user total[10000], Calling user total[100]"  
  •   
  • SUBSCRIBE AppSvr1_Manage  

 
3.2 监控服务器的初始化

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



  • PSUBSCRIBE AppSvr*_State  
  • PSUBSCRIBE AppSvr*_Statistic  

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



  • MESSAGE  "Server[AppSvr1] Keep-Alive"  
  • MESSAGE   "Online Server[AppSvr1] user total[10000], Calling user total[100]"  


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

  • 监控服务器向AppSvr1发出服务器重启命令
[plain] view plaincopy



  • PUBLISH AppSvr1_Manage  “command=restart”  


  • 应用服务器收到后,执行重启过程,并向监控服务器报告自己的最新状态
[plain] view plaincopy



  • PUBLISH AppSvr1_State  Server[AppSvr1] stop  


  • 应用服务器重启完毕后,会向监控服务器发布新状态
[html] view plaincopy



  • PUBLISH AppSvr1_State   Server[AppSvr1] startup  


  • 监控服务器先后收到的消息如下:
[plain] view plaincopy



  • MESSAGE  Server[AppSvr1] stop  
  • MESSAGE  Server[AppSvr1] startup  

[plain] view plaincopy



  • MESSAGE  Server[AppSvr1] Keep-Alive  

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

  •  收到WEB请求后通过phpredis发送如下消息
[plain] view plaincopy



  • PUBLISH  AppSvr1_Manage  command=get_user_online_stat  


  • 应用服务器收到该消息后,向phpredis的客户端发布对应的统计信息 
[plain] view plaincopy



  • PUBLISH AppSvr1_Statistic Server[AppSvr1] online user total[10000]  


 
三,方案总结
       该方案不但实现了监控服务器对各应用服务器的状态监控和统计数据采集,而且通过双向订阅通道,也实现了向各应用服务器发起简单的管理维护命令。
基于该方案还可以深入开发更丰富的功能。 
 
http://blog.csdn.net/liguohui/article/details/7706815

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-317127-1-1.html 上篇帖子: 使用redisco轻松将python内置数据类型存入redis内 下篇帖子: redis持久化的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表