文章目录

  • MHA集群(MySQL服务高可用集群)
    • MHA简介
    • MHA工作过程
    • 拓扑结构
    • 部署MHA集群
      • 集群环境准备
        • 1.安装依赖包
        • 2.配置ssh密钥对认证登录
        • 3.配置一主多从同步结构
      • 配置管理节点(192.168.4.57)
        • 1.安装软件包
        • 2.相关命令
        • 3.编写主配置文件
        • 4.修改故障切换脚本,指定VIP地址
      • 配置数据节点(数据库服务器51、52、53)
        • 1.把VIP地址192.168.4.100 配置在主服务器192.168.4.51上,并在所有数据节点安装mha_node包
        • 2.添加授权用户(主服务51)
        • 3.在52和53添加同步数据的连接用户
        • 4.在从库上启用binlog日志文件
        • 5.在所有数据库服务器设置禁止自动删除本机的中继日志文件
        • 6.在所有数据库服务器启用半同步复制模式
        • 7.重启所有数据库的MySQL服务,并查看主从同步是否正常
      • 验证配置
        • 1.验证ssh配置
        • 2.验证MySQL主从同步配置
        • 3.启动管理服务
      • 测试集群的高可用功能
        • 1.在主服务器添加访问数据的连接用户
        • 2.在客户端连接VIP地址访问数据
        • 3.模拟主服务器故障
        • 4.恢复故障服务器

MHA集群(MySQL服务高可用集群)

MHA简介

MHA(Maste High Availability)

  • 由日本DeNA公司youshimaton开发
  • 是一套优秀的实现MySQL高可用的解决方案
  • 数据库的自动故障切换操作能做到在0~30秒之内完成
  • MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义的高可用

MHA组成

  • MHA Manager(管理节点)

    • 管理所有数据库服务器
    • 可以单独部署在一台独立的机器上
    • 也可以部署在某台数据库服务器上
  • MHA Node(数据节点)
    • 存储数据的MySQL服务器
    • 运行咋每台MySQL服务器上

MHA工作过程

具体如下

  • 由manager 定时探测集群中的master节点
  • 当master故障时,manager自动将拥有最新数据的slave提升为新的master

拓扑结构

ip规划

IP地址 主从同步角色 集群角色 主机名
192.168.4.3 客户端 mysql
192.168.4.51 主库 当前主库 sql1
192.168.4.52 从库 备用主库 sql2
192.168.4.53 从库 备用主库 sql3
192.168.4.57 管理主机 mgm57
192.168.4.100 VIP地址

拓扑图:

VIP地址再那一台服务器上客户端就访问到哪一个数据库服务器

部署MHA集群

集群环境准备

本次实验所使用的环境为centos7.9,mysql5.7.35,mha0.58

1.安装依赖包

因为MHA这个软件使用perl语言编写的,所以需要perl环境

#在所有主机上安装系统自带的perl软件包
yum -y install perl-*
#接下来安装系统没有的依赖包
yum -y install epel-release perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager   perl-Email-Date-Format perl-Mail-Sender perl-Mail-Sendmail perl-MIME-Types perl-MIME-Lite
#最好把这个命令执行两遍,因为其中的一些包,需要在安装了某些包之后才能安装

2.配置ssh密钥对认证登录

  • 管理主机可以无密码连接所有数据库服务器
  • 数据库服务器彼此之间无密码连接
#先配置57管理主机的密钥对
#192.168.4.57(管理主机)
ssh-keygen   #使用最简单的无密码公钥,三下回车选择默认
ssh-copy-id root@192.168.4.51
ssh-copy-id root@192.168.4.52
ssh-copy-id root@192.168.4.53

测试57管理无密码登录

#数据库服务器彼此之间无密码连接
#192.168.4.51
ssh-keygen
ssh-copy-id root@192.168.4.52
ssh-copy-id root@192.168.4.53
#192.168.4.52
ssh-keygen
ssh-copy-id root@192.168.4.51
ssh-copy-id root@192.168.4.53
#192.168.4.53
ssh-keygen
ssh-copy-id root@192.168.4.51
ssh-copy-id root@192.168.4.52

测试


3.配置一主多从同步结构

配置主库51

vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=master51systemctl restart mysqld
mysql -uroot -p123456
grant replication slave on *.* to repluser@"%" identified by "123456";
show master status;

配置从库52、53

#192.168.4.52
vim /etc/my.cnf
[mysqld]
server_id=52systemctl restart mysqld
mysql -uroot -p123456
change master to
master_host="192.168.4.51",
master_user="repluser",
master_password="123456",
master_log_file="master51.000002",
master_log_pos=441;
start slave;
show slave status \G;#192.168.4.53
vim /etc/my.cnf
[mysqld]
server_id=53systemctl restart mysqld
mysql -uroot -p123456
change master to
master_host="192.168.4.51",
master_user="repluser",
master_password="123456",
master_log_file="master51.000002",
master_log_pos=441;
start slave;
show slave status \G;


配置管理节点(192.168.4.57)

1.安装软件包

安装包下载地址:

mha官网:https://code.google.com/archive/p/mysql-master-ha/

github下载地址

https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58

https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

这里也准备了资源,大家可以去下载:mha4mysql

#192.168.4.57
yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
# node 必须先安装,manager的安装必须有node环境
tar -zxvf mha4mysql-manager-0.58.tar.gz
#为了演示多种安装方法,这里直接使用解压缩,解开提前打包好的程序,也可以使用yum去安装
#因为这个软件使用perl编写所以和一些软件的安装有些许不同
cd mha4mysql-manager-0.58
perl Makefile.PL   #Makefile.PL 是这个软件的配置,检测你当前的依赖是否完整
#运行之后,如果这些依赖后面没有版本号,说明该依赖未安装
make
make install
#这个软件会提供masterha_这个命令

如果是依赖没有安装导致的报错,删掉这个目录,安装依赖之后重新解压就行

2.相关命令

管理集群命令

命令 作用
masterha_check_ssh 检查MHA的SSH配置情况
masterha_check_repl 检查MySQL复制情况
masterha_manager 启动MHA
masterha_check_status 检测MHA运行状态
masterha_stop 停止MHA

3.编写主配置文件

  • 模板文件

    • mha4mysql-manager-0.58/samples/conf/app1.cnf
#因为这个软件不是rpm安装,所以剩下的配置(如工作目录)需要我们自己去配置
mkdir /etc/mha
cp /root/mha4mysql-manager-0.58/samples/conf/app1.cnf /etc/mha
vim /etc/mha/app1.cnf
[server default]    #管理服务的配置
manager_workdir=/etc/mha    #服务的工作目录
manager_log=/etc/mha/manager.log #服务运行之后的日志
master_ip_failover_script=/etc/mha/master_ip_failover  #故障切换脚本
ssh_user=root    #访问ssh服务的用户
ssh_port=22   #目标ssh服务端口 repl_user=repluser     #主服务器数据同步授权用户
repl_password=123456   #密码user=root    #监控用户,管理节点使用root监控数据库服务器
password=123456   #密码[server1]
hostname=192.168.4.51
#port=3306  如果数据库服务器的端口不是3306就需要单独指出来,如果是3306就可以不用写
candidate_master=1   #51参与主服务的竞选[server2]
hostname=192.168.4.52
candidate_master=1[server3]
hostname=192.168.4.53
candidate_master=1

4.修改故障切换脚本,指定VIP地址

  • 模板文件

    • mha4mysql-manager-0.58/samples/scripts/master_ip_failover
cp /root/mha4mysql-manager-0.58/samples/scripts/master_ip_failover /etc/mha
#如果没有x权限,请加上x权限
vim /etc/mha/master_ip_failover
....
my ($command,        $ssh_user,         $orig_master_host,$orig_master_ip, $orig_master_port, $new_master_host,$new_master_ip,  $new_master_port,  $new_master_user,$new_master_password);#下面这四行需要我们去添加 #位置在35行左右my $vip='192.168.4.100/24';  #使用的VIP虚拟地址my $key="1";   #给key变量赋值为1my $ssh_start_vip ="/usr/sbin/ifconfig ens33:$key $vip";  #定义一个变量名为ssh_start_vip,执行本机sbin/ifconfig ens33这个命令#当我们执行这个命令时,把这个VIP部署在ens33这张网卡上my $ssh_stop_vip ="/usr/sbin/ifconfig ens33:$key down";  #这个命令作用与ssh_start_vip作用相反,当主服务器发生故障,使用这个把主服务器的VIP停止

配置数据节点(数据库服务器51、52、53)

1.把VIP地址192.168.4.100 配置在主服务器192.168.4.51上,并在所有数据节点安装mha_node包

ifconfig ens33:1 192.168.4.100/24
ifconfig ens33:1
#192.168.4.51
yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
#192.168.4.52
yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
#192.168.4.53
yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm

2.添加授权用户(主服务51)

在管理节点的配置文件中提到管理节点使用root监控服务器,这里我们授权这个远程root,root默认只能在本机登录

#192.168.4.51
mysql -uroot -p123456 -e 'grant all on *.* to root@"%" identified by "123456"'   #监控用户
#因为现在是主从结构,在主库添加即可,其他从库会自动同步

3.在52和53添加同步数据的连接用户

51如果发生故障,52提升为主库,这时就要52有同步数据的能力,这时给他添加同步数据的连接用户,53同理

#192.168.4.52
mysql -uroot -p123456 -e 'grant replication slave on *.* to repluser@"%" identified by "123456" '
#192.168.4.53
mysql -uroot -p123456 -e 'grant replication slave on *.* to repluser@"%" identified by "123456" '
#这里的用户和密码必须与管理主机的配置文件中书写的一致

4.在从库上启用binlog日志文件

在52、53启用binlog

5.在所有数据库服务器设置禁止自动删除本机的中继日志文件

默认保留最新的两个中继日志

6.在所有数据库服务器启用半同步复制模式

详细的半同步复制模式的配置请看MySQL的同步模式

#192.168.4.51
vim /etc/my.cnf
[mysqld]
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1   #启用半同步复制模式
relay_log_purge=0   #禁止自动删除本机的中继日志文件
#192.168.4.52
vim /etc/my.cnf
[mysqld]
server_id=52
log-bin=master52
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
relay_log_purge=0
#192.168.4.53
vim /etc/my.cnf
[mysqld]
server_id=52
log-bin=master53
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
relay_log_purge=0

7.重启所有数据库的MySQL服务,并查看主从同步是否正常

systemctl restart mysqld
mysql -uroot -p123456 -e 'show slave status \G'


验证配置

以下验证都在管理节点验证

1.验证ssh配置

masterha_check_ssh --conf=/etc/mha/app1.cnf
#指定配置文件位置,当验证全为ok说明ssh配置没有问题,如果出现问题,请检查自己的ssh配置

2.验证MySQL主从同步配置

masterha_check_repl --conf=/etc/mha/app1.cnf

这里题主就出现了一个问题,

[error][/root/perl5/lib/perl5/MHA/ServerManager.pm, ln492] Server 192.168.4.52(192.168.4.52:3306) is dead, but must be alive! Check server settings.

经过检查,这里出现问题的原因是数据库的防火墙没有关

再次测试

Failed to get master_ip_failover_script status with return code 255:0.

这次的问题,是由于脚本中信息的冲突

解决方案

屏蔽掉冲突信息

信息大概在97行
vim /etc/mha/master_ip_failover
...
# FIXME_xxx;

再次测试

出现MySQL Replication Health is OK,说明我们的配置没有错误

接下来介绍以下这几个参数

Dead Servers:   #死亡服务器,本次检测没有
Alive Servers:   #活跃的服务器有哪些
Alive Slaves:   #活跃的从服务器

3.启动管理服务

在启动服务之前先查看VIP是否部署成功部署成功才能进行下述操作

#192.168.4.51
ifconfig ens33:1
#192.168.4.57(管理节点)
masterha_check_status --conf /etc/mha/app1.cnf  #查看状态masterha_manager --conf /etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover# --remove_dead_master_conf  删除宕机主库的配置# --ignore_last_failover  任何时间出现错误都会进行切换

再开启一个终端,在再次查看状态

这次可以看出我们已经成功启动,监控主机为192.168.4.51.

测试集群的高可用功能

1.在主服务器添加访问数据的连接用户

#192.168.4.51
mysql -uroot -p123456
create database testdb;
create table testdb.id(id int);
grant select,insert on testdb.* to tom@"%" identified by "123456";
#在两台从服务器查看是否添加成功
mysql -uroot -p123456 -e "select user,host from mysql.user"



2.在客户端连接VIP地址访问数据

 mysql -utom -p123456 -h 192.168.4.100
select * from testdb.id;
insert into testdb.id values(10);
select * from testdb.id;

3.模拟主服务器故障

模拟故障的方法

  • 停止mysql服务
  • 关机
#192.168.5.51
systemctl stop mysqld

当我们把主服务器关掉以后,管理节点连接不到主服务器的3306端口,就会判定主服务发生故障,把51的服务停止,触发故障切换脚本,这个脚本把VIP地址重新部署到新选举的主服务器上

这时候在我们管理节点的日志信息就会发生变化

执行完成以后就会跳出,这时,他的服务会自动停止

#查看51的VIP
ifconfig ens33:1
#在剩余的两台服务器中查看VIP在谁那,谁就是新的主
ifconfig ens33:1
#在53上查看是否切换成功
mysql -uroot -p123456 -e "show slave status \G"



由图可以看出VIP漂移成功,和切换故障数据库成功

客户端经过短暂延迟之后重新恢复数据访问

4.恢复故障服务器

#首先恢复故障数据库的服务
#192.168.4.51
systemctl start mysqld
#然后把51配置为主服务器的从库
#在配置之前,首先要进行数据库数据的恢复,防止在故障期间,有新收据的写入
mysql -uroot -p123456
change master to
master_host="192.168.4.52",
master_user="repluser",
master_password="123456",
master_log_file="master52.000004",
master_log_pos=154;
start slave;
show slave status \G;


接下来在管理节点57重新把51添加进去

#先停止服务
masterha_stop --conf=/etc/mha/app1.cnf
vim /etc/mha/app1.cnf
[server default]
manager_log=/etc/mha/manager.log
manager_workdir=/etc/mha
master_ip_failover_script=/etc/mha/master_ip_failover
password=123456
repl_password=123456
repl_user=repluser
ssh_port=22
ssh_user=root
user=root[server2]
candidate_master=1
hostname=192.168.4.52[server3]
candidate_master=1
hostname=192.168.4.53[server1]
candidate_master=1
hostname=192.168.4.51
#重新测试并启动
masterha_manager --conf /etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover

没有报错就说明恢复的没有问题

MySQL之MHA集群的详细教程相关推荐

  1. 二进制安装部署 4 kubernetes集群---超详细教程

    二进制安装部署kubernetes集群---超详细教程 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以 ...

  2. Hadoop 2.0集群配置详细教程

    Hadoop 2.0集群配置详细教程 前言 Hadoop2.0介绍 Hadoop是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop ...

  3. MySQL 部署MHA集群部署

    目录 MySQL 部署MHA集群部署 MHA集群概述 MHA介绍 MHA简介 MHA组成 MHA工作过程 MHA集群架构 MHA工作过程 拓扑结构 IP规划 拓扑图 部署MHA集群 准备集群环境 安装 ...

  4. mysql配置MHA集群

    ** 本文针对Mysql–MHA集群搭建.vip配置及宕机之后数据库和manager恢复做记录** 搭建环境: 用4台服务器塔尖Mysql-MHA集群 服务器版本:CentOS 7.6 1.192.1 ...

  5. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  6. 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程

    大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:今天总结一下Redis集群高可用的搭建流程 [惊喜推荐+优质资源 ...

  7. 搭建Hadoop分布式集群的详细教程

    目录 写在前面 一.创建虚拟机,安装Centos 二.VMware VMnet8模式共享主机网络配置 三.克隆集群节点HadoopSlave1与HadoopSlave2 四.Linux系统配置 五.H ...

  8. Hadoop2.8集群安装详细教程

    https://mp.weixin.qq.com/s/WsSP9oeis0uFcDhBp3r0Vg 一.网络及主机名配置 1.修改主机名 [root@master /]# vi /etc/hostna ...

  9. 搭建etcd 3.4.15集群(详细教程,包括选举过程、数据备份和恢复)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  10. k8s双节点集群搭建详细教程

    K8S v1.13.0 集群搭建 环境 两台centos主机: Master:192.168.11.112 主机名:k8s-master Node:192.168.11.111 主机名:k8s-nod ...

最新文章

  1. 增强for循环_增强for循环实际用法
  2. Hibernate中通过annotaion配置SQLServer的存储过程
  3. 笔记整理-信息系统开发基础-软件测试-模糊测试
  4. C++ vector容器中常见的三种遍历方式
  5. FFMPEG中H.264的算法文档--整理自ffmpeg论坛等
  6. 智慧职教云答案在哪里找_职教云网课答案在线查询,职教云答案查询,智慧职教云答案在哪里找到...
  7. 一文看懂华为鸿蒙 OS 2.0
  8. 多米诺骨牌(洛谷-P1282)
  9. 如何解决linux标准输出中带颜色的字符
  10. 【水果识别】基于matlab GUI HSV+RGB水果分类【含Matlab源码 380期】
  11. java 获取图片后缀_java 自动识别图片文件类型 图片后缀 图片类型
  12. vue3 + ts + EsLint + Prettier 规范代码
  13. github 免费图床
  14. React - 红绿灯
  15. Pandas初体验——头歌平台答案
  16. 电脑进不了系统的情况下如何重装win7,电脑无法开机如何重装win7
  17. Opencv开发笔记(三):使用形态学滤波对图像进行边缘及角点检测
  18. Eclipse IDE的使用
  19. shell小技巧(十一)打印下面这句话中字母数不大于6的单词
  20. Mybatis概念以及源码分析

热门文章

  1. linux 串口驱动解析之2440
  2. c语言两位数码管动态显示,十天学会单片机和c语言编程数码管动态显示.pptx
  3. [ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)...
  4. 智能变电站基本原理和IEC61850
  5. 离散数学-第八章图论及其应用
  6. python读取同花顺数据_python爬取同花顺数据
  7. BackTrack3(BT3破解wifi密码)
  8. macOS 输入法快速切换工具 —— KeyboardHolder
  9. 英文地址以及英文地址中的缩写都是什么意思
  10. Windows类标识符及其妙用