Chinaunix

标题: MMM进阶技巧---角色切换报警【原创】 [打印本页]

作者: cenalulu    时间: 2010-11-11 13:09
标题: MMM进阶技巧---角色切换报警【原创】
背景:
众所周知MMM会自动进行writer或者reader角色的切换。
但是他何时,因为何种原因进行了切换呢?
为了回答这个问题,我们只能查看日志文件。这无疑是一种低效的解决方式。
能不能让MMM在进行切换的时候,自动发出信息,进行报警和提示呢? 可以!

解决方案:
MMM的日志配置,使用的是log4perl。
查看文档发现log4perl支持的日志载体有,File,Mail,Pipe
本文介绍的重点就是Pipe类型。

修改 /etc/mysql-mmm/mmm_mon_log.conf 文件如下
  1. log4perl.logger = INFO, MMMLog , MailFatal
  2. log4perl.appender.MMMLog = Log::Log4perl::Appender::File
  3. log4perl.appender.MMMLog.Threshold = INFO
  4. log4perl.appender.MMMLog.filename = /var/log/mysql-mmm/mmm_mond.log
  5. log4perl.appender.MMMLog.recreate = 1
  6. log4perl.appender.MMMLog.layout = PatternLayout
  7. log4perl.appender.MMMLog.layout.ConversionPattern = %d %5p %m%n

  8. log4perl.appender.MailFatal = Log::Log4perl::Appender::File
  9. log4perl.appender.MailFatal.Threshold = FATAL
  10. log4perl.appender.MailFatal.mode = pipe
  11. log4perl.appender.MailFatal.filename = /var/log/mysql-mmm/mpipe
  12. log4perl.appender.MailFatal.recreate = 1
  13. log4perl.appender.MailFatal.buffered = 0
  14. log4perl.appender.MailFatal.layout = PatternLayout
  15. log4perl.appender.MailFatal.layout.ConversionPattern = %d %5p %m%n
复制代码
其中MMMLog 部分为基本日志记录。
MailFatal 部分为短信或者邮件自动发送部分配置。

主要原理如下:
当log4perl 配置 appender mode 为 pipe 时,会认为 filename是一个可执行文件
mmm_mon在启动时,会调用filename所配置的文件。
filename文件需要是一个能读取STDIN的可执行文件,并对读入做某些预期的操作(发短信,发邮件等)
filename文件需要是一个循环执行的文件,范例如下:
  1. #! /bin/sh

  2. while read Message
  3. do
  4.         #do something with $Message
  5. done;
复制代码
通过替换注释部分成为所需要的警报命令(mail,短信均可)。从而达到了文章开始所阐述的实时报警的需求。
作者: 飞鸿无痕    时间: 2010-11-11 13:30
这两天在弄mmm,整需要这个东西,谢谢楼主!
作者: liang3391    时间: 2010-11-11 16:49
支持兄弟
作者: ruochen    时间: 2010-11-11 17:45
谢谢分享
作者: 飞鸿无痕    时间: 2010-11-12 10:03
回复 1# cenalulu

刚测试了下,脚本写好了,mmm_mon_log.conf配置也写好了(和你的一样),利用短信报警!
当我把原来的主停掉之后,切换到另外一个主上,没收到报警。利用tail -f /var/log/mysql-mmm/mmm_mond.log查看到了FATAL级别的日志如下:
  1. 2010/11/10 07:25:36  WARN Check 'rep_backlog' on 'db1' is in unknown state! Message: UNKNOWN: Connect error (host = 192.168.1.161:3306, user = mmm_monitor)! Lost connection to MySQL server at 'reading initial communication packet', system error: 111
  2. 2010/11/10 07:25:36  WARN Check 'rep_threads' on 'db1' is in unknown state! Message: UNKNOWN: Connect error (host = 192.168.1.161:3306, user = mmm_monitor)! Lost connection to MySQL server at 'reading initial communication packet', system error: 111
  3. 2010/11/10 07:25:46 ERROR Check 'rep_threads' on 'db4' has failed for 10 seconds! Message: ERROR: Replication is broken
  4. 2010/11/10 07:25:46 ERROR Check 'rep_threads' on 'db2' has failed for 10 seconds! Message: ERROR: Replication is broken
  5. 2010/11/10 07:25:46 ERROR Check 'rep_threads' on 'db3' has failed for 10 seconds! Message: ERROR: Replication is broken

  6. 2010/11/10 07:25:49 FATAL State of host 'db4' changed from ONLINE to REPLICATION_FAIL
  7. 2010/11/10 07:25:49  INFO Removing all roles from host 'db4':
  8. 2010/11/10 07:25:49  INFO     Removed role 'reader(192.168.1.112)' from host 'db4'
  9. 2010/11/10 07:25:49 FATAL State of host 'db2' changed from ONLINE to REPLICATION_FAIL
  10. 2010/11/10 07:25:49  INFO Removing all roles from host 'db2':
  11. 2010/11/10 07:25:49  INFO     Removed role 'reader(192.168.1.111)' from host 'db2'
  12. 2010/11/10 07:25:49 FATAL State of host 'db3' changed from ONLINE to REPLICATION_FAIL
  13. 2010/11/10 07:25:49  INFO Removing all roles from host 'db3':
  14. 2010/11/10 07:25:49  INFO     Removed role 'reader(192.168.1.114)' from host 'db3'
  15. 2010/11/10 07:25:49  INFO Orphaned role 'reader(192.168.1.111)' has been assigned to 'db1'
  16. 2010/11/10 07:25:49  INFO Orphaned role 'reader(192.168.1.112)' has been assigned to 'db1'
  17. 2010/11/10 07:25:49  INFO Orphaned role 'reader(192.168.1.114)' has been assigned to 'db1'
  18. 2010/11/10 07:25:50 ERROR Check 'mysql' on 'db1' has failed for 10 seconds! Message: ERROR: Connect error (host = 192.168.1.161:3306, user = mmm_monitor)! Lost connection to MySQL server at 'reading initial communication packet', system error: 111
  19. 2010/11/10 07:25:52 FATAL State of host 'db1' changed from ONLINE to HARD_OFFLINE (ping: OK, mysql: not OK)
  20. 2010/11/10 07:25:52  INFO Removing all roles from host 'db1':
  21. 2010/11/10 07:25:52  INFO     Removed role 'reader(192.168.1.111)' from host 'db1'
  22. 2010/11/10 07:25:52  INFO     Removed role 'reader(192.168.1.112)' from host 'db1'
  23. 2010/11/10 07:25:52  INFO     Removed role 'reader(192.168.1.114)' from host 'db1'
  24. 2010/11/10 07:25:52  INFO     Removed role 'reader(192.168.1.115)' from host 'db1'
  25. 2010/11/10 07:25:52  INFO     Removed role 'writer(192.168.1.113)' from host 'db1'
  26. 2010/11/10 07:25:55 FATAL State of host 'db4' changed from REPLICATION_FAIL to ONLINE
  27. 2010/11/10 07:25:55 FATAL State of host 'db2' changed from REPLICATION_FAIL to ONLINE
  28. 2010/11/10 07:25:55 FATAL State of host 'db3' changed from REPLICATION_FAIL to ONLINE
  29. 2010/11/10 07:25:55  INFO Orphaned role 'writer(192.168.1.113)' has been assigned to 'db2'
  30. 2010/11/10 07:25:55  INFO Orphaned role 'reader(192.168.1.111)' has been assigned to 'db3'
  31. 2010/11/10 07:25:55  INFO Orphaned role 'reader(192.168.1.112)' has been assigned to 'db4'
  32. 2010/11/10 07:25:55  INFO Orphaned role 'reader(192.168.1.114)' has been assigned to 'db2'
  33. 2010/11/10 07:25:55  INFO Orphaned role 'reader(192.168.1.115)' has been assigned to 'db3'
  34. 2010/11/10 07:25:57  INFO Check 'rep_threads' on 'db4' is ok!
  35. 2010/11/10 07:25:57  INFO Check 'rep_threads' on 'db3' is ok!
