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集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。
环境准备
服务器名称ip承担角色系统
MHA manager192.168.52.132mha-monitorcentos 7主机服务192.168.52.33mastercentos 7从机服务1192.168.52.135slave-1centos 7从机服务(备选主)2192.168.52.135slave-2centos 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
ssh
-copy
-id
-i
/root
/.ssh
/id_rsa
.pub
-p
22 root
@192.168.52.135
ssh
-copy
-id
-i
/root
/.ssh
/id_rsa
.pub
-p
22 root
@192.168.52.136
剩下三台服务器做相同操作
MHA安装
wget https:
wget https:
node 安装
yum install
-y perl
-DBD
-MySQL ncftp perl
-DBI
.x86
rpm
-ivh mha4mysql
-node
-0.58-0.el7
.centos
.noarch
.rpm
manager 软件包安装 manager就是我们的monitor监控,只需要在manager服务上安装,注意安装之前也需要下载依赖
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]
user=mha
password
=mharoot
manager_workdir
=/opt
/mysql_mha
manager_log
=/opt
/mysql_mha
/manager
.log
remote_workdir
=/opt
/mysql_mha
ssh_user
=root
repl_user
=root
repl_password
=root
ping_interval
=1
master_binlog_dir
=/var
/lib
/mysql
[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
检测主从复制环境
masterha_check_repl
后台启动
nohup masterha_manager
-conf
=/opt
/mhaconfig
/mysql_mha
.cnf
&> /opt
/mysql_mha
/log
/manager
.log
&
查看状态
masterha_check_status
如果正常启动,这步是没问题的,提示信息 Ping:OK
故障演示
未完。。。。。