前言
MySQL服务器中,单台服务器无法承载服务量就配置多台MySQL服务器 多台MySQL服务器或者MySQL服务器无冗余的情况下,配置主从复制 MySQL服务器的读和写的压力不均衡使用MySQL的读写分离 MySQL的读写分离中Msater存在单点故障,就用到了MHA,也就是本篇会详细介绍的高可用
一、MHA概述
1.1、简介
- 主要是为了解决msater只有一台,若master出现故障时就使用MHA解决单点故障问题
- 一套优秀的MySQL高可用环境下故障切换和主从复制的软件
- MySQL故障过程中,MHA能做到0-30秒内自动完成故障切换
1.2、MHA的组成(性能、组件)
-
MHA Manager (管理节点)可以借助于node组件,实现健康检查(ssh、主从复制)、控制故障切换
-
MHA Node 组件(数据节点)部署在所有MySQL服务器内;主要作用:定时汇报给主manager节点,mysql服务的状态监控本地mysql服务功能主从复制架构:主从复制(一主多从) ; MHA架构(多主多从) ; MMM架构(双主多从)
1.3、特点
-
自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
-
自动故障切换过程的本质
-
故障切换(本质VIP漂移)
-
自动(使用脚本触发自动)
-
-
使用半同步复制,可以大大降低数据丢失的风险
1.4、总结
MHA为了解决的是故障切换,数据尽可能的保存,以及所有节点日志的一致性
当主宕机,提升从服务器为master服务器的机制
- 先取出bin-log和relay-log相差的日志值,如上图是相差100M的日志;即预选
- 择优;mster 1000M多个slave 980 900 920;即优选
二、搭建MySQL-MHA
2.1、实验环境
MHA-manager:192.168.35.30 管理节点,安装manager组件与node组件 MySQL服务器:只要用来调控与调用
| 角色 | ip |
|---|---|
| MHA-manager | 192.168.35.30 |
| master | 192.168.35.40 |
| slave1 | 192.168.35.10 |
| slave2 | 192.168.35.20 |
定义节点服务器名称:
hostnamectl set-hostname manager
su
hostnamectl set-hostname master
su
hostnamectl set-hostname slave1
su
hostnamectl set-hostname slave2
su
2.2、mysql服务器配置
2.2.1、配置主从复制
需要注释掉从服务器配置文件/etc/my.cnf内的character_set_server=utf8
2.2.2、所有库配置软链接
ln -s /usr/local/mysql/bin/mysql /usr/sbin ##优化管理 mysql命令
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin ##节点恢复
2.2.3、所有数据库提权
grant replication slave on *.* to 'myslave'@'192.168.35.%' identified by '123';
grant all privileges on *.* to 'mha'@'192.168.35.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'master' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';
set global read_only=1; ##不会对超级管理员super生效,普通用户
flush privileges;
测试:验证从服务器只读功能
msater端创建数据表ss
use zyt;
create table ss(id int);
只读功能验证 在slave1服务器上
mysql -umyslave -p123 -h 192.168.35.40 -P 3306
这时slave1创建数据库gggg,报错提示只读,无法创建
2.3、配置MHA
2.3.1、安装epel源
在所有服务器上安装MHA依赖环境,首先安装epel源,只有安装了源perl才会有
yum install epel-release --nogpgcheck -y ##安装epel源,并且不进行gph检查
yum install -y perl-DBD-MySQL \ ##perl针对于mysql数据库
perl-Config-Tiny \ ###从配置文件中提拿其中的值
perl-Log-Dispatch \ ##log-日志
perl-Parallel-ForkManager \ ##子进程的函数,多线程管理模式
perl-ExtUtils-CBuilder \ ###扩展工具
perl-ExtUtils-MakeMaker \ ###扩展工具
perl-CPAN ##cpan perl中的数据库
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
MHA 软件包对于每个操作系统版本不一样,这里Centos7.4必须选择0.57版本 在所有服务器上必须先安装node组件,最后在MHA-manager节点上安装manager组件 因为manager依赖node组件
2.3.2、所有服务器同步阿里云时间
[root@master bin]# ntpdate ntp.aliyun.com
20 Jul 19:34:27 ntpdate[60181]: adjust time server 203.107.6.88 offset 0.002699 sec
[root@master bin]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@master bin]#
[root@master bin]# crontab -l
*/10 * * * * /usr/sbin/ntpdate ntp.aliyun.com
2.3.3、所有服务器安装node组件
当前目录上传node压缩包、上传manager压缩包
tar zxvf mha4mysql-node-0.57.tar.gz -C /root
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
2.3.4、在MHA节点上安装manager组件
tar xf mha4mysql-manager-0.57.tar.gz -C /root
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
2.3.5、检测manager和node
manager 安装后在/usr/local/bin目录下会生成几个工具,主要包括以下:
masterha-check_ssh 检查MHA的SSH配置状况(免交互)
masterha_check_repl 检查MySQL复制状况
masterha_manager 启动manager的脚本
masterha_check_status 检查当前MHA运行状态
masterha_master_monitor 检查master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
masterha_stop 关闭manager
node 安装后也会在/usr/local/bin目录下生成几个脚本,需要进行检查,主要包括以下
save_binary_logs #保存和复制master的二进制日志
apply_diff_relay_logs #识别差异的中继日志时间,并将其差异的事件应用于其他的slave;filter:过滤
filter_mysqlbinlog #去除不必要的ROLLBACK回滚事件(MHA 已不适用这个工具)
purge_relay_logs #清除中继日志(不会阻塞 SQL线程)
master宕机之后,slave1主备顶上,实现方式:vip虚拟ip漂移到slave1
2.4、配置无密码认证
2.4.1、在mannager上配置到所有数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.35.10
ssh-copy-id 192.168.35.20
ssh-copy-id 192.168.35.30
ssh-copy-id 192.168.35.40
2.4.2、模拟master宕机,查看master的变化
master配置虚拟网卡VIP192.168.35.100
systemctl stop mysqld ##msater服务器停止mysql服务
masterha_check_status --conf=/etc/masterha/app1.cnf ##manager服务器查看master节点变为slave1:192.168.35.10
查询原slave1的状态,已切换成master
查询slave的状态,master的ip已切换成原slave1
此时slave1上可以查询到设置的vip,已漂移成功
查看当前日志信息,可以看到详细过程 tail -f /var/log/masterha/app1/manager.log
2.5、Master故障修复
- 修复db(原master)
原的master现在变成slave,取消同步的,增加中继日志的内容
vim /etc/my.cnf
log_bin=master-bin
#log_slave=updates=true
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
systemctl start mysqld
- 修复主从(在原master数据库中输入)
systemctl start mysqld ##开启服务,进入数据库,修复的master
change master to master_host='192.168.35.10',master_user='myslave',master_password='123',master_log_file='master-bin.000004',master_log_pos=154;
start slave;
set global read_only=1;
flush privileges;
slave2需要更新二进制日志起点**
stop slave;
change master to master_host='192.168.35.10',master_user='myslave',master_password='123',master_log_file='master-bin.000004',master_log_pos=154;
flush privileges;
start slave;
show slave status\G;
修改MHA的配置文件(再把这个记录添加进去,因为它检测到失效时候会自动消失
---->wq保存配置文件
测试免密和主从
masterha_check_repl -conf=/etc/master
三、总结
-
MHA主要是为了解决msater只有一台,若master出现故障时就使用MHA解决单点故障问题
-
组件:
-
MHA Manager (管理节点)
-
可以借助于node组件,实现健康检查(ssh、主从复制)、控制故障切换
-
MHA Node 组件(数据节点):
部署在所有MySQL服务器内;主要作用: 定时汇报给主manager节点,mysql服务的状态 监控本地mysql服务功能 配置步骤 实验环境:四台服务器,一台master,二台slave,一台MHA(在MHA节点上安装manager组件 )
①:首选需要三台服务器配置主从复制
②:所有服务器上的数据库提权,针对四个用户(myslave、mha、master、slave1、slave2)
③:所有服务器配置ssh免密认证
④:在mysql服务器上设置监控用户
⑤:修改manager的配置文件master_ip_failover和app1.cnf
⑥:在MHA上测试免密和主从服务
⑦:后台启动MHA
⑧:验证(模拟master宕机,查看master的变化)