设置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 $ in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit
;;
esac

发送邮件 sendMail.py:

 #!/usr/bin/python
# -*- coding: utf- -*-
# author xuaiqi
# date import os
import time
import shutil
import MySQLdb
import smtplib
#import requests
import datetime from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders
from datetime import datetime import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding) # email info
mailserver = "smtp.vcredit.com"
EMAIL_USERNAME = 'dbmonitor@vcredit.com'
EMAIL_PASSWORD = 'dbmonitor1234!!' title=sys.argv[]
contents=sys.argv[] #发送邮件
def send_mail(title, to_list):
me = "dbmonitor@vcredit.com" def _create_msg():
msg = MIMEMultipart('related')
msg['Subject'] = title
msg['From'] = me
msg['To'] = ';'.join(to_list)
msg['date'] = '2012-3-16' #解决邮件发送时间不对
msg.preamble = 'This is a multi-part message in MIME format.'
msg_text = MIMEText(contents, 'html','utf-8')
msg_alternative = MIMEMultipart('alternative')
msg_alternative.attach(msg_text)
msg.attach(msg_alternative)
#print msg
return msg
try:
server = smtplib.SMTP()
server.connect(mailserver)
server.login(EMAIL_USERNAME, EMAIL_PASSWORD)
server.sendmail(me, to_list, _create_msg().as_string())
server.close()
print 'send mail Ok!'
except Exception, e:
print e print"--------------------------------------", datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"Start sending mail --------------------"
if __name__ == '__main__':
user=['yujun02@vcredit.com','zhanglin04@vcredit.com','xuaiqi@vcredit.com']
print "发送的用户",user
print "内容",contents
send_mail(title, user)
print"---------------------------------", datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"Sucessfull sending mail --------------------"

设置MHA切换邮件通知

报告脚本 send_report.py:

 #!/usr/bin/env python
#-*- encoding:utf- -*-
#-------------------------------------------------------------------------------
# Name: send_report.py
# Author: zhoujy
#----------------------------------------------
import os
import sys
import time
import datetime
import smtplib
import subprocess
import fileinput
import getopt
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.Utils import COMMASPACE, formatdate reload(sys)
sys.setdefaultencoding('utf8') def send_mail(to, subject, text, from_mail, server="localhost"):
message = MIMEMultipart()
message['From'] = from_mail
message['To'] = COMMASPACE.join(to)
message['Date'] = formatdate(localtime=True)
message['Subject'] = subject
message.attach(MIMEText(text,_charset='utf-8'))
smtp = smtplib.SMTP(server)
smtp.login(from_mail, 'dbmonitor1234!!')
smtp.sendmail(from_mail, to, message.as_string())
smtp.close() if __name__ == "__main__":
opts,args = getopt.getopt(sys.argv[:],"h",["orig_master_host=","new_master_host=","new_slave_hosts=","conf=","subject=","body=","app_vip=","new_master_ssh_port=","ssh_user="])
# print opts,args
for lines in opts:
key,values = lines
if key == '--orig_master_host':
orig_master_host = values
if key == '--new_master_host':
new_master_host = values
if key == '--new_slave_hosts':
new_slave_hosts = values
if key == '--subject':
subject = values
if key == '--body':
body = values
# text = sys.stdin.read()
mail_list = ['xuaiqi@vcredit.com','yujun02@vcredit.com','zhanglin04@vcredit.com']
send_mail(mail_list, subject.encode("utf8"), body, "dbmonitor@vcredit.com", server="smtp.vcredit.com")

Master基础配置:

 [server default]
user=root
password=iforgot
ssh_user=root
repl_user=repl
repl_password=repl
ping_interval=
#master_binlog_dir= /var/lib/mysql,/var/log/mysql
secondary_check_script=masterha_secondary_check -s 10.200.22.136 -s 10.200.22.138 -s 10.200.22.223
master_ip_failover_script="/etc/mha/scripts/master_ip_failover"
master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change"
report_script="/etc/mha/scripts/send_report.py"

测试验证

keepalived vip切换

