MHA高可用主从复制实现
一 MHA
1.1 关于MHA
MHA(master HA)是一款开源的MySQL的高可用程序,它为MySQL的主从复制架构提供了automating master failover功能。MHA在监控到的master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过熊其它节点获取额外信息来源避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。
MHA服务有两种角色,MHA Manager(管理节点)和MHA Node(数据节点):
MHA Manager:通常单独部署在一台独立机器上管理多个master/slave集群,每个master/slave集群称作一个application;
MHA node:运行在每台MySQL服务器上(master/slave/manager),它通过监控具备解析和清理logs功能的脚本来加快故障转义。
Manager package:Can manager multiple {master,slaves} pairs
masterha_manager:Automated master monitoring and failover command
Other helper scripts:Manual master failover,online master switch,con checking,etc
Node package :Deplpying on all MySQLservers
save_binary_logs:Copying master's binary logs if accessible
apply_diff relay_logs:Generating differential relay logs from the latest slave,and applying all differential binlog events
purge_relay_logs:Deleting relay logs withotu stopong SQL thread
拓扑图
1.2 Architecture of MHA
MySQL复制集群中的master故障时,MHA按如下步骤进行故障转移:
1.3 MHA组件
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 线程)
自定义扩展工具
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 地址
二 准备MySQL Replication环境
2.1 配置主从复制文件
MAH对MySQL复制环境有特殊要求,例如各节点都要开启二进制日志和中继日志,各从节点必须显式启用其read-only属性,并关闭relay-log-purge功能等,这里先对其配置做实现说明。
本实验环境共有四个节点,其角色分配如下:
node1:MariaDB master
node2:MariaDB slave
node3:MariaDB slave
node4:MHA Manager
#各节点的etc/hosts文件配置内容如下:
172.18.67.11 node1 node1
172.18.67.12 node2 node2
172.18.67.13 node3 node3
172.18.67.14 node4 node4
#初始节点master的配置:
server_id=1
relay_log=relay-log
log_bin=master-log#所有slave节点的配置如下:
server_id=2,3 #两个slave节点id号不同
relay_log=relay-log
log_bin=master-log
relay_log_purge=0
read_only=1
2.2 配置主从架构
#启动MariaDB服务
[root@node1 ~]# systemctl start mariadb
[root@node2 ~]# systemctl start mariadb
[root@node3 ~]# systemctl start mariadb#登入主节点
[root@node1 ~]# mysql
MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 | 245 | | |
+-------------------+----------+--------------+------------------+#为一个用户授权
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.18.67.%' IDENTIFIED BY 'replpass';
MariaDB [(none)]> FLUSH PRIVILEGES;#从节点node2配置
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.18.67.11',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=245;
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.18.67.11Master_User: repluserMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-log.000003Read_Master_Log_Pos: 497Relay_Log_File: relay-log.000002Relay_Log_Pos: 782Relay_Master_Log_File: master-log.000003Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 497Relay_Log_Space: 1070Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1#从节点node3配置
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.18.67.11',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=245;
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.18.67.11Master_User: repluserMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-log.000003Read_Master_Log_Pos: 497Relay_Log_File: relay-log.000002Relay_Log_Pos: 782Relay_Master_Log_File: master-log.000003Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 497Relay_Log_Space: 1070Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1
MariaDB [(none)]> SELECT User,Host FROM mysql.user;
+----------+-------------+
| User | Host |
+----------+-------------+
| root | 127.0.0.1 |
| repluser | 172.18.67.% |
| root | ::1 |
| | localhost |
| root | localhost |
| | node3 |
| root | node3 |
+----------+-------------+#在主节点授权一个HA管理的账号
MariaDB [(none)]> GRANT ALL ON *.* TO 'haadmin'@'172.18.67.%' IDENTIFIED BY 'hapass';
MariaDB [(none)]> FLUSH PRIVILEGES;
三 安装MHA及配置
3.1 准备基于ssh互信通信环境
MHA集群中的各节点彼此之间均需要基于ssh互信互通,以实现远程控制及数据管理功能。简单起见,可在Manager节点生成密钥对儿,并设置其可远程连接本地主机后,将私钥文件及authorized_keys文件复制给余下的所有节点即可。
#下面的操作在manager节点操作即可
[root@node4 ~]# ssh-keygen -t rsa
[root@node4 ~]# cat .ssh/id_rsa.pub > .ssh/authorized_keys
[root@node4 ~]# chmod 600 .ssh/authorized_keys[root@node4 ~]# scp -p .{id_rsa,authorized_keys} root@node1:/root/.ssh/
[root@node4 ~]# scp -p .{id_rsa,authorized_keys} root@node2:/root/.ssh/
[root@node4 ~]# scp -p .{id_rsa,authorized_keys} root@node3:/root/.ssh
3.2 安装MHA
下载:
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
#在MHA节点安装两个包
[root@node4 ~]# yum install ./mha4mysql-*#将mha4mysql-node-0.56-0.el6.noarch.rpm复制到其它三个节点
[root@node4 ~]# for i in {1..3};do scp mha4mysql-node-0.56-0.el6.noarch.rpm node${i}:/root/; done#安装mha4mysql-node-0.56-0.el6.noarch.rpm
[root@node4 ~]# for i in {1..3};do ssh node$i 'yum install -y /root/mha4mysql-node-0.56-0.el6.noarch.rpm'; done
3.3 初始化MHA
Manager节点需要为每个监控的master/slave集群提供一个专用的配置文件,而所有的master/slave集群也可共享全局配置。全局配置文件默认为/etc/masterha_default.cnf,其为可选配置。如果监控一组master/slave集群,也可直接通过application的配置来提供各服务器的默认配置信息。而每个application的配置文件路径为自定义,例如本示例中将使用/etc/masterha/app1.cnf,其内容如下所示:
[root@node4 ~]# vim /etc/mha4mysql/mha4.cnf
[server default]
user=mhaadmin
password=mhapass
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repluser
repl_password=replpass
ping_interval=1
master_ip_failover_script=/tmp/master_ip_failover[server1]
hostname=172.18.67.11
ssh_port=22
candidate_master=1[server2]
hostname=172.18.67.12
ssh_port=22
candidate_master=1[server3]
hostname=172.18.67.13
ssh_port=22
candidate_master=1#检测各节点间ssh互信互通配置对否成功
[root@node4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
[root@node4 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf#最后一行输出如下类似信心表示成功
MySQL Replication Health is OK.#启动MHA
[root@node4 ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /data/masterha/
app1/manager.log 2>&1 &#查看MHA状态
[root@node4 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
3.4 测试故障转移
#停止master节点的mariadb服务。此操作在master节点执行
[root@node1 ~]# systemctl stop mariadb#查看MHA状态。此操作在manager节点执行
[root@node4 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 is stopped(2:NOT_RUNNING)#验证master节点是否切换。此操作在slave节点上执行。
#可以看到slave2节点的Master_Host已经从172.18.67.11切换到172.18.67.12
[root@node2 ~]# mysql -e 'SHOW SLAVE STATUS\G' | grep "Master_Host"Master_Host: 172.18.67.12
转载于:https://www.cnblogs.com/mrlapulga/p/6985299.html
MHA高可用主从复制实现相关推荐
- mysql主主复制和mha_MySQL第二章主从复制MHA高可用
1.主从复制架构演变介绍 1.1基础结构 1)一主一从 2)一主多从 3)多级主从 4)双主 5)循环复制 1.2高级应用架构演变 1.2.1高性能架构 1)读写分离架构(读性能较高) 代码级别 My ...
- GTID主从复制 MHA高可用 binlogserver实时备份 Atlas中间件读写分离
GTID主从复制 什么是GTID 从MySQL 5.6.2 开始新增了一种基于 GTID 的复制方式,用以替代以前传统的复制方式,到MySQL5.6.10后逐渐完善. 通过 GTID 保证了每个在主库 ...
- 理论+实验·MHA高可用配置及故障切换
这里写目录标题 MHA概述 安装MySQL数据库 配置MySQL一主两从 安装MHA软件 配置无密码认证 配置MySQL-MHA高可用 六.模拟 master 故障切换 MHA概述 传统的MySQL主 ...
- Mysql数据库(十一)——MHA高可用集群部署及故障切换
Mysql数据库(十一)--MHA高可用集群部署及故障切换 一.MHA概述 二.MHA的组成 三.MHA的特点 四.案例环境 1.服务器配置 2.思路 3.关闭防火墙和安全机制,并进行主从配置 4.配 ...
- MHA高可用 MHA+Keepalive
MHA高可用 MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebo ...
- MySQL之MHA高可用配置及故障切换实例
MySQL之MHA高可用配置及故障切换实例 前言 一.MHA概述 (1)MHA是什么 (2)MHA的组成 (3)MHA的特点 二.部署MHA (1)配置主从服务 ①环境初始化 ③修改master.sl ...
- MySQL的MHA高可用配置及故障切换
MySQL的MHA高可用配置及故障切换 一.MHA概述 1.MHA简介 2.MHA的组成 3.MHA特点 二.MHA实验 1.实验环境准备 2.实验目的 3.实验步骤 一.MHA概述 1.MHA简介 ...
- MHA高可用架构部署以及配置(详细)
目录 一.MHA概述 1.简介 2.MHA特点 3.何为高可用 4.故障切换过程 二.MHA高可用架构部署 1.架构图 2. 实验环境:需要四台Centos7服务器 3.实验部署 3.1.master ...
- mysql(三)路由器读写分离、MHA高可用
1 mysql 路由器实现读写分离 简介: MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由.它可用于各种用例,例如通过有效地将 ...
最新文章
- 彻底搞定IE7频繁弹出“确实允许此网页访问剪贴板吗”
- C/C++ 指针函数 与 函数指针
- 《数字视频和高清:算法和接口》一第2章 图像的采样和显示
- C语言实现修改文本文件中的特定行
- 陈斌:探索技术领导力的最佳实践
- 在MFC对话框中快速集成三维控件
- sqlsever使用charindex查询中文字符返回固定值_10个MySQL使用技巧及30个搜索优化方法...
- ThinkPHP redirect 页面重定向使用详解与实例
- ZKWeb网页框架1.3正式发布
- 【HNOI2017】礼物
- 单线程为什么cpu慢_面试时说Redis是单线程的,被喷惨了!
- nil,NULL,NSNull的区别
- SCVMM 2012 部署测试之五向SCVMM中添加Hyper-V主机
- 什么软件可以搜c语言的答案,跪求C语言答案
- 【Pandas】实操手册
- 【Elasticsearch】Elasticsearch启动索引恢复流程
- MySQL 报错InnoDB: Cannot allocate memory for the buffer poo处理方法
- 如何用电脑下载微信视频号中的视频?
- CRC8 CRC16 查表法
- python绘制多个散点图_绘制多个散点图熊猫
热门文章
- python装饰器原理-看完这篇文章还不懂Python装饰器?
- python画曲线图例-Python画各种图
- python与excel的应用-Python 3 读取和存储Excel数据(应用到接口测试)
- python怎么安装第三方库-怎样安装Python的第三方库
- python第三方库numpy-谁能介绍下Python生态中的第三方库NumPy
- 在哪里可以免费学python-在合肥哪里可以学Python
- pythonexe32位-如何使用pyinstaller打包32位的exe程序
- python读什么英文-Python编程但英语差,能用中文吗?
- python表白-教你如何用Python表白
- python绘制动态模拟图-用python生成地球运动的动态模拟动态图