欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql MHA 环境搭建

程序员文章站 2022-03-26 14:49:10
Mysql MHA 环境搭建基础架构环境准备MHA 工作原理Mysql主从环境搭建Master 主机配置slave 1从机配置slave 2 从机配置(备选主)主从设置MHA 搭建(坑很多)各服务之间配置ssh互认(免登陆认证)MHA安装配置MHAmha检查故障演示基础架构MHA(Master High Availability) 有 MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一*立的机器上管理多个master-slave集群,也可以部署在一...

基础架构

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

Mysql MHA 环境搭建

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;

Mysql MHA 环境搭建

  • 设置 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;

Mysql MHA 环境搭建
主从搭建完成、验证主从是否成功,这里不做赘述。

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

Mysql MHA 环境搭建

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

Mysql MHA 环境搭建

  • 后台启动
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
Mysql MHA 环境搭建

故障演示

未完。。。。。

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