1-MHA集群概述_、_部署MHA集群_测试配置

MHA简介
1、mha是一个软件,master high availability
2、MHA是用perl脚本写的
3、是一套优秀的实现mysql高可用的解决方案
4、数据库的自动故障切换操作能做到在0~30秒之内
5、MHA能确保在故障切换过程中保证数据的一致性,以达到真正意义上的高可用

MHA组成
1、MHA Manager(管理节点)
(1)可以单独部署在一台独立的机器上,管理其他节点
(2)也可以部署在一台slave节点上

2、MHA Node(数据节点)
(1)运行在每台mysql服务器上
(2)中继日志文件默认只保留最新的两个

MHA工作过程
1、由manager定时检测集群中的master节点
2、当master故障时,manager自动将拥有最新数据的slave提升为新的master

关键点

  1. 从宕机崩溃的master保存二进制日志事件
  2. 识别含有最新更新的slave
  3. 应用差异中的中继日志到其他的slave
  4. 应用从master保存的二进制日志事件
  5. 提升一个slave为新的master
  6. 使其它的slave连接新的master进行复制

Manager节点提供的命令工具

命令 作用
master_check_ssh 检查MHA的SSH配置状况
Master_check_repl 检查masql复制状况
masterha_manager 启动MHA
master_check_status 检测MHA运行状态
master_check_monitor 检测master是否宕机

MHA集群环境准备

51~53   主数据库服务器,共用一个浮动IP,其中一台坏了,另一台顶上去做主数据库服务器
56       监控51~53的健康状况,
54、55   纯从数据库服务器,备份数据
配置ssh密钥对认证登陆,所有节点之间互相以root秘钥对认证登录

角色 IP地址 主机名
客户端 192.168.4.50 client50
Master主节点服务器 192.168.4.51 master51
备用1主节点服务器 192.168.4.52 master52
备用2主节点服务器 192.168.4.53 master53
第一台slave服务器 192.168.4.54 slave54
第二台slave服务器 192.168.4.55 slave55
MHA_manager服务器 192.168.4.56 mgm56
VIP 192.168.4.100

搭建MHA

准备集群环境

1)修改主机名,配置IP(这里以master51为例)
echo master51  > /etc/hostname
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.51/24 connection.autoconnect yes
nmcli connection up eth0

2) 在所有主机上安装Perl依赖包(51-56操作)
cd mysql/mha-soft-student/
yum -y install  perl-*.rpm

3)在所有数据库服务器上安装mha-node包(51-55操作)
yum  -y  install  perl-DBD-mysql  perl-DBI
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

4)在管理主机上安装mha_node 和 mha-manager包(56操作),且必须先装mha-node
yum -y  install perl-DBD-mysql   perl-DBI
rpm -ivh  mha4mysql-node-0.56-0.el6.noarch.rpm
yum -y  install perl-ExtUtils-*   perl-CPAN-*
tar -zxf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56/
perl  Makefile.PL   // 这是perl脚本编写的,perl的源码安装过程
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI                   ...loaded. (1.627)
- DBD::mysql            ...loaded. (4.023)
- Time::HiRes           ...loaded. (1.9725)
- Config::Tiny          ...loaded. (2.14)
- Log::Dispatch         ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst        ...loaded. (0.56)
*** Module::AutoInstall configuration finished.         //配置完成
Checking if your kit is complete...
Looks good
Writing Makefile for mha4mysql::manager
Writing MYMETA.yml and MYMETA.json
make && make  install

配置ssh密钥对认证登陆

1)所有节点之间可以互相以ssh密钥对方式认证登陆以(以51为例)
ssh-keygen
ssh-copy-id  192.168.4.52
//除了传给52外,53,54,55也要传,52-55主机也是一样的

2)配置56主机 无密码ssh登录所有数据节点主机
ssh-keygen
ssh-copy-id  192.168.4.51
//除传给51外,还要传给52-55

配置MHA集群环境

配置主节点         master51     一主多从
配置两个备用主节点 master52、master53
配置两个从节点     slave54、slave55
配置管理节点       mgm56

1)安装数据库(51-55同样操作,以51为例)
cd /root/mysql
tar -xf mysql-5.7.17.tar
yum -y install perl-JSON
rpm -Uvh mysql-community-*.rpm
rpm -qa | grep  -i mysql

2)master51 数据库服务器配置文件
vim /etc/my.cnf
server_id=51                         // 指定数据库id
log-bin=master51                     // 指定日志前缀
binlog-format="mixed"                // 指定日志类型
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 = off                 //  关闭自动删除中继日志
systemctl  restart  mysqld
//添加主从同步授权用户
grant replication slave on  *.* to repluser@"%"  identified by "123456";
show master status;

3)master52和 master53数据库服务器配置文件
//配置文件的设置同master51 注意修改server_id
vim /etc/my.cnf
systemctl  restart  mysqld
mysql -u root -p123456
change master to
master_host="192.168.4.51",
master_user="repluser",
master_password="123456",
master_log_file="master51.000003",
master_log_pos=441;
start slave;
show slave status\G;

4)slave54 和 slave55数据库服务器配置文件
vim /etc/my.cnf
server_id=54
//也可以开启只作为从库的半同步复制
plugin_load=”rpl_semi_sync_master=semisync_master.so”
rpl_semi_sync_slave_enabled=1
systemctl  restart  mysqld
mysql -u root -p123456
change master to
master_host="192.168.4.51",
master_user="repluser",
master_password="123456",
master_log_file="master51.000003",
master_log_pos=441;
start slave;
show slave status\G;

5)配置管理主机4.56
修改主配置文件
mkdir /etc/mha         //创建工作目录,路径和文件名随意
cp 源码文件目录/samps/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 
//主库IP地址故障切换脚本      主库IP地址故障切换脚本存放路径
ssh_user=root                       //指定ssh用户和端口
ssh_port=22
repl_user=repluser                   //指定主从授权的用户名及密码
repl_password=123456
user=root                           //指定数据库用户和密码(监视用户)
password=123456

[server1]
hostname=192.168.4.51
port=3306
candidate_master=1   //竞选主库

[server2]
hostname=192.168.4.52
port=3306
candidate_master=1

[server3]
hostname=192.168.4.53
port=3306
candidate_master=1

[server4]
hostname=192.168.4.54
no_master=1       //不竞选主库

[server5]
hostname=192.168.4.55
no_master=1

2.根据配置文件修改内容做相应设置
在主库中授权root为all
在备选主库中查询
select host,user from mysql.user where host=”%” and user=”root”
cp master_ip_failover  /etc/mha  //将脚本拷贝到 /etc/mha
chmod 755 /etc/mha/master_ip_failover  //修改vip并添加权限
ifconfig eth0:1 192.168.4.100/24  // 在主库中临时配置vip

验证配置
在管理节点上做ssh检查
master_check_ssh --conf=/etc/mha/app1.cnf

在管理节点上查看集群状态
master_check_repl --conf=/etc/mha/app1.cnf

启动管理服务MHA_Manager
masterha_manager --conf=/etc/mha_manager/app1.cnf \
--remove_dead_master_conf –ignore_last_failover

查看状态(新开一个终端)
masterha_check_status --conf=/etc/mha_manager/app1.cnf

停止服务
masterha_stop --conf=/etc/mha_manager/app1.cnf
posted @ 2026-03-27 11:29  立勋  阅读(4)  评论(0)    收藏  举报