设置Keepalived VIP切换邮件告警
修改keepalived.conf配置:
[root@server01 keepalived]# cat keepalived.conf ! Configuration File for keepalived global_defs { notification_email { saltstack@163.com } notification_email_from dba@dbserver.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL-HA } vrrp_script vs_mysql_100 { script "python /etc/keepalived/checkProxySQL.py -h localhost -P 6033" interval 5 } vrrp_instance VI_1 { state BACKUP nopreempt interface eth0 virtual_router_id 51 priority 150 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 } track_script { vs_mysql_100 } virtual_ipaddress { 10.200.22.178 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" }
通知 notify.sh:
#!/bin/bash contact='root@localhost' notify() { local mailsubject="$(hostname) to be $1, vip floating" local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1" python /etc/keepalived/sendMail.py "$mailsubject" "$mailbody" echo $mailbody >> /etc/keepalived/notify.log } case $1 in master) notify master ;; backup) notify backup ;; fault) notify fault ;; *) echo "Usage: $(basename $0) {master|backup|fault}" exit 1 ;; esac
发送邮件 sendMail.py:
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 # author xuaiqi 4 # date 20190418 5 6 import os 7 import time 8 import shutil 9 import MySQLdb 10 import smtplib 11 #import requests 12 import datetime 13 14 from email.MIMEText import MIMEText 15 from email.MIMEImage import MIMEImage 16 from email.MIMEMultipart import MIMEMultipart 17 from email.MIMEBase import MIMEBase 18 from email import Encoders 19 from datetime import datetime 20 21 import sys 22 default_encoding = 'utf-8' 23 if sys.getdefaultencoding() != default_encoding: 24 reload(sys) 25 sys.setdefaultencoding(default_encoding) 26 27 # email info 28 mailserver = "smtp.vcredit.com" 29 EMAIL_USERNAME = 'dbmonitor@vcredit.com' 30 EMAIL_PASSWORD = 'dbmonitor1234!!' 31 32 title=sys.argv[1] 33 contents=sys.argv[2] 34 35 #发送邮件 36 def send_mail(title, to_list): 37 me = "dbmonitor@vcredit.com" 38 39 def _create_msg(): 40 msg = MIMEMultipart('related') 41 msg['Subject'] = title 42 msg['From'] = me 43 msg['To'] = ';'.join(to_list) 44 msg['date'] = '2012-3-16' #解决邮件发送时间不对 45 msg.preamble = 'This is a multi-part message in MIME format.' 46 msg_text = MIMEText(contents, 'html','utf-8') 47 msg_alternative = MIMEMultipart('alternative') 48 msg_alternative.attach(msg_text) 49 msg.attach(msg_alternative) 50 #print msg 51 return msg 52 try: 53 server = smtplib.SMTP() 54 server.connect(mailserver) 55 server.login(EMAIL_USERNAME, EMAIL_PASSWORD) 56 server.sendmail(me, to_list, _create_msg().as_string()) 57 server.close() 58 print 'send mail Ok!' 59 except Exception, e: 60 print e 61 62 63 64 print"--------------------------------------", datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"Start sending mail --------------------" 65 if __name__ == '__main__': 66 user=['yujun02@vcredit.com','zhanglin04@vcredit.com','xuaiqi@vcredit.com'] 67 print "发送的用户",user 68 print "内容",contents 69 send_mail(title, user) 70 print"---------------------------------", datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"Sucessfull sending mail --------------------"
设置MHA切换邮件通知
报告脚本 send_report.py:
1 #!/usr/bin/env python 2 #-*- encoding:utf-8 -*- 3 #------------------------------------------------------------------------------- 4 # Name: send_report.py 5 # Author: zhoujy 6 #---------------------------------------------- 7 import os 8 import sys 9 import time 10 import datetime 11 import smtplib 12 import subprocess 13 import fileinput 14 import getopt 15 from email.mime.text import MIMEText 16 from email.mime.multipart import MIMEMultipart 17 from email.Utils import COMMASPACE, formatdate 18 19 reload(sys) 20 sys.setdefaultencoding('utf8') 21 22 def send_mail(to, subject, text, from_mail, server="localhost"): 23 message = MIMEMultipart() 24 message['From'] = from_mail 25 message['To'] = COMMASPACE.join(to) 26 message['Date'] = formatdate(localtime=True) 27 message['Subject'] = subject 28 message.attach(MIMEText(text,_charset='utf-8')) 29 smtp = smtplib.SMTP(server) 30 smtp.login(from_mail, 'dbmonitor1234!!') 31 smtp.sendmail(from_mail, to, message.as_string()) 32 smtp.close() 33 34 if __name__ == "__main__": 35 opts,args = getopt.getopt(sys.argv[1:],"h",["orig_master_host=","new_master_host=","new_slave_hosts=","conf=","subject=","body=","app_vip=","new_master_ssh_port=","ssh_user="]) 36 # print opts,args 37 for lines in opts: 38 key,values = lines 39 if key == '--orig_master_host': 40 orig_master_host = values 41 if key == '--new_master_host': 42 new_master_host = values 43 if key == '--new_slave_hosts': 44 new_slave_hosts = values 45 if key == '--subject': 46 subject = values 47 if key == '--body': 48 body = values 49 # text = sys.stdin.read() 50 mail_list = ['xuaiqi@vcredit.com','yujun02@vcredit.com','zhanglin04@vcredit.com'] 51 send_mail(mail_list, subject.encode("utf8"), body, "dbmonitor@vcredit.com", server="smtp.vcredit.com")
Master基础配置:
1 [server default] 2 user=root 3 password=iforgot 4 ssh_user=root 5 repl_user=repl 6 repl_password=repl 7 ping_interval=1 8 #master_binlog_dir= /var/lib/mysql,/var/log/mysql 9 secondary_check_script=masterha_secondary_check -s 10.200.22.136 -s 10.200.22.138 -s 10.200.22.223 10 master_ip_failover_script="/etc/mha/scripts/master_ip_failover" 11 master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change" 12 report_script="/etc/mha/scripts/send_report.py"
测试验证
keepalived vip切换