mha切换

MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(三)的更多相关文章

  1. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(二)

    ProxySQL安装 yum/rpm安装 在github或官网上可以下载rpm包,wiki的Getting start章节有详细介绍. cat <<EOF | tee /etc/yum.r ...

  2. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(一)

    准备服务器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileged -v `pwd`/my ...

  3. MHA+ProxySQL实现读写分离高可用

    最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...

  4. MHA+ProxySQL 读写分离高可用

    文档结构如下: 1.ProxySQL说明 ProxySQL是mysql的一款中间件的产品,是灵活的mysql代理层,可以实现读写分离,支持query路由器的功能,支持动态指定sql进行缓存,支持动态加 ...

  5. MySQL for OPS 09:MHA + Atlas 实现读写分离高可用

    写在前面的话 前面做了 MHA 高可用,但是存在这样一个问题,我们花了 4 台机器,但是最终被利用起来的也就一台,主库.这样硬件利用率才 25%,这意味着除非发生故障,不然其他几台机器都是摆设.明显的 ...

  6. MySQL中间件之ProxySQL(10):读写分离方法论

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.不同类型的读写分离 数据库中间件最基本的功能就是实现读写分离,Pr ...

  7. MySQL读写分离高可用集群及读操作负载均衡(Centos7)

    目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...

  8. mysql读写分离[高可用]

    顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...

  9. Atlas读写分离[高可用]

    Atlas下载地址: https://github.com/Qihoo360/Atlas/releases Atlas是出于360的, 比mysql-proxy更稳定, 部署起来更方便. 环境: pr ...

随机推荐

  1. oracle存储过程调试报错  ORA-0131 Insufficient privileges 处理

    必须使用oracle用户登录oracle@sqlplus system/system123 as sysdba 以SYS用户登录数据库,执行赋权操作: grant  DEBUG CONNECT SES ...

  2. 机器视觉:MobileNet 和 ShuffleNet

    虽然很多CNN模型在图像识别领域取得了巨大的成功,但是一个越来越突出的问题就是模型的复杂度太高,无法在手机端使用,为了能在手机端将CNN模型跑起来,并且能取得不错的效果,有很多研究人员做了很多有意义的 ...

  3. c++ complie link error 2019/2001

    1:没有将需要的文件添加到项目中,只是考到项目所在的目录了 2:没有添加 类导出 宏

  4. ES6模板字符串之标签模板

    首先,模板字符串和标签模板是两个东西. 标签模板不是模板,而是函数调用的一种特殊形式.“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数. 但是,如果模板字符串中有变量,就不再是简单的调用了,而 ...

  5. WEBBASE篇: 第十一篇, JavaScript知识6

    JavaScript 知识6 一, String 对象 1,分隔字符串, 函数: split(seperator) 作用: 将字符串,通过seperator 拆分成一个数组: eg: var msg= ...

  6. vim撤销与反撤销

    按esc进入一般模式之后,u按键则为撤销上一步操作,ctrl+r则为反撤销操作

  7. flume中sink到hdfs,文件系统频繁产生文件,文件滚动配置不起作用?

    在测试hdfs的sink,发现sink端的文件滚动配置项起不到任何作用,配置如下: a1.sinks.k1.type=hdfs a1.sinks.k1.channel=c1 a1.sinks.k1.h ...

  8. webshell导致项目崩溃

    mysql挂死,无法启动,解决mysql无法启动: /etc/my.cnf配置文件中innodb_force_recovery=1然后service mysqld start/etc/my.cnf配置 ...

  9. PHP连接mysql数据库报错:Call to undefined function mysql_connect()

    http://php.net/manual/zh/intro.mysqli.php 系统环境PHP7.0+Mysql5.7+Apache2. 运行一个数据库连接测试示例时报错: [client 127 ...

  10. 安装Mosquitto学习MOTT协议

    1.源码的获取:http://mosquitto.org/files/source/ 2.直接解压tar文件,就可以得到所有的源码,里面有个配置文件config.mk,这个文件包含了Mosquitto ...