MYSQL搭配MHA实现高可用
1、环境软件版本
环境&软件 | 版本 |
---|---|
虚拟机&VMware Workstation | 15 |
服务器&CentOS | 7 |
数据库&Mysql | 5.7.28 |
远程连接&FinalShell | 1.0 |
MHA | 0.5.8 |
2、环境架构
机器名称 | IP | 角色 | 权限 |
---|---|---|---|
Win1 | 192.168.41.128 | 数据库Master | 读写 |
Win2 | 192.168.41.129 | 数据库Slave | 读 |
Win3 | 192.168.41.130 | 数据库Slave | 读 |
Win4 | 192.168.41.131 | MHA Manager | 高可用监控 |
3、Mysql主从搭建
4、MHA高可用搭建
-
四台服务器ssh互通
在四台服务器上分别执行下面命令,生成公钥和私钥(注意:连续按换行回车采用默认值)
ssh-keygen -t rsa
在三台MySQL服务器分别执行下面命令,密码输入系统密码,将公钥拷到MHA Manager服务器上
ssh-copy-id 192.168.41.131
之后可以在MHA Manager服务器上检查下,看看.ssh/authorized_keys文件是否包含3个公钥
cat /root/.ssh/authorized_keys
执行下面命令,将MHA Manager的公钥添加到authorized_keys文件中(此时应该包含4个公钥)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
从MHA Manager服务器执行下面命令,向其他三台MySQL服务器分发公钥信息
scp /root/.ssh/authorized_keys root@192.168.41.128:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@192.168.41.129:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@192.168.41.130:/root/.ssh/authorized_keys
可以MHA Manager执行下面命令,检测下与三台MySQL是否实现ssh互通
ssh 192.168.41.128 exit ssh 192.168.41.129 exit ssh 192.168.41.130 exit
-
MHA下载安装
MHA下载
MySQL5.7对应的MHA版本是0.5.8,所以在GitHub上找到对应的rpm包进行下载,MHA manager和node的安装包需要分别下载:
https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58 https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58
也可以使用wget命令在linux系统直接下载获取,例如
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
下载后,将Manager和Node的安装包分别上传到对应的服务器。(可使用WinSCP等工具)
- 三台MySQL服务器需要安装node
- MHA Manager服务器需要安装manager和node
MHA node安装
在四台服务器上安装mha4mysql-node。
MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。
yum install perl-DBD-MySQL -y wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
MHA manage安装
在MHA Manager服务器安装mha4mysql-node和mha4mysql-manager。
MHA的manager又依赖了perl-Config-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别 进行安装。
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
提示:由于perl-Log-Dispatch和perl-Parallel-ForkManager这两个被依赖包在yum仓库找不到, 因此安装epel-release-latest-7.noarch.rpm。在使用时,可能会出现下面异常:Cannot retrieve metalink for repository: epel/x86_64。可以尝试使 用/etc/yum.repos.d/epel.repo,然后注释掉metalink,取消注释baseurl。
MHA配置文件
MHA Manager服务器需要为每个监控的 Master/Slave 集群提供一个专用的配置文件,而所有的Master/Slave 集群也可共享全局配置。
初始化配置目录
#目录说明 #/var/log # /mha # /app1 (CentOS目录) (MHA监控根目录) (MHA监控实例根目录) /manager.log (MHA监控实例日志文件) mkdir -p /var/log/mha/app1 touch /var/log/mha/app1/manager.log
配置监控全局配置文件
vim /etc/masterha_default.cnf
[server default] #主库用户名,在master mysql的主库执行下列命令建一个新用户 #create user 'mha'@'%' identified by '123123'; #grant all on *.* to mha@'%' identified by '123123'; #flush privileges; user=mha password=123123 port=3306 ssh_user=root repl_user=root repl_password=root port=3306 ping_interval=1 secondary_check_script=masterha_secondary_check -s 192.168.41.128 -s 192.168.41.129 -s 192.168.41.130
配置监控实例配置文件
先使用 mkdir -p /etc/mha 命令创建目录,然后使用 vim /etc/mha/app1.cnf 命令编辑文文件
[server default] #MHA监控实例根目录 manager_log=/var/log/mha/app1/manager.log #MHA监控实例日志文件 manager_workdir=/var/log/mha/app1 #[serverx] 服务器编号 #hostname 主机名 #candidate_master 可以做主库 #master_binlog_dir binlog日志文件目录 [server1] candidate_master=1 hostname=192.168.41.128 master_binlog_dir="/usr/local/mysql/mysql-5.7.28/data/" [server2] candidate_master=1 hostname=192.168.41.129 master_binlog_dir="/usr/local/mysql/mysql-5.7.28/data/" [server3] candidate_master=1 hostname=192.168.41.130 master_binlog_dir="/usr/local/mysql/mysql-5.7.28/data/"
MHA配置检查
执行ssh通信检查
在MHA Manager服务器上执行:
masterha_check_ssh --conf=/etc/mha/app1.cnf
检测MySQL主从复制
在MHA Manager服务器上执行:
masterha_check_repl --conf=/etc/mha/app1.cnf
出现“MySQL Replication Health is OK.”证明MySQL复制集群没有问题
MHA manage启动
在MHA Manager服务器上执行:
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
查看监控状态命令如下:
masterha_check_status --conf=/etc/mha/app1.cnf
查看监控日志命令如下:
tail -f /var/log/mha/app1/manager.log
5、测试MHA故障转移
-
模拟主节点崩溃
在MHA Manager服务器执行打开日志命令:
tail -f /var/log/mha/app1/manager.log
关闭Master MySQL服务器服务,模拟主节点崩溃
service mysql stop
查看MHA日志,可以看到哪台slave切换成了master
查看新的主节点信息
show master status;
-
测试SQL脚本
create TABLE position ( id int(20), name varchar(50), salary varchar(20), city varchar(50) ) ENGINE=innodb charset=utf8; insert into position values(1, 'Java', 13000, 'shanghai'); insert into position values(2, 'DBA', 20000, 'beijing'); create TABLE position_detail ( id int(20), pid int(20), description text ) ENGINE=innodb charset=utf8; insert into position_detail values(1, 1, 'Java Developer'); insert into position_detail values(2, 2, 'Database Administrator');