【MYSQL】MHA搭建过程

环境介绍

IP角色
172.16.20.105master
172.16.20.106slave1(manage)
172.16.20.107slave2

安装mysql

下载mha安装包

https://code.google.com/archive/p/mysql-master-ha/downloads?page=1

mha安装

##安装依赖包(all node)

yum install perl-DBD-MySQL

安装node(all node)

cd /home/software/mha4mysql-node-0.54
perl Makefile.PL
make && make install

安装manager

#------安装依赖包
#------依赖包下载地址
https://rpmfind.net/linux/rpm2html/search.php?
https://metacpan.org/pod/Log::Dispatch
https://github.com/riywo/MHA-Node

YAML
DBI
DBD::mysql
Time::HiRes
Config::Tiny
Log::Dispatch
Parallel::ForkManager
MHA::NodeConst

yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN.noarch


#----查看已安装perl模块
instmodsh
#-----安装manager
cd /home/software/mha4mysql-manager-0.54
perl Makefile.PL
make && make install

配置互信

https://www.cnblogs.com/jytx/p/7272860.html

配置manager和各node之间的互信

搭建主从

#-----主库备份
mysqldump -uroot  --master-data=2 --single-transaction -R --triggers -A > all.sql
#-----查看binlog信息
head -n 30 all.sql | grep 'CHANGE MASTER TO'
#-----创建复制账户
grant replication slave on *.* to 'repl'@'172.16.20.%' identified by '123456';
flush privileges;
#------创建监控用户(后续配置mha使用,在master执行)
grant all privileges on *.* to 'root'@'172.16.20.%' identified  by '123456';
#------拷贝备份文件到从库并恢复
scp all.sql root@172.16.20.106:/tmp/
scp all.sql root@172.16.20.107:/tmp/
chmod 707 /tmp/all.sql
su - mysql
mysql -uroot < /tmp/all.sql
mysql -uroot 
CHANGE MASTER TO MASTER_HOST='172.16.20.105',MASTER_USER='repl', MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=531; 
start slave;
#------配置read only
mysql -uroot  -e "set global read_only=1"
mysql -uroot -e "show variables like  'read_only'"

配置mha

#------创建配置目录及文件
mkdir -p /etc/mha
cp /home/software/mha4mysql-manager-0.54/samples/conf/app1.cnf  /etc/mha/
mkdir -p /var/log/mha/app1

#------修改配置文件
cat /etc/masterha/app1.cnf 
[server default]
manager_workdir=/var/log/mha/app1.log                           //设置manager的工作目录
manager_log=/var/log/mha/app1/manager.log                       //设置manager的日志
master_binlog_dir=/data/mysql                                        //设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
#master_ip_failover_script= /usr/local/bin/master_ip_failover         //设置自动failover时候的切换脚本
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change  //设置手动切换时候的切换脚本
password=123456                                                        //设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root               设置监控用户root
ping_interval=1                                                 //设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
remote_workdir=/tmp                                             //设置远端mysql在发生切换时binlog的保存位置
repl_password=123456                                            //设置复制用户的密码
repl_user=repl                                                  //设置复制环境中的复制用户名
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=192.168.2.128
port=3306

[server2]
hostname=192.168.2.129
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=192.168.2.130
port=3306

#-------设置relay log清除方式(slave)
mysql -uroot  -e "set global relay_log_purge=0"
mysql -uroot -e "show variables like 'relay_log_purge'"

#-------编写定期清理relay脚本(slave)

#-------检查ssh配置
masterha_check_ssh --conf=/etc/mha/app1.cnf
#-------检查复制环境
masterha_check_repl --conf=/etc/mha/app1.cnf
报错后再slave上建软链
(cant exec mysqlbinlog: no such file or directory at /usr/local/perl5/…… line 99)
ln -s /Data/mysql/my3306/bin/mysql /usr/bin/mysql
ln -s /Data/mysql/my3306/bin/mysqlbinlog /usr/bin/mysqlbinlog
#-------检查manager状态
masterha_check_status --conf=/etc/mha/app1.cnf
#-------开启mha监控
mkdir -p /var/log/mha/app1
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null > /var/log/mha/app1/manager.log 2>&1 &

启动参数说明
--remove_dead_master_conf      //该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。
--manger_log                   //日志存放位置
--ignore_last_failover         //在缺省情况下,如果MHA检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。该参数代表忽略上次MHA触发切换产生的文件,默认情况下,MHA发生切换后会在日志目录,也就是上面我设置的/data产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--ignore_last_failover。

#-------检查manager状态
masterha_check_status --conf=/etc/mha/app1.cnf

#------关闭mha监控
masterha_stop --conf=/etc/mha/app1.cnf

#-------VIP管理
#-------环境测试

切换测试

1、关闭原主库,观察切换情况

2、启动原主库,将环境恢复到最初状态。

从manager.log中找到故障切换后,新master节点的log和pos。在原主库上执行change master使其变为一个slave。

把原master的server信息添加到/etc/mha/app1.cnf。

[server1]
hostname=172.16.20.105
port=3306

手工执行切换

masterha_master_switch  --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=172.16.20.105 --new_master_port=3306 --orig_master_is_new_slave
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值