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方案演示的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之MHA+keepalived方案演示

MySQL之MHA+keepalived方案演示

MySQL之MHA+keepalived方案演示

MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS(下)

MySQL高可用之KeepAlived+双主

MySQL 高可用性之keepalived+mysql双主