温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mysql 学习笔记之搭建MHA高可用

发布时间:2020-08-09 14:18:36 来源:ITPUB博客 阅读:237 作者:云小虫2019 栏目:MySQL数据库

4. 搭建MHA高可用

4.1 架构图

mysql 学习笔记之搭建MHA高可用

这里只搭建一套主从,架构如下

mysql 学习笔记之搭建MHA高可用

4.2 安装MHA Node

所有节点都需要安装,包括MHA,Master,Slave

4.2.1 安装依赖包

yum install -y perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN

4.2.2 下载软件包

https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

mysql 学习笔记之搭建MHA高可用

4.2.3 编译安装

#解压
tar zxvf mha4mysql-node-0.58.tar.gz
#移动到/usr/local/目录下,并切换目录
mv mha4mysql-node-0.58 /usr/local/
cd /usr/local/mha4mysql-node-0.58
#编译安装
perl Makefile.PL 
make
make install

安装完成后 会在/usr/local/bin/生成以下脚本文件,Node脚本说明(这些工具通常由MHAManager的脚本触发)

save_binary_logs               //保存和复制master的二进制日志
apply_diff_relay_logs          //识别差异的中继日志事件并将其差异                                //的事件应用于其他的slave
filter_mysqlbinlog             //去除不必要的ROLLBACK事件(MHA已                                ///不再使用这个工具)
purge_relay_logs               //清除中继日志(不会阻塞SQL线程)

4.3 安装MHA Manger

4.3.1 安装依赖

yum install perl-DBD-MySQL  perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y

4.3.2 下载软件包

https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58

mysql 学习笔记之搭建MHA高可用

4.3.3 编译安装

#解压
tar -zxf mha4mysql-manager-0.58.tar.gz
#移动到/usr/local/目录下,并切换目录
mv mha4mysql-manager-0.58 /usr/local/
cd /usr/local/mha4mysql-manager-0.58/
# 编译安装
perl Makefile.PL
make
make install

安装完成后,在/usr/local/bin会多出以下相关的命令脚本:

masterha_check_repl //检查MySQL复制健康状况
masterha_check_ssh //检查ssh健康状况
masterha_check_status //检测当前MHA运行状态
masterha_conf_host  //添加或者删除配置的server信息
masterha_manager //启动MHA
masterha_master_monitor //检测master是否宕机
masterha_master_switch //控制故障转移(自动或者手动)
masterha_secondary_check //如果从manager节点发现
masterha_stop //停止MHA

在/usr/local/mha4mysql-manager-0.58/samples/scripts 目录下会有相关脚本

master_ip_failover        
//自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移
indistinguishableness 
//在线切换时vip的管理,不是必须,同样可以可以自行编写简单的shell完成
power_manager //故障发生后关闭主机的脚本,不是必须
send_report  //因故障切换后发送报警的脚本,不是必须,可自行编写简单的shell完成

4.4 设置host 解析

4.4.1 设置主机名

#MHA
hostnamectl set-hostname MHA
#Master
hostnamectl set-hostname Master
#Slave01
hostnamectl set-hostname Slave01
#Slave02
hostnamectl set-hostname Slave02

4.4.2 配置Host文件

# vim /etc/hosts
192.168.56.50 MHA
192.168.56.51 Master
192.168.56.52 Slave01
192.168.56.53 Slave02

4.5 配置互信

#创建目录,所有节点执行
mkdir ~/.ssh
cd  ~/.ssh
#生成公钥和私钥文件,一直回车使用默认即可,所有节点执行
ssh-keygen -t rsa
#将所有节点上的公钥复制到一台机器上,汇总成 authorized_keys
#192.168.56.51服务器上,将生成的公钥复制到192.168.56.50下
scp id_rsa.pub root@192.168.56.50:/root/.ssh/id_rsa.pub_51
#192.168.56.52服务器上,将生成的公钥复制到192.168.56.50下
scp id_rsa.pub root@192.168.56.50:/root/.ssh/id_rsa.pub_52
#192.168.56.53服务器上,将生成的公钥复制到192.168.56.50下
scp id_rsa.pub root@192.168.56.50:/root/.ssh/id_rsa.pub_53
#192.168.56.50服务器上,将50,51,52,53服务器的公钥追加到认证文件中
cat id_rsa.pub id_rsa.pub_51 id_rsa.pub_52 id_rsa.pub_53 >> authorized_keys
#192.168.56.50服务器上,将汇总的公钥认证文件分发到其它节点
scp authorized_keys root@192.168.56.51:/root/.ssh/
scp authorized_keys root@192.168.56.52:/root/.ssh/
scp authorized_keys root@192.168.56.53:/root/.ssh/
#所有节点 验证ssh免密登录,第一次可能需要输入yes,后续不需要输入密码
ssh 192.168.56.50 date
ssh 192.168.56.51 date
ssh 192.168.56.52 date
ssh 192.168.56.53 date

4.6 搭建主从复制(略)

参考第3节 Replication, 另注意如下事项:

#主从节点复制的过滤规则要相同,即binlog_do_db 与 binlog_ignore_db #参数主从配置需要相同
#采用命令方式将从库设为只读,不要将该参数写进配置文件中
mysql -e "set global read_only=1"
#关闭中继日志的清除
mysql -e "set global relay_log_purge=0"

