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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/poxiaonie/article/details/72287040

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\""
展开阅读全文

没有更多推荐了,返回首页