今天继续给大家介绍MySQL的相关知识,本文主要内容是MySQL MHA高可用的实战配置。
使用Vmware虚拟机,搭建实战场景下MySQL MHA高可用架构,一共使用4态虚拟机,相关信息如下:
Manager:192.168.136.11
Master:192.168.136.12
Slave1:192.168.136.13
Slave2:192.168.136.14
MySQL MHA的安装需要一些依赖数据包,因此,在进行软件安装时,请确保系统上已经安装配置好了EPEL的源。
在MHA数据节点上,首先安装MySQL MHA的依赖环境,执行命令:
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken
之后,上传在官网上下载的RPM数据节点安装包,上传后安装即可。
在MHA管理节点上,首先也是安装MySQL MHA的依赖环境,但是在管理节点上的依赖包要比数据节点多4个,执行命令:
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN -y
之后,MHA的管理节点要首先安装MHA的数据节点,然后再安装管理节点的数据包,因此,我们要在官网上下载MHA管理节点的安装包,并且将其与数据节点的安装包同时传送到设备上去,先安装MHA数据节点的安装包,然后再安装MHA管理节点的安装包,这样,管理节点就也配置完成了。
之后,由于MHA的manager节点需要在各个数据库之间互相登录,因此,我们需要配置四台设备两两之间的SSH之间互相配置SSH免密登录,执行命令:
ssh-keygen -t rsa
ssh-copy-id 【目标IP地址】
将之前生成的SSH密钥,传递给目标设备上。
在完成上述步骤之后,我们接下来就可以搭建MySQL主从同步了,过程和步骤如下所示:
在MySQL主库上,需要声明二进制日志名称、server-id以及允许同步和不允许同步的数据库,如下所示:
log-bin=master
server-id=1
binlog-do-db=mha
binlog-ignore-db=mysql
validate-password=off
与之前配置的MySQL主从同步不同,在本次配置中,MySQL从库也需要指定允许同步的和不允许同步的数据库,并且必须与MySQL主库保持一致,否则MHA在检查时会报错,其次,因为从库有可能被提升为主库,因此也必须要开启二进制日志,最后,为了使得MySQL从库也记录MySQL主库的同步的日志,配置文件如下所示:
server-id=2
log-bin=slave1
binlog-do-db=mha
binlog-ignore-db=mysql
log_slave_updates=1
validate-password=off
在完成上述配置,并且在两个MySQL从库上都看到两个进程yes之后,我们就可以进行MHA的配置了,首先,我们要先创建MySQL MHA的配置文件和日志文件,执行命令:
mkdir -p /var/mysql_mha
创建MHA的工作目录,之后,创建MySQL的配置文件/etc/mysql_mha.conf,并写入如下内容:
[server default]
manager_log=/var/log/mysql_mha.log
manager_workdir=/var/mysql_mha
master_binlog_dir=/var/lib/mysql
password=mha
ping_interval=1
remote_workdir=/tmp
repl_password=mha
repl_user=root
ssh_user=root
user=mha
[server1]
hostname=192.168.136.11
port=3306
[server2]
candidate_master=1
hostname=192.168.136.13
port=3306
[server3]
hostname=192.168.136.14
port=3306
上述文件各参数作用如下:
在[server default]模块中,manager_workerdir主要用于设置manager的工作目录;manager_log用于设置MHA的日志文件;master_binlog_dir用于指定MySQL主库上二进制文件的存放位置,以便MHA找到二进制日志,这里即是MySQL的工作目录;user和password是MHA用于监控各个MySQL设备所使用的用户名和密码;remote_workdir为远端mysql在发生切换时二进制日志的保存位置,repl_user和repl_password为在进行主从同步时的用户名和密码;ssh_user为设置SSH登录时的用户名。
在各个[server]模块中,hostname为设备的IP地址,port为设备的端口号。
在完成上述操作后,还要在两个MySQL从库设备上,分别执行如下SQL命令:
set global read_only=1
set global relay_log_purge=0
第一条命令为将该MySQL数据库设置为只读,之所以采用命令执行的方式而不是写入配置文件中,是考虑到该MySQL数据库有可能将来升级为MySQL主库,因此方便修改,第二条命令是设置MySQL从库的中继日志不自动清空。在默认情况下,该功能打开,即在SQL进程完成中继日志的读取后,会自动清空中继日志的内容,但是,在MHA场景下,由于该设备的中继日志有可能在故障转移时用于数据恢复,因此必须保留数据信息,不可以被清空,因此会执行第二条命令将其关闭。
同时,还要在MySQL三台主、从设备上配置MHA的管理用户信息,即授权mha用户,验证密码为mha,该信息必须与MHA管理节点的配置相符合。在三台设备上执行的命令为:
grant all on *.* to 'mha'@'192.168.136.%' identified by 'mha';
在上述所有过程都完成后,我们接下来就可以开启MHA监控功能,并且验证我们配置的结果了。
首先,我们来检查一下SSH设置是否正常,执行命令:
masterha_check_ssh --conf=/etc/mysql_mha.conf
–conf参数的文件是刚才我们在MHA管理节点上的配置文件。
执行结果如下所示:
最后发现有“ALL SSH connection tests passed successfully”,即说明SSH链接没有问题,如果存在故障,请返回第三章进行配置。
在SSH链接正常之后,我们需要检验MySQL主从同步复制的情况,执行命令:
masterha_check_repl --conf=/etc/mysql_mha.sql
执行结果如下:
可以看到,最终如果是“MySQL Replication Health is OK”,则表示检查成功!
上述操作完成后,我们接下来开启MHA,执行命令:
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
–remove_dead_master_conf参数表示当发生主从切换后,老的MySQL主库的IP会从配置文件中移除;–manager_log指名了日志存放位置。在缺省状态下,如果MHA检测到连续宕机,且两次宕机的时间间隔不足8小时,则不会进行故障转移。事实上,每次在设备宕机后,MHA都会生成一个文件来进行表示,–ignore_fast_failover参数表示忽略上一次宕机产生的文件,使得该默认配置不生效。
由于我们最后使用了&符号进行后台运行,因此,我们在执行该命令后,会得到一个进程号。
之后,我们可以查看MHA架构的状态,执行命令:
masterha_check_status --conf=/etc/mysql_mha.conf
执行结果如下:
可以看出,最后为msql_mha is running,说明我们的MySQL MHA架构启动成功!
最后,我们来模拟以下MySQL主库发生故障,来检验一下MHA的作用。人工停止MySQL主库相关配置,等待一段时间后,发现其中一台设备(192.168.136.13)自动称为主库,如下所示:
与此同时,另一台设备自动指向新的MySQL主库,如下所示:
最后,我们来查看一下MHA管理节点上的日志,发现有如下的切换记录:
可以看出,MHA架构作用发挥正常,配置成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200