4.7 配置MHA

4.7.1 创建监控用户

create user 'mha'@'%' identified by 'mha';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'%';
flush privileges;

4.7.2 创建配置文件

(1)创建目录

mkdir /mha/app1

(1)编辑配置文件

# vim /mha/app1/app1.cnf
[server default]
#mha manager日志文件
manager_log=/mha/app1/manager.log
#manager工作目录
manager_workdir=/mha/app1
#master节点存放binlog日志路径,以便MHA找到binlog,这里就是MySQL的数据目录
master_binlog_dir=/data/mysql/3306/data
#发生切换时slave节点binlog日志存放路径
remote_workdir=/data/mysql/3306/data
#自动切换脚本
master_ip_failover_script=/usr/local/bin/master_ip_failover
#手动切换脚本
master_ip_online_change_script=/usr/bin/master_ip_online_change
#一旦MHA到51的监控之间出现问题,MHA Manager将尝试从52和53登录到51
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.56.52 -s 192.168.56.53 --user=root --port=22 --master_host=192.168.56.51 --master_port=3306
#监控主节点时间间隔
ping_interval=3
#设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
#shutdown_script=""
#数据库监控用户
user=mha
password=mha
#复制用户
repl_password=repl
repl_user=repl
#ssh登录用户
ssh_user=root
[server1]
hostname=192.168.56.51
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.56.52
port=3306
[server3]
hostname=192.168.56.53
port=3306

可以从从模板中拷贝后更改

cp /usr/local/mha4mysql-manager-0.58/samples/conf/app1.cnf  /mha/
app1.cnf  #是对某个复制组的配置文件。
masterha_default.cnf #MHA manager的全局配置文件,可以通过这一个配置文件管理多个复制组

4.7.1 检查状态

masterha_check_ssh  --conf=/mha/app1/app1.cnf
masterha_check_repl --conf=/mha/app1/app1.cnf

如出现错误:

Bareword "FIXME_xxx" not allowed while "strict subs" in use at /etc/mha/script/master_ip_failover line 100.

[^bug]: 注释掉 FIXME_xxx;

4.8 启动HMA Manager 监控

#查看MHA manager监控状态,这里没有运行
masterha_check_status --conf=/mha/app1/app1.cnf
#app1 is stopped(2:NOT_RUNNING).
#启动MHA监控 --remove_dead_master_conf --ignore_last_failover
nohup  masterha_manager --conf=/mha/app1/app1.cnf --remove_dead_master_conf --ignore_last_failover  &
#稍等片刻,出现提示:
#app1 (pid:29512) is running(0:PING_OK),master:192.168.56.51 
# 停止MHA监控
masterha_stop --conf=/mha/app1/app1.cnf

4.9 检查日志

[root@localhost app1]# tail -f  /mha/app1/manager.log
 +--192.168.56.53(192.168.56.53:3306)
Fri Aug 23 10:09:30 2019 - [info] Checking master_ip_failover_script status:
Fri Aug 23 10:09:30 2019 - [info]   /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.56.51 --orig_master_ip=192.168.56.51 --orig_master_port=3306
Fri Aug 23 10:09:30 2019 - [info]  OK.
Fri Aug 23 10:09:30 2019 - [warning] shutdown_script is not defined.
Fri Aug 23 10:09:30 2019 - [info] Set master ping interval 3 seconds.
Fri Aug 23 10:09:30 2019 - [info] Set secondary check script: /usr/local/bin/masterha_secondary_check -s 192.168.56.52 -s 192.168.56.53 --user=root --port=22 --master_host=192.168.56.51 --master_port=3306
Fri Aug 23 10:09:30 2019 - [info] Starting ping health check on 192.168.56.51(192.168.56.51:3306)..
Fri Aug 23 10:09:30 2019 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..

​ Ping(SELECT) succeeded ,整个系统监控正常开始了。

4.10 定时清理中继日志

4.10.1 创建清理脚本

# vim purge_relay_log.sh 
#!/bin/bash
#数据库用户名密码端口
user=root
passwd='Yxc@3306'
port=3306
#脚本日志存放路径
log_dir='/mha/app1'
#指定创建relay log的硬链接的位置,默认是/var/tmp。由于系统不同分区创建硬链接文件会失败,故需要执行硬链接具体位置,成功执行脚本后,硬链接的中继日志文件被删除。
work_dir='/mha'
#删除中继日志脚本
purge='/usr/local/bin/purge_relay_logs'
if [ ! -d $log_dir ]
then
   mkdir $log_dir -p
fi
#--disable_relay_log_purge :默认情况下,如果relay_log_purge=1,脚本会什么都不清理,自动退出。通过设定这个参数,当relay_log_purge=1的情况下会将relay_log_purge设置为0。清理relay log之后,最后将参数设置为OFF。
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1

4.10.2 授权

chmod a+x purge_relay_log.sh

4.10.3 创建定时任务

00 03 * * * /bin/bash /root/purge_relay_log.sh

4.11 keepalievd 配置VIP

4.12 Failover测试验证

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI