①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)
②识别含有最新更新的slave
③应用差异的中继日志(relay log)到其他的slave
④应用从master保存的二进制日志事件(binlog events)
⑤提升一个slave为新的master
⑥使其他的slave连接新的master进行复制
MHA软件由两部分组成,Manager工具包和Node工具包
①Manager工具包主要包括以下几个工具:
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 故障转移(自动或手动)
masterha_conf_host 添加或删除配置的server信息
masterha_stop --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用
②Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs #保存和复制master的二进制日志
apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog #去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)
③MHA配置文件:
global配置,为各application提供默认配置,默认文件路径 /etc/masterha_default.cnf
application配置:为每个主从复制集群
①实验环境:
MHA服务器:192.168.30.14
master: 192.168.30.11
slave1: 192.168.30.12
slave2: 192.168.30.13
②首先将MHA客户端安装包(node包)、服务器安装包(manger包)及master_ip_failover脚本上传到主MHA服务器,master和slave服务器只需要上传客户端安装包(node包),上传到root用户家目录下。本人博客资源中(MHA高可用实战部署包)
③安装MHA
MHA:
yum install epel-release.noarch -y
#有依赖性用yum安装需要先安装epel源
yum -y install mha4mysql-*.rpm
#安装MHA
Master和2个slave:
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
#安装MHA
④MHA配置免密登录建立mha 文件夹 和配置文件
ssh-keygen
#生成秘钥,4个回车
ssh-copy-id 127.0.0.1
#自己和自己实现免密钥登录
rsync -a .ssh 192.168.30.11:/root/
rsync -a .ssh 192.168.30.12:/root/
rsync -a .ssh 192.168.30.13:/root/
#将秘钥传给所有服务器,-a表示保留权限,rsync可以理解为scp
mkdir /etc/mastermha
#创建mha文件夹
vim /etc/mastermha/app1.cnf
#配置app1.cnf文件,内容全部删除复制以下内容
[server default]
user=mhauser
password=Admin@123
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=test
repl_password=Admin@123
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
#report_script=/usr/local/bin/sendmail.sh 可以不加
check_repl_delay=0
master_binlog_dir=/data/mysql/
[server1]
hostname=192.168.30.11
candidate_master=1
[server2]
hostname=192.168.30.12
candidate_master=1
[server3]
hostname=192.168.30.13
#注意将3个server改为自己的地址,1为主2位备用主,3为从。保存退出
vim master_ip_failover
#修改mha脚本,只需要将拷贝的脚本此2行修改即可,其他无须操作
my $vip = '192.168.30.188/24';
#设置自己网段的Virtual IP
my $gateway = '192.168.30.2';
#自己网段的网关Gateway IP 保存退出
mv master_ip_failover /usr/local/bin/
chmod +x /usr/local/bin/master_ip_failover
#脚本文件文件剪切到/usr/local/bin/目录下并添加可执行权限使其可以执行
ifconfig ens33:1 192.168.30.188/24
#MHA配置虚拟ip,主挂掉后虚拟ip到备主上
⑤准备主从复制环境
Master执行:
vim /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=100
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log
#添加完毕保存退出
mkdir /data/mysql/ -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
show master status;
#查看记录二进制日志位置,一会从配置使用
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.30.%' identified by 'Admin@123';
#建立mha管理账户
2个slave执行:
vim /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=102
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
skip_name_resolve=1
general_log
mkdir /data/mysql/ -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
CHANGE MASTER TO
MASTER_HOST='192.168.30.11',
MASTER_USER='test',
MASTER_PASSWORD='Admin@123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
#配置master信息
start slave
#开启主从复制
show slave status;
#查看配置是否成功
⑥MHA服务器上检查 mha 环境并启动mha
masterha_check_ssh --conf=/etc/mastermha/app1.cnf
#检查mha的ssh免密登录环境
All SSH connection tests passed successfully
#结尾行出现此信息表示无问题
masterha_check_repl --conf=/etc/mastermha/app1.cnf
#检查mha主从环境
MySQL Replication Health is OK.
#结尾行出现此信息表示无问题
masterha_check_status --conf=/etc/mastermha/app1.cnf
#查看mha状态,默认是停止状态stop
masterha_manager --conf=/etc/mastermha/app1.cnf
#开启mha,需要等待较长时间启动成功,此过程为前台运行,需要重新开一个窗口去查看状态即可
masterha_check_status --conf=/etc/mastermha/app1.cnf
#重新查看状态是running
⑦关闭master的mysql查看是否备1成为主且备2的slave信息变为备2的且备1的slave信息为空
master:
systemctl stop mysqld
#主关闭mysql
slave1:
mysql -uroot -p'Admin@123'
#登录数据库
show slave status;
#slave信息为空
slave2:
mysql -uroot -p'Admin@123'
#登录数据库
show slave status;
#slave信息中Master_Host:变为slave1的ip地址
##注意就算重新开启master的数据库也不会成为主,需要手动添加为slave。