当前位置: 移动技术网 > IT编程>开发语言>Java > Mysql MHA 环境搭建

Mysql MHA 环境搭建

2020年07月09日  | 移动技术网IT编程  | 我要评论

基础架构

MHA(Master High Availability) 有 MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。

环境准备

服务器名称 ip 承担角色 系统
MHA manager 192.168.52.132 mha-monitor centos 7
主机服务 192.168.52.33 master centos 7
从机服务1 192.168.52.135 slave-1 centos 7
从机服务(备选主)2 192.168.52.135 slave-2 centos 7

在这里插入图片描述

MHA 工作原理

MHA软件由两部分组成,Manager工具包和Node工具包,manager就是我们架构中说的monitor,node相当于监控节点,后续每台mysql机器上都需要装。

  • Manager工具包介绍:
masterha_check_ssh              检查MHA的SSH配置状况
masterha_check_repl             检查MySQL复制状况
masterha_manger                 启动MHA
masterha_check_status           检测当前MHA运行状态
masterha_master_monitor         检测master是否宕机
masterha_master_switch          控制故障转移(自动或者手动)
masterha_conf_host              添加或删除配置的server信息
  • Node工具包介绍(这些工具通常由MHA Manager的脚本触发,无需人为操作)
save_binary_logs                保存和复制master的二进制日志
apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs                清除中继日志(不会阻塞SQL线程)

Mysql主从环境搭建

搭建MHA 高可用结构之前,我们先搭建好主从环境,这里采用的是一主两从的方式,这里主要说下配置。

Master 主机配置

# 开启binlog
log-bin=mysql-bin
#  配置主机id
server-id=1
# 每次操作刷入磁盘
sync-binlog=1
# relay_log配置
relay_log=mysql-relay-bin
log_slave_updates=1
relay_log_purge=0
# gtid配置
#开启gtid
gtid_mode=on
enforce_gtid_consistency=1

# 忽略同步的库
binlog-ignore-db=performance_schema
binlog-ignore-db=infomation_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
# 开启半同步
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled=1
loose_rpl_semi_sync_slave_enabled=1
loose_rpl_semi_sync_master_timeout=1000

slave 1从机配置

#配置主机id
server-id=2
# 中继日志name
relay_log=mysql-relay-bin
log_slave_updates=1
relay_log_purge=0
#配置只读权限
read_only=1
#gtid
gtid_mode=on
enforce_gtid_consistency=1
# 忽略同步的库
binlog-ignore-db=performance_schema
binlog-ignore-db=infomation_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql

plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled=1
loose_rpl_semi_sync_slave_enabled=1
loose_rpl_semi_sync_master_timeout=1000

slave 2 从机配置(备选主)

# 开启binlog
log-bin=mysql-bin
# 配置主机id
server-id=3
#中继日志name
relay_log=mysql-relay-bin
log_slave_updates=1
relay_log_purge=0
#配置只读权限
read_only=1
#
#gtid
gtid_mode=on
enforce_gtid_consistency=1
# 忽略同步的库
binlog-ignore-db=performance_schema
binlog-ignore-db=infomation_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql

plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled=1
loose_rpl_semi_sync_slave_enabled=1
loose_rpl_semi_sync_master_timeout=1000

这里需要注意的是第二太从机需要开启binlog,因为后续会做主备切换的备选主机

主从设置

  • 主机授权复制权限
 // 授权远程访问
GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
// 授权操作*(主库授权指定从库)
grant replication slave on *.* to root@'%' identified by 'root' with grant option;
//刷新权限
flush privileges;

这里注意备选主机也需要设备,授权复制权限,在主备切换后使用

  • 查询主节点binlog日志及位点
 show master status;

在这里插入图片描述

  • 设置 slave1、slave2 复制主机;
 change master to master_host='192.168.52.133',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000011',master_log_pos=412;
  • 开启从机复制、状态查看
//开启
start slave;
//状态查看
show slave status\G;

在这里插入图片描述
主从搭建完成、验证主从是否成功,这里不做赘述。

