MHA安装配置

一. 下载mha4mysql 的manager与node源码,然后进行编译安装。 下载地址:

mha4mysql-node https://github.com/yoshinorim/mha4mysql-node

mha4mysql-manager https://github.com/yoshinorim/mha4mysql-manager

二. 安装依赖包

依赖包的依赖包:

1. 所有节点上都需要操作,因为MHA manager 与MHA node 的工具运行都依赖于perl模块。

rpm -ivh --nodeps --force MySQL-shared-5.6.39-1.el7.x86_64.rpm

2. 安装好后查看该rpm 提供了哪此文件:

rpm -ql MySQL-shared-5.6.39-1.el7.x86_64

安装依赖包:

epel源:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum -y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-devel perl-Module-Install.noarch

其它包:

yum install -y daemonize

3. 下载manager与node,直接从github上下载。

#安装Git工具

yum install git -y

# 下载node:需要在所有节点安装,包括主从所有节点

git clone https://github.com/yoshinorim/mha4mysql-node.git

# 下载manager:只需要安装在计划的MHA Master节点192.168.31.101

git clone https://github.com/yoshinorim/mha4mysql-manager.git

git clone 执行报错:fatal: unable to access xxxxx :Recv failure: Connection reset by peer

解决方案,执行以下命令:

# git config --global --unset http.proxy

# git config --global --unset https.proxy

下载速度慢或下载失败的情况下可以从一的链接中下载好然后用WinSCP上传到服务器环境中。

4. 编译安装

MHA管理节点 

# cd ~/mha4mysql-manager/ 
# perl Makefile.PL && make && make install

 

MHA NODE节点(所有节点都要操作,因为所有节点都有mha4mysql-node)

# cd ~/mha4mysql-node/
# perl Makefile.PL && make && make install

 

三.  配置 MHA Manager

1.  从样例中复制配置文件到指定目录

cd ~/mha4mysql-manager/ 

mkdir -p /etc/masterha/scripts

# 复制

cp samples/conf/app1.cnf /etc/masterha/

cp samples/conf/masterha_default.cnf /etc/masterha_default.cnf

# 复制failover相关脚本

cp samples/scripts/* /usr/local/bin/

samples/scripts/ 路径下配置文件说明:

send_report:因故障切换后发送报警的脚本,不是必须

power_manager:故障发生后关闭主机的脚本

master_ip_online_change:在线切换时vip的管理

master_ip_failover:自动切换时vip管理的脚本

 

2. 编译配置文件内容如下#cat /etc/masterha/app1/app1.cnf 

[server default]
manager_workdir=/var/log/masterha/app1.log                             #设置manager的工作目录
manager_log=/var/log/masterha/app1/manager.log                         #设置manager的日志
master_binlog_dir=/data                                                #设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
master_ip_failover_script= /etc/masterha/scripts/master_ip_failover    #设置自动failover时候的切换脚本
master_ip_online_change_script=/etc/masterha/scripts/master_ip_online_change 
                                                                       #设置手动切换时候的切换脚本
password=123456                                                        #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root                                                              #设置监控用户root
ping_interval=1                                                        #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
remote_workdir=/data                                                   #设置远端mysql在发生切换时binlog的保存位置
repl_password=rep123                                                   #设置复制用户的密码
repl_user=rep1                                                         #设置复制环境中的复制用户名
report_script=/usr/local/bin/send_report                               #设置发生切换后发送的报警的脚本
secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02 --user=root --master_host=server02 --master_ip=192.168.2.128 --master_port=3306
                                                                       #一旦MHA到server02的监控之间出现问题,MHA Manager将会尝试从server03登录到server02
shutdown_script=""                                                     #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root                                                          #设置ssh的登录用户名

[server1]
hostname=10.10.100.175
port=3306
candidate_master=1

[server2]
hostname=10.10.100.181
port=3306
candidate_master=1                                                     #设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
check_repl_delay=0                                                     #默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server3]
hostname=10.10.100.184
port=3306

3. 添加主机互信
在各个主机上通过ssh-keygen生成密钥
# ssh-keygen #后面一路回车
然后通过ssh-copy-id 将密钥发送至本机及其他主机上,如下:将ssh key 发送至192.168.31.103, 免密用户为root
#  ssh-copy-id -i root/.ssh/id_rsa.pub root@192.168.31.103
分别通过ssh ip date 来验证是否可以进行免密登录。
# ssh 192.168.31.103 date

验证192.168.31.101

 

验证192.168.31.102

 

 验证192.168.31.103

 

 4. 测试SSH连接

使用mha自带工具

masterha_check_ssh --conf=/etc/masterha/app1/app1.cnf

 

 查看测试结果,最后提示: "ALL SSH connection tests passwd successfully." 说明所有节点间测试都成功。

四 .  配置VIP

vip配置可以采用两种方式,一种通过keepalived的方式管理虚拟ip的浮动;另外一种通过脚本方式启动虚拟ip的方式 (即不需要keepalived或者heartbeat类似的软件).

为了防止脑裂发生,推荐生产环境采用脚本的方式来管理虚拟ip,而不是使用keepalived来完成.到此为止,基本MHA集群 已经配置完毕.接下来就是实际的测试环节了.

下面分别了解不同的配置方式。

1. 修改脚本  文件路径:/usr/local/bin/master_ip_failover

#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
    $command,          $ssh_user,        $orig_master_host, $orig_master_ip,
    $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
);

my $vip = '192.168.0.88/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth1:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth1:$key down";

GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
);

exit &main();

sub main {

    print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

    if ( $command eq "stop" || $command eq "stopssh" ) {

        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn "Got Error: $@\n";
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "start" ) {

        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn $@;
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "status" ) {
        print "Checking the Status of the script.. OK \n";
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}

sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
sub stop_vip() {
     return 0  unless  ($ssh_user);
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
    print
    "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

2. 启动VIP
启动虚拟IP的命令如下:
ifconfig eth0:1 10.10.100.191 netmask 255.255.255.0

五. 检查整个复制环境状况

1. 命令:masterha_check_repl --conf=/etc/masterha/app1.cnf

2. 结果:

 

 未完待续。。。


posted @ 2022-03-17 19:06  明明改变世界  阅读(619)  评论(0编辑  收藏  举报