ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MHA架构部署

2020-12-23 14:30:08  阅读:146  来源: 互联网

标签:架构 log 部署 MHA master slave mha 节点


一、

**简介
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
  MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。

二、

**MHA 服务
MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):
MHA Manager:
  通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个 master/slave 集群称作一个 application,用来管理统筹整个集群。
MHA node:
  运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。
  主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲 node 就是用来收集从节点服务器上所生成的 bin-log 。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。
在这里插入图片描述

由上图我们可以看出,每个复制组内部和 Manager 之间都需要ssh实现无密码互连,只有这样,在 Master 出故障时, Manager 才能顺利的连接进去,实现主从切换功能。

话不多说,开始部署:

关闭防火墙

systemctl stop firewalld
setenforce 0

配置ssh连接

每一台都要做无秘链接

ssh-keygen
ssh-copy-id  root@192.168.150.206
ssh-copy-id  root@192.168.150.207
ssh-copy-id  root@192.168.150.208
ssh-copy-id  root@192.168.150.209

MySQL主从搭建

主节点
yum -y install mariadb mariadb-server

vim /etc/my.cnf
  server-id = 1				#集群中的各节点的id不能重复,必须唯一
  log-bin = mysql-log		#开启二进制日志
  relay-log = mysql-relay 	#开启中继日志
	
systemctl restart mariadb

部署两台slave

yum -y install mariadb mariadb-server

vim /etc/my.cnf
[mysqld]
server-id = 2              	 #集群中的各节点的id不能重复,必须唯一
relay-log = mysql-relay   	 #开启中继日志
log-bin = mysql-log          #开启二进制日志
read_only = ON               #启用只读属性
relay_log_purge = 0          #是否自动清空不再需要中继日志
log_slave_updates = 1        #更新的数据写进二进制日志中

systemctl restart mariadb
yum -y install mariadb mariadb-server

vim /etc/my.cnf
[mysqld]
server-id = 3              	 #集群中的各节点的id不能重复,必须唯一
relay-log = mysql-relay   	 #开启中继日志
log-bin = mysql-log          #开启二进制日志
read_only = ON               #启用只读属性
relay_log_purge = 0          #是否自动清空不再需要中继日志
log_slave_updates = 1        #更新的数据写进二进制日志中

systemctl restart mariadb

一主多从

1)master操作

grant all on *.* to 'tom'@'%' identified by '123'; #授权用户
flush privileges; #刷新权限
show master status; #查看master的状态

2)两台slave操作

stop slave;
change master to master_host='192.168.150.206', master_user='tom', master_password='123', master_log_file='mysql-log.000003', master_log_pos=442;
start slave;
show slave status \G;

两台都是双yes,那就说明主从成功了

配置MHA

在manager配置

yum -y install perl-DBD-MySQL epel-release
yum -y install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm

在其余三个节点上配置

yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

在master上授权:

grant all on *.* to 'mhaadmin'@'%' identified by '123';
flush privileges;

定义MHA配置文件

mkdir -p /etc/mha
mkdir -p /var/log/mha/app1
vim /etc/mha/app1.cnf

[server default]
user=mhaadmin	#mha用户
password=123	#mha密码
manager_log=/var/log/mha/app1/manager	#日志路径
manager_workdir=/var/log/mha/app1		#工作路径
master_binlog_dir=/var/lib/mysql
ping_interval=2
repl_user=tom		#数据库用户
repl_password=123	#数据库密码
ssh_user=root		#ssh登录用户

#slave配置
[server1]
hostname=192.168.150.206
port=3306

[server2]
hostname=192.168.150.207
port=3306

[server3]
hostname=192.168.150.208
port=3306

本步骤完成后开始检测各节点间 ssh 互信通信配置是否 ok
我们在 Manager 机器上输入下述命令来检测

masterha_check_ssh --conf=/etc/mha/app1.cnf

检测MySQL复制集群的连接配置参数

masterha_check_repl --conf=/etc/mha/app1.cnf

如果出错,在master重新授权一下

grant all on *.* to 'tom'@'%' identified by '123';
flush privileges;

然后在执行以上命令

启动MHA

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

查看master节点

masterha_check_status --conf=/etc/mha/app1.cnf

去master节点停止mysql看是否自动slave机变为master

systemctl stop mariadb

已经切换主从
借鉴博客:https://blog.csdn.net/weixin_51886255/article/details/111573325

标签:架构,log,部署,MHA,master,slave,mha,节点
来源: https://blog.csdn.net/m0_52057075/article/details/111588206

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有