赞
踩
①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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。