author:JevonWei
版权声明:原创作品


主节点高可用

MHA是一款开源的MySQL的高可用程序,他为MySQL主从复制架构提供了automating master failover功能。MHA在监控到master节点故障时,会提升
其中拥有最新数据的slave节点成为新的master节点。在此期间,MHA会通过其他从节点获取额外信息来避免一致性方面的额问题。MHA还提供了master
节点切换功能,即按需切master/slave节点

MHA服务有两种角色,MHA Manager(管理节点)和HMA Node(数据节点)

MHA Manager:通常部署在一台独立机器上管理多个master/slave集群,每个master/slave集群称作一个application;
MHA node:运行在每台MySQL服务器上(master/slave/manager),他通过监控具备解析和清理logs功能的脚本来加快故障转移。

MHA组件

Manager节点-masterha_check_ssh:MHA依赖的SSH环境检测工具-masterha_check_repl:MySQL复制环境检测工具-masterha_manager:MHA服务主程序-masterha_check_status:MHA运行状态检测工具-masterha_master_monitor:MySQL master节点可用性检测工具-masterha_master_switch:master节点切换工具-masterha_conf_host:添加或删除配置节点-masterha_stop:关闭MHA服务的工具Node节点-save_binary_logs:保存和复制master的二进制日志-apply_diff_relay_logs:识别差异的中继日志事件并应用于其他slave-filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不在使用这个工具)-purge_relay_logs:清除中继日志(不会阻塞SQL线程)自定义扩展-sccondary_check_script:通过多条网络路由检测master的可用性-master_ip_failover_script:更新application使用的masterrip-shutdown_script:强制关闭master节点-report_script:发送报告-init_conf_load_script:加载初始化配置参数-master_ip_online_change_script:更新master节点ip地址

构建高可用HMA架构

节点角色

mysql-master 172.16.252.82
mysql-slave1 172.16.252.92
mysql-slave2 172.16.252.100
manager      172.16.252.67

配置各节点之间可以通过主机名通信

[root@manager  ~]# vim /etc/hosts
172.16.252.82 mysql-master
172.16.252.92 mysql-slave1
172.16.252.100 mysql-slave2
172.16.252.67 manager
其他各主机依次配置主机名解析文件

mysql-master

