mysql高可用架构之MHA部署(一)(保姆级)
干货全拿走,照着做就能实现的实验。
【写在前面】
本教程主要实现MHA在mysql主库宕掉的时候由从库顶替,后续会出对应的浮动IP、告警邮件的配置教程。
MHA相关知识见我前面博客MySQL MHA(Master High Availability)高可用方案详解
mysql主从复制知识见我前面博客mysql主从配置(保姆级)
这里mysql主从基于GTID配置的
环境介绍
1、配置MySQL主从复制(基于GTID)
- mysql配置文件
主要关注server_id
不要一致,gtid_mode=ON
,
enforce_gtid_consistency=ON
开启
主库:【10.0.0.60】
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock
server_id=60
port=3306
autocommit=0
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format = ROW # 或 STATEMENT、MIXED
log_bin=/data/mysql/mysql-bin
log_error=/data/mysql/mysql_error.log
slow_query_log = 1
slow_query_log_file = /data/mysql/data/slow.log
long_query_time = 0.1
log_queries_not_using_indexes = 1[mysql]
socket=/data/mysql/mysql.sock[client]
socket=/data/mysql/mysql.sock
从库:【10.0.0.61】
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock
server_id=61
port=3306
autocommit=0
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format = ROW # 或 STATEMENT、MIXED
log_bin=/data/mysql/mysql-bin
log_error=/data/mysql/mysql_error.log
slow_query_log = 1
slow_query_log_file = /data/mysql/data/slow.log
long_query_time = 0.1
log_queries_not_using_indexes = 1[mysql]
socket=/data/mysql/mysql.sock[client]
socket=/data/mysql/mysql.sock
从库:【10.0.0.62】
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock
server_id=62
port=3306
autocommit=0
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format = ROW # 或 STATEMENT、MIXED
log_bin=/data/mysql/mysql-bin
log_error=/data/mysql/mysql_error.log
slow_query_log = 1
slow_query_log_file = /data/mysql/data/slow.log
long_query_time = 0.1
log_queries_not_using_indexes = 1[mysql]
socket=/data/mysql/mysql.sock[client]
socket=/data/mysql/mysql.sock
- 构建主从
master:【10.0.0.60】
slave:【10.0.0.61】【10.0.0.62】
在主节点【10.0.0.60】创建复制用户
登录mysql执行
grant replication slave on *.* to repl@'%' identified by '2544' ;
【10.0.0.61】【10.0.0.62】都执行
登录mysql执行
CHANGE MASTER TOMASTER_HOST='10.0.0.60',MASTER_USER='repl',MASTER_PASSWORD='2544',
MASTER_AUTO_POSITION=1;
- 启动从库复制
mysql>START SLAVE;
- 查看主从复制状态正常
mysql> show slave status\G
返回值中主要查看
...
Master_Host: 10.0.0.60
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主库为10.0.0.60,两个Yes则主从复制部署完成
2、MHA高可用
2.1搭建MHA高可用
(1)配置关键程序——软连接
所有节点都执行
ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql /usr/bin/mysql
(2)配置互信(既免密登录)
也可参考我前面的博客ssh免密登录
在【10.0.0.60】节点操作:
[root@mysql_0 ~]# rm -rf /root/.ssh
[root@mysql_0 ~]# ssh-keygen
[root@mysql_0 ~]# cd /root/.ssh/
[root@mysql_0 .ssh]# mv id_rsa.pub authorized_keys
[root@mysql_0 .ssh]# scp -r /root/.ssh/ 10.0.0.61:/root
[root@mysql_0 .ssh]# scp -r /root/.ssh/ 10.0.0.62:/root
各个节点验证
第一次登录需要yes
【10.0.0.60】
ssh 10.0.0.60 date
ssh 10.0.0.61 date
ssh 10.0.0.62 date
【10.0.0.61】
ssh 10.0.0.60 date
ssh 10.0.0.61 date
ssh 10.0.0.62 date
【10.0.0.62】
ssh 10.0.0.60 date
ssh 10.0.0.61 date
ssh 10.0.0.62 date
3、安装软件包
3.1 安装依赖包
所有节点安装依赖:
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
3.2 安装 MHA 软件(所有节点)
数据库节点安装 node 包(mha4mysql-node-0.58.tar.gz)
下载安装包(可从官网或镜像站获取)
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz[root@mysql_0 tools]# scp mha4mysql-node-0.58.tar.gz 10.0.0.61:/server/tools/
[root@mysql_0 tools]# scp mha4mysql-node-0.58.tar.gz 10.0.0.62:/server/tools/tar zxvf mha4mysql-node-0.58.tar.gz
cd mha4mysql-node-0.58
perl Makefile.PL
————————————————————————————————
报错的话
- 安装CPAN
yum install -y perl-CPAN
- 重新配置 CPAN(首次使用时)
安装完成后,首次运行 CPAN 需初始化配置:
perl -MCPAN -e shell
出现提示时,输入 yes 选择自动配置(默认选项即可)。
配置完成后,输入 quit 退出 CPAN 交互界面。
- 再次执行 MHA 安装命令
回到 MHA 节点包的解压目录,重新运行:
perl Makefile.PL
make && make install
————————————————————————————————
make && make install
【10.0.0.62】上面操作
- 管理节点安装 manager 包
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
tar zxvf mha4mysql-manager-0.58.tar.gz
cd mha4mysql-manager-0.58
perl Makefile.PL
make && make install
安装管理节点会出现很多依赖没法解决,需要一步步排错
——————————————————————————————
有个错误的核心原因是 CPAN 配置的镜像源地址无效,导致无法正常下载
Sub-Quote 模块,进而中断了安装流程。解决方法如下:
- 一、修复 CPAN 镜像源配置(关键步骤)
进入 CPAN 交互模式:
perl -MCPAN -e shell
清除无效的镜像地址,添加正确的阿里云镜像:
先清空现有镜像列表(解决"URL must be absolute"错误)
o conf urllist clear
添加阿里云 CPAN 镜像(确保地址正确)
o conf urllist push http://mirrors.aliyun.com/CPAN/
保存配置
o conf commit
退出 CPAN
quit
- 二、手动下载并安装 Sub-Quote 模块(避免再次下载失败)
如果镜像源配置后仍下载失败,直接手动下载安装:
bash
- 下载模块源码包
wget http://mirrors.aliyun.com/CPAN/authors/id/H/HA/HAARG/Sub-Quote-2.006009.tar.gz
- 解压并安装
tar zxvf Sub-Quote-2.006009.tar.gz
cd Sub-Quote-2.006009
perl Makefile.PL
make && make install
-
返回 MHA 管理节点安装目录
cd … # 回到之前的 mha4mysql-manager-0.58 所在目录
————————————————————————————————— -
三、重新安装 MHA 管理节点
进入 MHA 管理包目录
cd mha4mysql-manager-0.58
清理之前的编译残留
make clean
重新检查依赖并生成 Makefile
perl Makefile.PL
编译安装
make && make install
该过程耗时可能久点,总会结束的,过程中大概显示界面如下
4、配置 MHA 【10.0.0.60】执行
4.1创建管理目录
mkdir -p /etc/mha/mysql_cluster
mkdir -p /var/log/mha/mysql_cluster
4.2 创建配置文件
vim /etc/mha/mysql_cluster.cnf
添加以下内容:
[server default]
#MySQL用户名和密码
user=root
password=2544#SSH用户
ssh_user=root复制用户
repl_user=repl
repl_password=2544#监控时间间隔
ping_interval=2
#日志目录
manager_log=/var/log/mha/mysql_cluster/manager.log
manager_workdir=/var/log/mha/mysql_cluster
master_binlog_dir=/data/binlog[server1]
hostname=10.0.0.60
port=3306[server2]
hostname=10.0.0.61
port=3306
# 可作为候选主库
candidate_master=1 [server3]
hostname=10.0.0.62
port=3306
5、配置 MySQL 权限 【10.0.0.60】执行
在主库
上创建 MHA 所需用户:
- 管理用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '2544';
- 复制用户
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '2544';
FLUSH PRIVILEGES;
6、验证环境【10.0.0.62】执行
- 检查 SSH 免密登录
masterha_check_ssh --conf=/etc/mha/mysql_cluster.cnf
- 检查主从复制
masterha_check_repl --conf=/etc/mha/mysql_cluster.cnf
7、启动 MHA Manager【10.0.0.62】执行
- 启动
nohup masterha_manager --conf=/etc/mha/mysql_cluster.cnf --remove_dead_master_conf --ignore_laster_failover > /var/log/mha/mysql_cluster/manager.log 2>&1 &
参数说明:
nohup masterha_manager \
–conf=/etc/mha/mysql_cluster.cnf \ # 指定 MHA 集群配置文件路径
–remove_dead_master_conf \ # 故障转移后自动移除配置中失效的主库信息
–ignore_laster_failover \ # 忽略最近一次故障转移记录,强制允许再次故障转移
/var/log/mha/mysql_cluster/manager.log 2>&1 & # 日志重定向与后台运行
- 停止
masterha_stop --conf=/etc/mha/mysql_cluster.cnf
8、检查 MHA 状态 【10.0.0.62】执行
masterha_check_status --conf=/etc/mha/mysql_cluster.cnf
9、故障切换测试
- 手动停止主库模拟故障,【10.0.0.60】执行
systemctl stop mysqld
查看切换日志,【10.0.0.62】执行
tail -f /var/log/mha/mysql_cluster/manager.log
可以从MHA日志看到,master已经切换为【10.0.0.61】
或者登录【10.0.0.62】mysql查看
可以看到主节点已经由之前的【10.0.0.60】变为【10.0.0.61】
注意事项
故障切换后,需重新配置 MHA,将新主库加入集群
生产环境建议配置自动发送报警邮件
定期备份数据库,确保数据安全
以上是 MHA 的基本安装部署流程,实际生产环境中需根据具体需求进行调整和优化。
后续会出MHA邮件报警、浮动IP配置