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. 结果:
未完待续。。。
本文来自博客园,作者:明明改变世界,转载请注明原文链接:https://www.cnblogs.com/mmworld/p/16018604.html