MySQL主从复制: MHA


大纲

  • 前言

  • MHA的架构

  • 环境部署

  • 实验步骤

  • 总结

前言

上篇文章我们实现了MySQL的主从复制, 但是我们之前就说过, 主从复制是有很多问题的, 我们这篇文章为大家介绍一如何使用MHA来实现MySQL复制集群的高可用

MHA的架构

MHA (Master HA) 实现MySQL主从复制主节点高可用 , 主要实现了

  • Automated master monitoring and failover 自主监控和故障转移

  • Interactive (manual) Master Failover 手动故障转移

  • Non-interactive master failover 非交互式故障转移

  • Online switching master to a different host 在线切换到新主机

项目地址 Google Code

MHA服务有两种角色, 完成相应的功能

  • MHA Master(管理节点)

  • MHA Slave(数据节点)

    MHA Manager通常单独部署在单台主机上 , 用来管理多个Master/Slave集群, 每个集群通常被称为Application 
    MHA Slave通常部署在单台MySQL服务器上, 通过监控和具有解析和清理log功能的脚本来加快故障转移

  • MySQL主节点故障时, 按下面的步骤进行转移

MHA的各组件

Manager节点的组件

  • masterha_check_ssh: MHA依赖的SSH环境检测工具

  • masterha_repl: MySQL复制环境检测工具

  • masterha_manager: MHA 服务主程序

  • masterha_check_status: MySQL master节点可用性检测工具

  • masterha_conf_host: 添加或删除配置的节点

  • masterha_stop: 关闭MHA服务的工具

Node节点的组件

  • save_binary_logs: 保存和复制master的二进制日志

  • apply_diff_relay_logs: 识别差异的中继日志应用于于其他slave

  • filter_mysqbinlog: 去除不必要的ROLLBACK事件(MHA已经移除这个工具)

  • purge_relay_logs: 清除中继日志(不会阻塞SQL线程)

自定义扩展组件

  • secondary_check_script: 通过多条网络路由检测master可用性

  • master_ip_failover_script: 更新application使用的masterip

  • shutdown_script: 强制关闭master节点

  • report_script: 发送报告

  • init_conf_load_script: 加载初始配置参数

  • master_ip_online_change_script: 更新master节点ip地址

环境部署

实验环境

节点 IP 功用
node1 172.16.1.2 Master Node
node2 172.16.1.3 Slave Node/Master Node
node3 172.16.1.4 Slave Node
node4 172.16.1.5 Manager Node

实验拓扑

当主节点宕机后, node2节点自动替代成为主节点

软件版本

MHA下载地址

软件 版本
MySQL 5.1
MHA_Manager 0.56
MHA_Node 0.54

实验步骤

安装配置mysql

[root@node1 ~]# yum install mysql-server -y[root@node2 ~]# yum install mysql-server -y[root@node3 ~]# yum install mysql-server -y[root@node4 ~]# yum install mysql-server -y

mysql_master_node配置文件

这里不对配置进行过多解释,有兴趣可以看我上篇文章

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockinnodb_file_per_table = 1log-bin=master-loglog-bin-index=1server_id=1user=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0