[root@mysql-master ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 1
relay-log = relay-log
log-bin = master-log
skip_name_resolve = ON
innodb_file_per_table = ON
[root@mysql-master ~]# systemctl start mariadb[root@mysql-master ~]# mysql
授权一个有权限做主从复制的用户
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';
MariaDB [(none)]> FLUSH PRIVILEGES;查看master节点的状态,记录二进制文件的位置信息,用于从节点的复制起点
MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000001 |      501 |              |                  |
+-------------------+----------+--------------+------------------+

mysql-slave1

[root@mysql-slave1 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 2
relay-log = relay-log
log-bin = master-log
skip_name_resolve = ON
innodb_file_per_table = ON
read_only = ON
relay_log_purge = OFF
[root@mysql-slave1 ~]# systemctl start mariadb   [root@mysql-slave ~]# mysql
MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'read_only';  \\查看数据库为只读
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON   |
+---------------+-------+
连接主节点数据库
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.198.139',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=501;
启动从节点复制进程
MariaDB [(none)]> START SLAVE;
查看SLAVE节点的状态
MariaDB [(none)]> SHOW SLAVE STATUS\G;
连接manager的用户
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

mysql-slave2

root@mysql-slave2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 3
relay-log = relay-log
log-bin = master-log
skip_name_resolve = ON
innodb_file_per_table = ON
read_only = ON
relay_log_purge = OFF
[root@mysql-slave2 ~]# systemctl start mariadb
[root@mysql-slave ~]# mysql
MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'read_only';  \\查看数据库为只读
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON   |
+---------------+-------+
连接主节点数据库
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.198.139',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=501;
启动从节点复制进程
MariaDB [(none)]> START SLAVE;
查看SLAVE节点的状态
MariaDB [(none)]> SHOW SLAVE STATUS\G;
连接manager的用户
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

mysql-master(master/slave上都需有此用户权限来连接manager)

MariaDB [(none)]> GRANT ALL ON *.* TO 'mha'@'172.16.%.%' IDENTIFIED BY 'mhapass';MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

MHA安装

github官网下载manager到本地
[root@manager ~]# ls mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
[root@manager ~]# yum install ./mha4mysql-*   安装MHA程序包复制mha4mysql-node-0.56-0.el6.noarch.rpm程序包到各节点上
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-master:/root
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-slave1:/root
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-slave2:/rootmysql-master、mysql-slave1和mysql-slave2节点依次安装mha4mysql-node-0.56-0.el6.noarch.rpm程序包
[root@mysql-master ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mysql-slave1 ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mysql-slave2 ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm

配置各节点之间SSH互信的通信环境
HMA

[root@manager ~]# ssh-keygen -t rsa -P ''  生成ssh秘钥文件
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager
[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-master:/root/.ssh
[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-slave1:/root/.ssh
[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-slave2:/root/.ssh[root@mysql-master ~]# ssh -o StrictHostKeyChecking=no mysql-slave1 直接连接mysql-slave主机,无询问,无提示

初始化HMA

manager[root@manager ~]# mkdir /data/masterha[root@manager ~]# mkdir /data/masterha/app[root@manager ~]# mkdir /etc/masterha[root@manager ~]# vim /etc/masterha/app.cnf[server default]user=mhapassword=mhapass  \\node节点连接manager的用户manager_workdir=/data/masterha/appmanager_log=/data/masterha/app/manager.logremote_workdir=/data/masterha/appssh_user=rootrepl_user=repluserrepl_password=replpassping_interval=1[server1]hostname=172.16.252.82candidate_master=1[server2]hostname=172.16.252.92candidate_master=1[server3]hostname=172.16.252.100candidate_master=1

测试后端主机的集群

[root@manager ~]# masterha_check_repl --conf=/etc/masterha/app.cnf  

测试运行HMA程序

[root@manager ~]# masterha_manager --conf=/etc/masterha/app.cnf 

查看HMA集群的状态

[root@manager ~]# masterha_check_status

转载于:https://www.cnblogs.com/JevonWei/p/7525924.html

Mysql实战之高可用HMA相关推荐

  1. MySQL之MHA高可用配置及故障切换(理论加实战详细部署步骤)

    MySQL之MHA高可用配置及故障切换(理论加实战详细部署步骤) 文章目录 一.MHA介绍 (一).什么是MHA (二).MHA 的组成 (三).MHA 的特点 二.搭建 MySQL MHA (一). ...

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

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

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

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

  4. MySQL数据库的高可用方案总结

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...

  5. CentOS 6.4 Heartbeat+mysql+nfs实现高可用的mysql集群

    一.Heartbeat网络架构 二.准备工作 1.操作系统 CentOS 6.4 X86-64 最小化安装 由于用源码编译安装heartbeat一直没有通过,所以没办法只能采用yum安装. heart ...

  6. 国际站 RDS MySQL 5.7 高可用版发布

    信息摘要: 国际站用户可以在全部Region购买MySQL 5.7 高可用版 适用客户: 国际站用户 版本/规格功能: MySQL 5.7 高可用版共18个规格全部上线 产品文档: https://w ...

  7. heartbeat+iscsi+mysql实现双机高可用

    8.heartbeat+iscsi+mysql实现双机高可用 虚拟地址的迁移 iscsi提供存储共享 (mysql 是application  也可以是ftp web等) 在iscsi服务器上:10. ...

  8. Mysql数据库的高可用

    本文来说下有关mysql数据库的高可用 文章目录 概述 主从或主主半同步复制 半同步复制优化 高可用架构优化 共享存储 分布式协议 本文小结 概述 高可用,即High Availability,是分布 ...

  9. mysql 热切换_热璞HotDB学习篇—如何基于MySQL进行数据高可用

    数据高可用之所以是老生常谈的话题,是因它对企业数据安全起到了至关重要的保障作用,数据高可用核心功能在于如何保证在发生故障时数据不丢失.本文作者热璞数据库HotDB首席架构师,精通数据库原理和MySQL ...

最新文章

  1. torch div优化
  2. Android - could not install *smartsocket* listener
  3. 操蛋的linux改mysql密码(1054和1819错误)
  4. linux如何编译php扩展,linux环境下编译php扩展
  5. Ext JS 6开发实例(三) :主界面设计
  6. 蓝桥杯 ADV-141 算法提高 判断名次
  7. 【数字信号调制】基于matlab GUI PCM编码+QAM调制【含Matlab源码 1095期】
  8. 杭州互联网公司和生活成本
  9. 根据经纬度算两点距离
  10. 笔记本摄像头频闪频灭
  11. 量子力学考研书籍介绍
  12. python在化工模拟中的应用_python完成模拟博客园登陆
  13. 电脑开机黑屏解决办法
  14. Java Reflection (JAVA反射) 选择自 leek2000 的 Blog
  15. Codeforces - Cashback
  16. (转)三款免费Win7系统摄像头录制工具
  17. 使用rufus制作Windows Server 2016 U盘_wentfar·tsao
  18. 软件测评基础知识(三)-性能效率与兼容性-中科软测认证中心
  19. 【PaddlePaddle】使用高层API导入、导出模型
  20. HTML设计抖音页面,CSS3解析抖音LOGO制作的方法步骤

热门文章

  1. SCCM2012系列之六,SCCM2012部署前的WDS准备
  2. jquery-validation 使用
  3. 无人驾驶插秧机智能辅助系统_无人驾驶插秧机搭载北斗导航驾驶系统,误差仅在2.5厘米内...
  4. Android程序对不同手机屏幕分辨率自适应的总结
  5. 管理历程篇---学会四心
  6. 使用QT的qmake工具生成VS工程
  7. VirtualBox的虚拟硬盘vdi扩容
  8. Android中RelativeLayout及TableLayout使用说明
  9. C#实现.rar的动态压缩与解压缩
  10. c#制作的简单的画图板