前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL实现高可用方案-MHA安装及配置

MySQL实现高可用方案-MHA安装及配置

作者头像
Diuut
发布2022-11-22 20:40:31
9940
发布2022-11-22 20:40:31
举报
文章被收录于专栏:DiuutDiuut

需求 主从配置中如果主服务故障后,主库配置需自动切换至其中一个从库,MHA框架为此实现方案之一

MHA安装

前置环境

三台已经搭建好的MySQL集群,并已配置好主从复制,详细搭建过程可参见上一篇文章

MySQL安装及配置主从复制

安装安装源配置(可选)
代码语言:javascript
复制
yum -y install wget
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
下载MHA软件
代码语言:javascript
复制
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/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
#文章末尾会附上已包含这2个安装包的附件包
安装Node软件以及依赖包(db1,db2,db3)
代码语言:javascript
复制
tar zxf mha-node-dep.tar.gz #node依赖
rpm -ivh node/*
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
#node依赖也可以在线yum安装:yum install perl-DBD-MySQL
安装Manager软件(db3)
代码语言:javascript
复制
#管理节点安装Manager软件
#需要安装依赖
tar zxf mha-manager-dep.tar.gz  #manager依赖
rpm -ivh manager/*
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
#manager依赖也可以在线yum安装:
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManag 
验证manager版本(db3)
代码语言:javascript
复制
masterha_manager  -v
配置ssh免密(db1,db2,db3)
代码语言:javascript
复制
ssh-keygen -t rsa (一路回车)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@db1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@db2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@db3
#三台服务器之间无需密码校验
建立配置文件目录(db3)
代码语言:javascript
复制
mkdir  -p /etc/mha/{conf,log,scripts}
创建配置文件(db3)
代码语言:javascript
复制
vi /etc/mha/conf/mha.cnf
#注意修改里面的ip,路径,用户,密码等(password与repl_password均为mysql密码)
代码语言:javascript
复制
[server default]
manager_log=/etc/mha/log/manager.log
manager_workdir=/etc/mha/log
master_binlog_dir=/data/binlog
#failover和switchover脚本
master_ip_failover_script=/etc/mha/scripts/master_ip_failover
master_ip_online_change_script=/etc/mha/scripts/master_ip_online_change
user=root
password=root321
#配置检查主节点的次数
ping_interval=3
repl_password=rpl321
repl_user=rpl_user
ssh_user=root
# masters
[server1]
hostname=192.168.253.100
port=3306
#cadidate_master为1表示优先考虑此节点转为主节点
candidate_master=1
master_binlog_dir=/data/binlog
remote_workdir=/etc/mha/log
[server2]
hostname=192.168.253.101
port=3306
candidate_master=1
check_repl_delay=0
master_binlog_dir=/data/binlog
remote_workdir=/etc/mha/log
[server3]
hostname=192.168.253.102
port=3306

注意: 配置中引用的脚本在附件里面,需要修改脚本master_ip_failover/master_ip_online_change中的my $vip和my $ifdev,代表vip和网卡名称,并上传到db3目录/etc/mha/scripts/

脚本添加执行权限(db3)
代码语言:javascript
复制
#将脚本文件移到./etc/mha/scripts/中
chmod +x /etc/mha/scripts/* 
dos2unix /etc/mha/scripts/master_ip_failover

脚本中记着修改vip地址以及用户密码,均为后续需要登录的数据库密码,方便切换主从。

ssh免密检查(db3)
代码语言:javascript
复制
masterha_check_ssh --conf=/etc/mha/conf/mha.cnf
. . .
[info] All SSH connection tests passed successfully.
各节点复制情况检查(db3)
代码语言:javascript
复制
masterha_check_repl --conf=/etc/mha/conf/mha.cnf
#Result:Checking the Status of the script.. OK 
#       MySQL Replication Health is OK.

如出现”MySQL Replication Health is NOT OK!“,说明配置有问题

检查manager的状态(db3)
代码语言:javascript
复制
masterha_check_status --conf=/etc/mha/conf/mha.cnf
# mha is stopped(2:NOT_RUNNING).
此处还未启动,停止状态为正常结果。
Master 节点上手动开启虚拟IP(db3)
代码语言:javascript
复制
# 虚拟ip与之前在脚本中配置的保持一直,选用未占用的地址
# 用于切换主从时ip指向最新的主库
/sbin/ip addr add 172.16.53.99/24 dev ens192 label ens192:1(添加)
代码语言:javascript
复制
/sbin/ip addr del 172.16.53.99/24 dev ens192 label ens192:1(删除)(需要时再用)
# 可参考/etc/mha/scripts/master_ip_failover 中的命令,虚拟ip详细地址参选主机同网段空心地址,ens从ifconfig配置中查看本机网卡再填入
启动manager(db3)
代码语言:javascript
复制
nohup masterha_manager --conf=/etc/mha/conf/mha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/log/manager.log 2>&1 &

# 检查日志
tail -f /etc/mha/log/manager.log
...
Ping(SELECT) succeeded, waiting until MySQL doesn't respond.. 
...
再次检查manager状态(db3)
代码语言:javascript
复制
masterha_check_status --conf=/etc/mha/conf/mha.cnf
#mha (pid:20102) is running(0:PING_OK), master:192.168.253.100

主从高可用切换测试(可选)

确认当前主从状态

当前主从状态db1(主)、db2(从)、db3(从)

将db1主节点的mysql进程停掉
代码语言:javascript
复制
systemctl stop mysqld
#如非systemctl启动,可用kill -9 pid 杀死进程
检查manager.log
代码语言:javascript
复制
tail -f /etc/mha/log/manager.log
..
Master failover to 192.168.253.101(192.168.253.101:3306) completed successfully.

#显示主库已切换到db2

再检查/etc/mha/conf/mha.cnf文件

代码语言:javascript
复制
Vi /etc/mha/conf/mha.cnf
发现原来的主节点已被从mha.cnf中删除
检查MHA运行状态
代码语言:javascript
复制
masterha_check_status --conf=/etc/mha/conf/mha.cnf
# 发现mha已被停止
# (一次性 
检查新主节点db2的slave状态

发现新主节点已被reset slave

检查db3节点的slave状态

发现其复制通道变成了db2

手工switchover测试 (可选)

停止当前的mha(db3)
代码语言:javascript
复制
masterha_stop --conf=/etc/mha/conf/mha.cnf
switchover到原来的主节点db1
代码语言:javascript
复制
masterha_master_switch --conf=/etc/mha/conf/mha.cnf --master_state=alive --new_master_host=192.168.253.100 --orig_master_is_new_slave --running_updates_limit=300

详细执行过程略

此处切换时如果报错,一般是脚本文件中的数据库密码输入有误,或者vip未设置;

检查vip,read_only和slave status
代码语言:javascript
复制
ifconfig
mysql> show slave status\G;

#发现vip已漂到db1,read_only和slave status

启动mha并检查状态
代码语言:javascript
复制
nohup masterha_manager --conf=/etc/mha/conf/mha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/log/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/conf/mha.cnf

MHA相关附件

链接: https://pan.baidu.com/s/1AU-gQ9lLeOxMXKexEqK4lQ

提取码: 6k3x

本文章仅用于个人记录及学习参考。

Post Views: 268

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年5月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MHA安装
    • 前置环境
      • 安装安装源配置(可选)
        • 下载MHA软件
          • 安装Node软件以及依赖包(db1,db2,db3)
            • 安装Manager软件(db3)
              • 验证manager版本(db3)
                • 配置ssh免密(db1,db2,db3)
                  • 建立配置文件目录(db3)
                    • 创建配置文件(db3)
                      • 脚本添加执行权限(db3)
                        • ssh免密检查(db3)
                          • 各节点复制情况检查(db3)
                            • 检查manager的状态(db3)
                              • Master 节点上手动开启虚拟IP(db3)
                                • 启动manager(db3)
                                  • 再次检查manager状态(db3)
                                  • 主从高可用切换测试(可选)
                                    • 确认当前主从状态
                                      • 将db1主节点的mysql进程停掉
                                        • 检查manager.log
                                        • 再检查/etc/mha/conf/mha.cnf文件
                                          • 检查MHA运行状态
                                            • 检查新主节点db2的slave状态
                                              • 检查db3节点的slave状态
                                              • 手工switchover测试 (可选)
                                                • 停止当前的mha(db3)
                                                  • switchover到原来的主节点db1
                                                    • 检查vip,read_only和slave status
                                                      • 启动mha并检查状态
                                                      • MHA相关附件
                                                      相关产品与服务
                                                      云数据库 SQL Server
                                                      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                                      领券
                                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档