[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

master_slave_node配置文件

我们这里只展示一个节点的配置文件

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockinnodb_file_per_table = 1log-bin = master-loglog-bin-index = 1relay-log = relay-logread_only = 1server_id=2    #每个从服务器要使用不同的user=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0

[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

配置主从

MySQL Master节点配置

我们需要创建一个super权限的用户给MHA_Manager管理来控制各节点

mysql> SHOW MASTER STATUS;  #一定要在创建用户前查看并记下POS数值+-------------------+----------+--------------+------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |+-------------------+----------+--------------+------------------+| master-log.000003 |      106 |              |                  |+-------------------+----------+--------------+------------------+1 row in set (0.00 sec)

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'rpuser'@'%' IDENTIFIED BY 'passwd';Query OK, 0 rows affected (0.00 sec)

ENTFIED BY 'passwd'' at line 1mysql> GRANT ALL ON *.* TO 'mhauser'@'%' IDENTIFIED BY 'passwd';Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)

MySQL Slave节点配置

mysql> CHANGE MASTER TO     -> MASTER_HOST='172.16.1.2',    -> MASTER_USER='rpuser',    -> MASTER_PASSWORD='passwd',    -> MASTER_LOG_FILE='master-log.000003',    -> MASTER_LOG_POS=106;Query OK, 0 rows affected (0.03 sec)

mysql> START SLAVE;    #启动slaveQuery OK, 0 rows affected (0.00 sec)

mysql> SHOW SLAVE STATUS\G;  #查看slave-IO和slave-SQL是否为YES    Master_Host: 172.16.1.2    Master_User: rpuser    Master_Port: 3306    Connect_Retry: 60    Master_Log_File: master-log.000003    Read_Master_Log_Pos: 476    Relay_Log_File: relay-log.000002    Relay_Log_Pos: 622    Relay_Master_Log_File: master-log.000003    Slave_IO_Running: Yes    Slave_SQL_Running: Yes

配置MHA

配置前提

我们需要配置每一台主机之间能够互信

每台主机互信配置

我们这里使用一个非常简便的方法来实现

生成密钥后, 复制到各节点主机[root@node4 ~]# ssh-keygen -P '' -t rsa -f /root/.ssh/id_rsa #在node4生成密钥[root@node4 ~]# cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys [root@node4 ~]# scp /root/.ssh/{id_rsa,authorized_keys} node1.anyisalin.com:/root/.ssh/[root@node4 ~]# scp /root/.ssh/{id_rsa,authorized_keys} node2.anyisalin.com:/root/.ssh/[root@node4 ~]# scp /root/.ssh/{id_rsa,authorized_keys} node3.anyisalin.com:/root/.ssh/

安装MHA

[root@node4 ~]# yum localinstall mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.54-0.el6.noarch.rpm  #在manager节点上安装这两个包

#在各个node节点安装mha_node[root@node2 ~]# yum localinstall mha4mysql-node-0.54-0.el6.noarch.rpm[root@node3 ~]# yum localinstall mha4mysql-node-0.54-0.el6.noarch.rpm[root@node4 ~]# yum localinstall mha4mysql-node-0.54-0.el6.noarch.rpm

创建配置文件

[root@node4 ~]# vim /etc/mha.cnf

    [server default]    user=mhauser    password=passwd    manager_workdir=/data/masterha/app1        manager_log=/data/masterha/app1/manager.log    remote_workdir=/data/masterha/app1    ssh_user=root    repl_user=rpuser    repl_password=passwd    ping_interval=1

    [server1]    hostname=172.16.1.2    candidate_master=1

    [server2]    hostname=172.16.1.3    candidate_master=1

    [server3]    hostname=172.16.1.4

检查环境

启动Masterha前使用自带的检测工具检查一下环境

[root@node4 ~]# masterha_check_ssh --conf=/etc/mha.cnf  #检查ssh, --conf指定配置文件

#最后出现以下字段代表成功Thu Apr 28 19:02:05 2016 - [info] All SSH connection tests passed successfully.

[root@node4 ~]# masterha_check_repl --conf=/etc/mha.cnf  #检查主从复制

#最后出现以下字段代表成功MySQL Replication Health is OK.

启动MHA

nohup masterha_manager --conf=/etc/mha.cnf  &> /data/masterha/app1/manager.log  &# 指定配置文件并且放进程在后台运、剥离与终端的关系

测试故障转移

[root@node4 ~]# masterha_check_status --conf /etc/mha.cnf   #当前主节点为node1mha (pid:2573) is running(0:PING_OK), master:172.16.1.2

[root@node1 ~]# service mysqld stop  #手动停止主节点

[root@node3 ~]# mysqlmysql> SHOW SLAVE STATUS\G;  

    Slave_IO_State: Waiting for master to send event    Master_Host: 172.16.1.3  #已经转换为node2    Master_User: rpuser    Master_Port: 3306    Connect_Retry: 60    Master_Log_File: master-log.000006    Read_Master_Log_Pos: 106    Relay_Log_File: relay-log.000004    Relay_Log_Pos: 252    Relay_Master_Log_File: master-log.000006

[root@node2 ~]# mysqlmysql> SHOW GLOBAL VARIABLES LIKE '%read_only%';    #查看, read_only被MHA关闭了+---------------+-------+| Variable_name | Value |+---------------+-------+| read_only     | OFF   |+---------------+-------+1 row in set (0.00 sec)

总结

其实我们这套架构不够完整, 如果要投入生产环境使用还需要提供一个自动切换VIP的脚本, 前端使用MySQL专用的读写分离器进行调度, 但是由于时间原因. 这里又不做更多的叙述了, 大家能够知道基本用法相比那些也就是小意思

作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~ 
作者: AnyISaIln QQ: 1449472454 
感谢: MageEdu

转载于:https://blog.51cto.com/anyisalin/1768762

MySQL主从复制: MHA相关推荐

  1. Mysql 主从复制+MHA搭建

    Mysql半双工主从复制 https://blog.csdn.net/qq_35349982/article/details/108558868 继续主从复制之后的MHA搭建 master-1 192 ...

  2. MySQL主从复制原理、半同步操作步骤及原理

    MySQL主从复制原理.半同步操作步骤及原理 1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1.scp/sftp/nc 命令可以实现远程数据同步. 2.搭建ftp/h ...

  3. 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】

    mysql主从复制架构,是mysql数据库主要特色之一,绝大多数公司都有用到. 而GTID模式是基于事务的复制模式的意思,发展到现在也是越来越多人用. 以前很多文章,介绍搭建mysql主从复制架构,是 ...

  4. mysql主从复制 读写分离

    转载地址:http://blog.51cto.com/mailfile/1272623 MySQL是开源的关系型数据库系统. 复制(Replication)是从一台MySQL数据库服务器(主服务器ma ...

  5. mysql故障转移,MySQL之MHA故障转移

    MHA故障转移流程:1.从出现故障的主节点A拉取binlog日志到B.C节点.2.识别有最近Relay_Master_Log_File,Exec_Master_Log_Pos 更新的slave节点.假 ...

  6. MySQL之MHA高可用配置及故障切换实例

    MySQL之MHA高可用配置及故障切换实例 前言 一.MHA概述 (1)MHA是什么 (2)MHA的组成 (3)MHA的特点 二.部署MHA (1)配置主从服务 ①环境初始化 ③修改master.sl ...

  7. MySQL的MHA高可用配置及故障切换

    MySQL的MHA高可用配置及故障切换 一.MHA概述 1.MHA简介 2.MHA的组成 3.MHA特点 二.MHA实验 1.实验环境准备 2.实验目的 3.实验步骤 一.MHA概述 1.MHA简介 ...

  8. 五、MySQL主从复制原理

    MySQL主从复制原理.半同步操作步骤及原理 标签(空格分隔): mysql 1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1.scp/sftp/nc 命令可以实现远 ...

  9. 摆摊也要抽时间学的MySQL主从复制

    前言 听说大家现在都在积极响应国家号召,没事的时候会推着三轮车去街角.天桥摆个地摊.博主刚刚收摊回来,顺手写了篇MySQL. MySQL相信大家都很熟悉了,单节点MySQL出现性能瓶颈的时候,大家首先 ...

最新文章

  1. 窗体和控件使用中的注意事项有哪些?
  2. TCP/IP 笔记 - TCP连接管理
  3. what is the thing you fear most?
  4. Wordpress上传图片的存储逻辑
  5. 人工智障学习笔记——机器学习(6)协同过滤
  6. Eclipse中Maven插件的使用技巧及原理
  7. python中的super用法详解_python中super的用法实例解析
  8. 《推荐系统实战(一)》基于统计的电影推荐系统(tmdb-5000数据集,数据清洗、特征提取、搭建模型等详细过程)
  9. GBDT梯度提升之二分类算法个人理解
  10. 计算机打字题目200字,拼音打字考试标准练习题200字
  11. 【年度总结】回顾2021,展望2022,老杨来了
  12. postgresql 10 的并行(parallel)简介
  13. 使用国内镜像源来加速python pypi包的安装
  14. appium startActivity使用方法
  15. 每天一道大厂SQL题【Day01】
  16. Keil MDK破解过程详解
  17. java向文件写数据的3种方式
  18. English Learning - Day6 作业打卡 2022.12.12 周一
  19. 计算机 教授级职称评定,工程技术应用研究员(俗称正高,教授级高工等等)职称评定...
  20. 云南衡水实验中学2021高考成绩查询,2021云南衡水实验中学高考复读报名材料

热门文章

  1. 开课吧:分享C++代码的整洁之道!
  2. Java基础篇:构造函数
  3. Confluence wiki上传文件时报“不能上传文件至Confluence中,服务器可能已失效”
  4. HDU - 2196(树形DP)
  5. 使用Logic Apps从Azure Blob存储中删除超过X天的文件
  6. redis cluster所有节点IP修改处理方案
  7. windows生成当前目录树
  8. JAVA IO - RandomAccessFile
  9. 先搭云安全框架 再谈云落地
  10. opencv2.4.9中HoughlinesP源码中的疑问解析!