MySQL之MHA+keepalived方案演示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之MHA+keepalived方案演示相关的知识,希望对你有一定的参考价值。
一、配置MHA工作环境
192.168.2.130机器操作:
1.1.创建MHA的工作目录,并且创建相关配置文件
(在软件包解压后的目录里面有样例配置文件)。指的是可以下载 mha4mysql-manager-0.56.tar.gz解压后找到样例配置文件
[[email protected] ~]# ifconfig eth1|awk -F ‘[ :]+‘ ‘NR==2{print $4}‘
192.168.2.130
[[email protected] ~]# ll /usr/bin/masterha*
-rwxr-xr-x 1 root root 1995 Apr 1 2014 /usr/bin/masterha_check_repl
-rwxr-xr-x 1 root root 1779 Apr 1 2014 /usr/bin/masterha_check_ssh
-rwxr-xr-x 1 root root 1865 Apr 1 2014 /usr/bin/masterha_check_status
-rwxr-xr-x 1 root root 3201 Apr 1 2014 /usr/bin/masterha_conf_host
-rwxr-xr-x 1 root root 2517 Apr 1 2014 /usr/bin/masterha_manager
-rwxr-xr-x 1 root root 2165 Apr 1 2014 /usr/bin/masterha_master_monitor
-rwxr-xr-x 1 root root 2373 Apr 1 2014 /usr/bin/masterha_master_switch
-rwxr-xr-x 1 root root 5171 Apr 1 2014 /usr/bin/masterha_secondary_check
-rwxr-xr-x 1 root root 1739 Apr 1 2014 /usr/bin/masterha_stop
[[email protected] ~]# cp -arp /usr/bin/masterha_* /usr/local/bin/
[[email protected] bin]# cd /usr/bin/
[[email protected] bin]# find ./ -name apply_diff_relay_logs
./apply_diff_relay_logs
[[email protected] bin]# find ./ -name filter_mysqlbinlog
./filter_mysqlbinlog
[[email protected] bin]# find ./ -name purge_relay_logs
./purge_relay_logs
[[email protected] bin]# find ./ -name save_binary_logs
./save_binary_logs
cp /usr/bin/save_binary_logs /usr/local/bin/
cp /usr/bin/purge_relay_logs /usr/local/bin/
cp /usr/bin/filter_mysqlbinlog /usr/local/bin/
cp /usr/bin/apply_diff_relay_logs /usr/local/bin/
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
[[email protected] bin]# cd /usr/local/bin/
You have new mail in /var/spool/mail/root
[[email protected] bin]# ls
apply_diff_relay_logs filter_mysqlbinlog masterha_check_ssh masterha_conf_host masterha_master_monitor masterha_secondary_check save_binary_logs
masterha_check_repl masterha_check_status masterha_manager masterha_master_switch masterha_stop purge_relay_logs
MHA配置文件如下
[[email protected] ~]# mkdir -p /etc/masterha
[[email protected] ~]# cat /etc/masterha/app1.cnf
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1.log
master_binlog_dir=/data/mysql/logs/bin-log
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=123456
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=repmha
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
shutdown_script=""
ssh_port=12570
ssh_user=root
user=monitor
[server1]
hostname=192.168.2.128
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.2.129
port=3306
[server3]
hostname=192.168.2.130
port=3306
1.2配置文件参数介绍:
[[email protected] ~]# cat /etc/masterha/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/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的登录用户名
ssh_port=12570 //设置ssh的登录端口。默认是22
[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
注意:
##master_ip_failover_script= /usr/local/bin/master_ip_failover
MHA的Failover两种方式:一种是虚拟IP地址,一种是全局配置文件。MHA并没有限定使用哪一种方式,而是让用户自己选择,虚拟IP地址的方式会牵扯到其它的软件,比如keepalive软件,而且还要修改脚本
master_ip_failover。
所以先暂时注释master_ip_failover_script= /usr/local/bin/master_ip_failover这个选项。后面引入keepalived后和修改该脚本以后再开启该选项
二、设置relay log的清除方式(在每个slave节点上):
2.1三个节点服务器本地hosts解析
[[email protected] ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.128 server02
192.168.2.129 server03
192.168.2.130 server04
在slave master03 192.168.2.129操作:
[[email protected] ~]# mysql -uroot -p123456 -e "set global relay_log_purge=0"
mysql: [Warning] Using a password on the command line interface can be insecure.
[[email protected] ~]#
在slave master04 192.168.2.130操作:
[[email protected] ~]# mysql -uroot -p123456 -e "set global relay_log_purge=0"
mysql: [Warning] Using a password on the command line interface can be insecure.
[[email protected] ~]#
注意:
MHA在发生切换的过程中,从库的恢复过程中依赖于relay log的相关信息,所以这里要将relay log的自动清除设置为OFF,采用手动清除relay log的方式。在默认情况下,从服务器上的中继日志会在SQL线程执行完毕后被自动删除。但是在MHA环境中,这些中继日志在恢复其他从服务器时可能会被用到,因此需要禁用中继日志的自动删除功能。定期清除中继日志需要考虑到复制延时的问题。在ext3的文件系统下,删除大的文件需要一定的时间,会导致严重的复制延时。为了避免复制延时,需要暂时为中继日志创建硬链接,因为在linux系统中通过硬链接删除大文件速度会很快。(在mysql数据库中,删除大表时,通常也采用建立硬链接的方式)
2.2设置定期清理relay脚本(两台slave服务器):
在slave sever03 192.168.2.129操作:
[[email protected] ~]# cat /data/scripts/purge_relay_log.sh
#!/bin/bash
user=root
passwd=123456
port=3306
log_dir=‘/data/masterha/log‘
work_dir=‘/data‘
purge=‘/usr/local/bin/purge_relay_logs‘
if [ ! -d $log_dir ]
then
mkdir $log_dir -p
fi
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>
在slave server04 192.168.2.130操作跟上面是一样的,这里不演示了。
脚本中参数介绍:
--user mysql //用户名
--password mysql //密码
--port //端口号
--workdir //指定创建relay log的硬链接的位置,默认是/var/tmp,由于系统不同分区创建硬链接文件会失败,故需要执行硬链接具体位置,成功执行脚本后,硬链接的中继日志文件被删除
--disable_relay_log_purge //默认情况下,如果relay_log_purge=1,脚本会什么都不清理,自动退出,通过设定这个参数,当relay_log_purge=1的情况下会将relay_log_purge设置为0。清理relay log之后,最后将参数设置为OFF。
purge_relay_logs脚本删除中继日志不会阻塞SQL线程。下面我们手动执行看看什么情况:
[[email protected] ~]# purge_relay_logs --user=root --password=123456 --port=3306 -disable_relay_log_purge --workdir=/data/
2018-07-01 11:53:16: purge_relay_logs script started.
Found relay_log.info: /data/mysql/relay-log.info
Opening /data/mysql/logs/relay-log/relay-bin.000001 ..
Opening /data/mysql/logs/relay-log/relay-bin.000002 ..
Executing SET GLOBAL relay_log_purge=1; FLUSH LOGS; sleeping a few seconds so that SQL thread can delete older relay log files (if it keeps up); SET GLOBAL relay_log_purge=0; .. ok.
2018-07-01 11:53:20: All relay log purging operations succeeded.
[[email protected] ~]#
以上是关于MySQL之MHA+keepalived方案演示的主要内容,如果未能解决你的问题,请参考以下文章