|
#!/usr/bin/env python#-*-encoding:utf8-*-#------------------------------------------------# Name: notify.py# Purpose: failover切换后的操作# Author: zhoujy# Created: 2016-06-17#------------------------------------------------import osimport sysimport timeimport datetimeimport smtplibimport subprocessimport fileinputimport loggingimport paramikofrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom 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.sendmail(from_mail, to, message.as_string())
smtp.close()#关vipdef down_vip(hostname,port):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port)
stdin, stdout, stderr = ssh.exec_command("ifconfig eth0:0 down")# print stdout.readlines()
if not stderr.readlines() : print "down vip ok..."
else : print stderr.readlines()
ssh.close()#开vipdef up_vip(hostname,port,vip):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port)
stdin, stdout, stderr = ssh.exec_command("ifconfig eth0:0 %s;arping -c 3 -A %s;hash -r" %(vip,vip))# print stdout.readlines()
if not stderr.readlines() : print "up vip ok..."
else : print stderr.readlines()
ssh.close()if __name__ == "__main__":#服务器端口
ssh_port = 22#指定VIP
vip = '192.168.200.2'#通过logging.basicConfig函数对日志的输出格式及方式做相关配置
logging.basicConfig(level=logging.INFO,
format=':::%(levelname)s::: \n%(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/var/log/redis/failover.txt',
filemode='a')#定义一个StreamHandler,将INFO级别的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
time = (datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")
message = sys.argv[1:]
master_name = sys.argv[1]
role = sys.argv[2]
stats = sys.argv[3]
from_ip = sys.argv[4]
from_port = sys.argv[5]
to_ip = sys.argv[6]
to_port = sys.argv[7]
messages = "++++++++++++++++++++++++++"+time+" failover++++++++++++++++++++++++++"+'\n'+' '.join(message)
subject = ''' Redis 【%s】 Failover ''' %master_name
info = ''' %s : Redis Master %s failover %s(%s:%s) to %s(%s:%s) succeeded ! ''' %(time,master_name,from_ip,from_ip,from_port,to_ip,to_ip,to_port)
mail_list =['zjy@dxyer.com'] if role == 'leader':
logging.info(messages) down_vip(from_ip,ssh_port)
up_vip(to_ip,ssh_port,vip)
send_mail(mail_list, subject.encode("utf8"), info +' and VIP do sucessed !!', "Redis_failover_report@ls.xxx.net", server="192.168.xxx.xxx")
|
|
|