MHA 搭建(坑很多)

首先关闭个服务器防火墙;

//关闭防火墙
systemctl stop firewalld
//启动关闭防火墙
systemctl disable firewalld.service

各服务之间配置ssh互认(免登陆认证)

  • 生成秘钥对
    ssh-keygen
[root@localhost mha]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IYJeNU9gGt2jLUibmZf8Vovr2MZciP7hRqzAzz6NtIY root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|    ..=o.        |
|   ..=.+o        |
|  ..+B.+o.       |
| . .*.*....      |
|  .. . =S+ .     |
|    o o B o      |
|     B X.o       |
|    E X+B.       |
|     oo*=        |
+----[SHA256]-----+

使用ssh-copy-id将秘钥拷贝到各个服务器上,包括当前(自己)服务器,每个服务器都要要拷贝三次 我这里拿mah服务举例
ssh-copy-id -i 上一步秘钥生成的位置 -p ssh登录的端口 usernname@ip地址,下面例子:

ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.52.133  //master
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.52.135  //slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.52.136  //slave2

剩下三台服务器做相同操作

MHA安装

wget https://raw.githubusercontent.com/linyue515/mysql-master-ha/master/mha4mysql-node-0.58-0.el7.noarch.rpm

wget https://raw.githubusercontent.com/linyue515/mysql-master-ha/master/mha4mysql-manager-0.58-0.el7.noarch.rpm
  • node 安装
// 安装依赖
yum install -y perl-DBD-MySQL ncftp perl-DBI.x86
// 安装node 分别在master slave management安装
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  • manager 软件包安装
    manager就是我们的monitor监控,只需要在manager服务上安装,注意安装之前也需要下载依赖
//安装依赖的perl模块
yum install perl-DBD-MySQL -y  

yum install perl-Config-Tiny -y

yum install epel-release -y

yum install perl-Log-Dispatch -y

yum install perl-Parallel-ForkManager -y

yum install perl-Time-HiRes -y

yum install perl-CPAN -y

配置MHA

  • 在master 创建mha management访问权限
// 授权
grant all privileges on *.* to 'mha'@'%' identified by 'mharoot';
// 刷新权限
flush privileges;
  • 在集群所有服务器中都先建立一个mha工作目录(配置文件需要用)
mkdir -p /opt/mysql_mha/

每个node节点都需要创建

  • 主节点(monitor)创建配置文件目录
/opt/mhaconfig/mysql_mha.cnf
  • 配置文件
[server default]
#mha用户 
user=mha
password=mharoot
#工作目录
manager_workdir=/opt/mysql_mha
manager_log=/opt/mysql_mha/manager.log
remote_workdir=/opt/mysql_mha

#SSH 
ssh_user=root
#复制用户
repl_user=root
repl_password=root

ping_interval=1
#binlog地址
master_binlog_dir=/var/lib/mysql
#secondary_check_script=/usr/bin/masterha_secondary_check -s 192.168.52.133 -s 192.168.52.135
[server1]
hostname=192.168.52.133
candidate_master=1
[server2]
hostname=192.168.52.135
no_master=1
[server3]
hostname=192.168.52.136
candidate_master=1

mha检查

配置完成就可以检查mha配置的环境

  • ssh 检测mha ssh 免密配置配置是否正确
masterha_check_ssh --conf=/opt/mhaconfig/mysql_mha.cnf

在这里插入图片描述

  • 检测主从复制环境
masterha_check_repl --conf=/opt/mhaconfig/mysql_mha.cnf

在这里插入图片描述

  • 后台启动
nohup masterha_manager -conf=/opt/mhaconfig/mysql_mha.cnf &> /opt/mysql_mha/log/manager.log &
  • 查看状态
masterha_check_status --conf=/opt/mhaconfig/mysql_mha.cnf

如果正常启动,这步是没问题的,提示信息 Ping:OK
在这里插入图片描述

故障演示

未完。。。。。

本文地址:https://blog.csdn.net/fw19940314/article/details/107118776

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网