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软件由两部分组成,Manager工具包和Node工具包,manager就是我们架构中说的monitor,node相当于监控节点,后续每台mysql机器上都需要装。
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信息
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
搭建MHA 高可用结构之前,我们先搭建好主从环境,这里采用的是一主两从的方式,这里主要说下配置。
# 开启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
#配置主机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
# 开启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;
这里注意备选主机也需要设备,授权复制权限,在主备切换后使用
show master status;
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;
主从搭建完成、验证主从是否成功,这里不做赘述。
首先关闭个服务器防火墙;
//关闭防火墙
systemctl stop firewalld
//启动关闭防火墙
systemctl disable firewalld.service
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
剩下三台服务器做相同操作
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
// 安装依赖
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
//安装依赖的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
// 授权
grant all privileges on *.* to 'mha'@'%' identified by 'mharoot';
// 刷新权限
flush privileges;
mkdir -p /opt/mysql_mha/
每个node节点都需要创建
/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配置的环境
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
如对本文有疑问, 点击进行留言回复!!
荐 嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)
SpringBoot项目部署到服务器之 Liunx环境安装jdk详细步骤
网友评论