您的位置:首页 > 大数据 > 人工智能

MHA中send_report脚本(使用Email::Simple模块)

2017-05-16 15:10 447 查看
MHA是目前相对成熟的一套MySQL高可用方案,在MySQL故障切换过程中,MHA 能做到0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA 能最大程度上保证数据库的一致性,以达到真正意义上的高可用。并且可以通过send_report脚本实现邮件发送告警的功能。

网上大多都是使用Mail::Sender模块实现发送邮件的功能,在此我是用了Email::Simple模块:

#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';
use Email::Simple;
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP::TLS;
use Getopt::Long;

#new_master_host and new_slave_hosts are set only when recovering master succeeded
my ( $dead_master_host, $new_master_host, $new_slave_hosts, $subject, $body );
GetOptions(
'orig_master_host=s' => \$dead_master_host,
'new_master_host=s'  => \$new_master_host,
'new_slave_hosts=s'  => \$new_slave_hosts,
'subject=s'          => \$subject,
'body=s'             => \$body,
);

#mailToContacts($smtp,$mail_from,$mail_user,$mail_pass,$mail_to,$subject,$body);
mailToContacts();
sub mailToContacts {
#    my ( $smtp, $mail_from, $user, $passwd, $mail_to, $subject, $msg ) = @_;
open my $DEBUG, "> /tmp/monitormail.log"
or die "Can't open the debug      file:$!\n";
my $transport = Email::Sender::Transport::SMTP::TLS->new(
host     => 'smtp.163.com',
port     => 25,
username => 'xxxxxxxx@163.com',
password => 'yourpw',
);

my $message = Email::Simple->create(
header => [
From           => 'xxxxxxxx@163.com',
To             => 'xxxxxxxx@xxx.com',
Subject        => $subject,
],
body           =>$body,
);
sendmail( $message, {transport => $transport} );
return 1;
}
# Do whatever you want here
exit 0;


注:由于本人之前没有接触过perl,脚本中难免出现冗余代码;

故障切换过程中可以根据manager.log提示查找未成功原因,本人在安装过程中遇见的问题总结如下:

1、Can’t locate Net/SMTP/TLS/ButMaintained.pm

使用cpan安装perl依赖的模块,无法安装的下载tar包就行安装

install Email:Simple
install Email:Sender:Simple


使用tar包安装Email::Sender::Transport::SMTP::TLS和Net::SMTP::TLS::ButMaintained

2、如果还是无法找到模块的话,可能是脚本里第一行没有使用环境变量里的perl路径

可以将#!/usr/bin/perl 改成#!/usr/bin/env perl

3、tar包安装完之后提示

Can't load '/usr/local/perl5/perls/perl-5.18.2/lib/site_perl/5.18.2/x86_64-linux-thread-multi/auto/Net/SSLeay/SSLeay.so' for module Net::SSLeay: libssl.so.4:


用cpan安装或者使用tar包安装Net::SSLeay模块

4、提示Can’t locate IO/Socket/SSL.pm

使用cpan安装或者tar包安装IO::Socket::SSL

最后使用下面语句监测各模块是否导入成功:

perl -MEmail::Sender::Transport::SMTP::TLS -e "print\"module installed\n\""
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息