码迷,mamicode.com
首页 > 数据库 > 详细

MHA实现mysql高可用性

时间:2019-05-08 21:57:11      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:int   建立   install   扩展   user   system   服务器   从库   ant   

一、 MHA:Master High Availability
    对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,出于机器成本的考虑,淘宝进行了改造,目前淘宝TMHA已经支持一主一从
官网:https://code.google.com/archive/p/mysql-master-ha/

MHA集群架构

技术图片

1.MHA工作原理:

(1) 从宕机崩溃的master保存二进制日志事件(binlog events)
(2) 识别含有最新更新的slave
(3) 应用差异的中继日志(relay log)到其他的slave
(4) 应用从master保存的二进制日志事件(binlog events)
(5) 提升一个slave为新的master
(6) 使其他的slave连接新的master进行复制

2.MHA软件由两部分组成,Manager工具包和Node工具包

(1)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信息
(2)Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs       保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog     去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs       清除中继日志(不会阻塞SQL线程)
(可选:为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL 5.5的半同步复制)

3.自定义扩展:

secondary_check_script:         通过多条网络路由检测master的可用性
master_ip_ailover_script:       更新Application使用的masterip
shutdown_script:                强制关闭master节点
report_script:                  发送报告
init_conf_load_script:              加载初始配置参数
master_ip_online_change_script:更新master节点ip地址

4.配置文件:

global配置,为各application提供默认配置
application配置:为每个主从复制集群

5.实现MHA

(1)在管理节点上安装两个包:
mha4mysql-manager (须开启epel源,必要时yum install mha4*)
mha4mysql-node
(2)在被管理节点安装:
mha4mysql-node

6.在管理节点建立配置文件

vim /etc/mastermha/app1.cnf
[server default]
user=mhauser
password=123456
master_binlog_dir=/data/bin/
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1

[server1]
hostname=192.168.30.16
candidate_master=1
[server2]
hostname=192.168.30.66
candidate_master=1
[server3]
hostname=192.168.30.6
candidate_master=1

7.实现Master

vim /etc/my.cnf
[mysqld]
log-bin=/data/bin/mysql-bin
server_id=1
skip_name_resolve=1

mysql>show master logs
mysql>grant replication slave on *.* to repluser@‘192.168.30.%‘ identified by ‘123456‘;
mysql>grant all on *.* to mhauser@‘192.168.30.%’identified by‘123456‘;

8.实现slave

vim /etc/my.cnf
[mysqld]
server_id=2     #不同节点此值各不相同
log-bin=/data/bin/mysql-bin
read_only
relay_log_purge=0
skip_name_resolve=1
mysql>CHANGE MASTER TO 
MASTER_HOST=‘MASTER_IP‘,
MASTER_USER=‘repluser‘, 
MASTER_PASSWORD=‘123456‘,
MASTER_LOG_FILE=‘mariadb-bin.000001‘, 
MASTER_LOG_POS=245;

9.在所有节点实现相互之间ssh key验证

(1)MHA验证和启动
masterha_check_ssh --conf=/etc/mastermha/app1.cnf
masterha_check_repl --conf=/etc/mastermha/app1.cnf
masterha_manager --conf=/etc/mastermha/app1.cnf  //此命令执行后会默认在前台执行,除非主节点出现问题导致自动提升从节点做新的主节点
(2)模拟主节点宕机:
systemctl stop mariadb
(3)排错日志
cat /data/mastermha/app1/manager.log | tail  //可以查看哪个从节点被提升为新的主节点

MHA实现mysql高可用性

标签:int   建立   install   扩展   user   system   服务器   从库   ant   

原文地址:https://blog.51cto.com/14230230/2391303

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!