复制代码
帮我看下错在什么地方了,谢谢,我的脚本如下:
#! /bin/sh
while read Message
do
        LD_LIBRARY_PATH=fx/. fx/fetion --mobile=159200××××× --pwd=zilanxing@123  --to=15920××××× --msg-utf8="mysql-master-is-changed" >/dev/null 2>&1
done

直接执行 LD_LIBRARY_PATH=fx/. fx/fetion --mobile=159200××××× --pwd=zilanxing@123  --to=15920××××× --msg-utf8="mysql-master-is-changed" >/dev/null 2>&1能收到短信报警。
作者: cenalulu    时间: 2010-11-12 10:40
回复  cenalulu

刚测试了下,脚本写好了,mmm_mon_log.conf配置也写好了(和你的一样),利用短信报警! ...
飞鸿无痕 发表于 2010-11-12 10:03



    可能性很多,配置完以后,需要mond server restart。
确认下这个脚本有没有+x , 另外可以先把发短信这段话改成 echo 'sth' >> /tmp/foo.log ,至少先确认,脚本被正常调用了。
作者: 飞鸿无痕    时间: 2010-11-12 11:02
回复 6# cenalulu

脚本如果没有x权限,监控端启动不了的。我再试下,谢谢。
作者: badb0y    时间: 2010-11-12 11:02
可能试一下,前些天玩MMM,,没有报警功能!
作者: 飞鸿无痕    时间: 2010-11-12 11:29
回复 6# cenalulu

配置完后重启了监控端,现在确定当mysql主从进行切换的时候没有调用我的脚本文件,不太清楚问题出现在什么地方。脚本如下,我停掉正在写的主切换后,没有生成aaa文件。
while read Message这个要不要更改?
#!/bin/bash
while read Message
do
        echo "teaaaaa" >> aaa
done;
作者: cenalulu    时间: 2010-11-12 13:47
回复  cenalulu

配置完后重启了监控端,现在确定当mysql主从进行切换的时候没有调用我的脚本文件,不太 ...
飞鸿无痕 发表于 2010-11-12 11:29



    while 不用改。 log4perl.appender.MailFatal.filename = /var/log/mysql-mmm/mpipe
你的脚本确定是在这个目录下?
PS:用不用什么IM,论坛交流效率太低了。。。
作者: 飞鸿无痕    时间: 2010-11-12 14:40
回复 10# cenalulu


    公司不让上,呵呵,我先自己研究下,还不行再联系你,谢谢。
作者: suiyangking    时间: 2010-11-22 15:52
对不起 我被LZ的头像颠倒了
作者: lantian728    时间: 2010-12-10 15:49
学习下,谢谢分享
作者: zhangshengdong    时间: 2012-08-14 17:00
厉害厉害,MMM还没有玩到!~
作者: action08    时间: 2012-08-14 18:07
谢谢分享,
作者: horizonhyg    时间: 2012-08-15 14:09
回复 5# 飞鸿无痕


    是不是fetion的位置不是全路径,或者权限fetion 的权限不对,建议设置755.
    http://lihm01.itpub.net/post/41982/514837




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2