热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MariaDB高可用架构之MHA

MariaDB高可用架构之MHA:MHA(MasterHighAvailability)该软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)。MHAMa
MHA(Master High Availability)

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从.

官方介绍:https://code.google.com/p/mysql-master-ha/


配置MHA实现mariadb 主从切换

4台Centos7.6虚拟机 数据库版本 10.2.23-MariaDB
IP
角色
192.168.148.7 master
192.168.148.27 slave1
192.168.148.37 slave2
192.168.148.47 mha-manager

前期准备

  • 完成3台数据库服务器的半同步复制
  • 3台数据库服务器安装mha4mysql-node
  • 管理节点安装 mha4mysql-managermh、a4mysql-node (需要配置EPEL源)
  • 完成4台服务器的ssh基于公钥的登录
主节点配置一个管理账号用户 mha的远程管理

MariaDB [(none)]> grant all on *.* to mhauser@‘192.168.148.%‘ identified by ‘centos‘;

从节点开启二进制日志

vim /etc/mysql/my.cnf log-bin=/data/bin/mysql-bin relay_log_purge=0 #不清除中继日志 skip_name_resolve=1 #跳过域名解析

管理节点编写配置文件

[root@localhost ~]# vim /etc/mastermha/app1.cnf [server default] user=mhauser password=centos manager_workdir=/opt/mastermha/app1 manager_log=/opt/mastermha/app1/manager.log remote_workdir=/opt/mastermha/app1 ssh_user=root repl_user=repluser repl_password=centos ping_interval=1 master_binlog_dir=/data/bin/ #指定二进制日志的存放路径 [server1] hostname=192.168.148.7 candidate_master=1 [server2] hostname=192.168.148.27 candidate_master=1 [server3] hostname=192.168.148.37 candidate_master=1

管理节点运行测试脚本

# ssh 公钥登录验证 [root@localhost ~]# masterha_check_ssh --cOnf=/etc/mastermha/app1.cnf Fri May 10 10:11:33 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Fri May 10 10:11:33 2019 - [info] Reading application default configuration from /etc/mastermha/app1.cnf.. Fri May 10 10:11:33 2019 - [info] Reading server configuration from /etc/mastermha/app1.cnf.. Fri May 10 10:11:33 2019 - [info] Starting SSH connection tests.. Fri May 10 10:11:35 2019 - [debug] Fri May 10 10:11:33 2019 - [debug] Connecting via SSH from root@192.168.148.7(192.168.148.7:22) to root@192.168.148.27(192.168.148.27:22).. Fri May 10 10:11:34 2019 - [debug] ok. Fri May 10 10:11:34 2019 - [debug] Connecting via SSH from root@192.168.148.7(192.168.148.7:22) to root@192.168.148.37(192.168.148.37:22).. Fri May 10 10:11:34 2019 - [debug] ok. Fri May 10 10:11:36 2019 - [debug] Fri May 10 10:11:34 2019 - [debug] Connecting via SSH from root@192.168.148.37(192.168.148.37:22) to root@192.168.148.7(192.168.148.7:22).. Fri May 10 10:11:35 2019 - [debug] ok. Fri May 10 10:11:35 2019 - [debug] Connecting via SSH from root@192.168.148.37(192.168.148.37:22) to root@192.168.148.27(192.168.148.27:22).. Fri May 10 10:11:35 2019 - [debug] ok. Fri May 10 10:11:36 2019 - [debug] Fri May 10 10:11:34 2019 - [debug] Connecting via SSH from root@192.168.148.27(192.168.148.27:22) to root@192.168.148.7(192.168.148.7:22).. Fri May 10 10:11:34 2019 - [debug] ok. Fri May 10 10:11:34 2019 - [debug] Connecting via SSH from root@192.168.148.27(192.168.148.27:22) to root@192.168.148.37(192.168.148.37:22).. Fri May 10 10:11:35 2019 - [debug] ok. Fri May 10 10:11:36 2019 - [info] All SSH connection tests passed successfully. # 数据库主从复制测试 如果结果不是 "OK" 请检测主从复制配置 [root@localhost ~]# masterha_check_repl --cOnf=/etc/mastermha/app1.cnf Fri May 10 10:12:12 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Fri May 10 10:12:12 2019 - [info] Reading application default configuration from /etc/mastermha/app1.cnf.. Fri May 10 10:12:12 2019 - [info] Reading server configuration from /etc/mastermha/app1.cnf.. Fri May 10 10:12:12 2019 - [info] MHA::MasterMonitor version 0.56. Fri May 10 10:12:13 2019 - [info] GTID failover mode = 0 Fri May 10 10:12:13 2019 - [info] Dead Servers: Fri May 10 10:12:13 2019 - [info] Alive Servers: Fri May 10 10:12:13 2019 - [info] 192.168.148.7(192.168.148.7:3306) Fri May 10 10:12:13 2019 - [info] 192.168.148.27(192.168.148.27:3306) Fri May 10 10:12:13 2019 - [info] 192.168.148.37(192.168.148.37:3306) Fri May 10 10:12:13 2019 - [info] Alive Slaves: Fri May 10 10:12:13 2019 - [info] 192.168.148.27(192.168.148.27:3306) Version=10.2.23-MariaDB-log (oldest major version between slaves) log-bin:enabled Fri May 10 10:12:13 2019 - [info] Replicating from 192.168.148.7(192.168.148.7:3306) Fri May 10 10:12:13 2019 - [info] Primary candidate for the new Master (candidate_master is set) Fri May 10 10:12:13 2019 - [info] 192.168.148.37(192.168.148.37:3306) Version=10.2.23-MariaDB-log (oldest major version between slaves) log-bin:enabled Fri May 10 10:12:13 2019 - [info] Replicating from 192.168.148.7(192.168.148.7:3306) Fri May 10 10:12:13 2019 - [info] Primary candidate for the new Master (candidate_master is set) Fri May 10 10:12:13 2019 - [info] Current Alive Master: 192.168.148.7(192.168.148.7:3306) Fri May 10 10:12:13 2019 - [info] Checking slave configurations.. Fri May 10 10:12:13 2019 - [info] Checking replication filtering settings.. Fri May 10 10:12:13 2019 - [info] binlog_do_db= , binlog_ignore_db= Fri May 10 10:12:13 2019 - [info] Replication filtering check ok. Fri May 10 10:12:13 2019 - [info] GTID (with auto-pos) is not supported Fri May 10 10:12:13 2019 - [info] Starting SSH connection tests.. Fri May 10 10:12:15 2019 - [info] All SSH connection tests passed successfully. Fri May 10 10:12:15 2019 - [info] Checking MHA Node version.. Fri May 10 10:12:16 2019 - [info] Version check ok. Fri May 10 10:12:16 2019 - [info] Checking SSH publickey authentication settings on the current master.. Fri May 10 10:12:16 2019 - [info] HealthCheck: SSH to 192.168.148.7 is reachable. Fri May 10 10:12:17 2019 - [info] Master MHA Node version is 0.56. Fri May 10 10:12:17 2019 - [info] Checking recovery script configurations on 192.168.148.7(192.168.148.7:3306).. Fri May 10 10:12:17 2019 - [info] Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/data/bin/ --output_file=/opt/mastermha/app1/save_binary_logs_test --manager_version=0.56 --start_file=master-bin.000001 Fri May 10 10:12:17 2019 - [info] Connecting to root@192.168.148.7(192.168.148.7:22).. Creating /opt/mastermha/app1 if not exists.. ok. Checking output directory is accessible or not.. ok. Binlog found at /data/bin/, up to master-bin.000001 Fri May 10 10:12:17 2019 - [info] Binlog setting check done. Fri May 10 10:12:17 2019 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers.. Fri May 10 10:12:17 2019 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user=‘mhauser‘ --slave_host=192.168.148.27 --slave_ip=192.168.148.27 --slave_port=3306 --workdir=/opt/mastermha/app1 --target_version=10.2.23-MariaDB-log --manager_version=0.56 --relay_log_info=/data/mysql/relay-log.info --relay_dir=/data/mysql/ --slave_pass=xxx Fri May 10 10:12:17 2019 - [info] Connecting to root@192.168.148.27(192.168.148.27:22).. Checking slave recovery environment settings.. Opening /data/mysql/relay-log.info ... ok. Relay log found at /data/mysql, up to localhost-relay-bin.000002 Temporary relay log file is /data/mysql/localhost-relay-bin.000002 Testing mysql connection and privileges.. done. Testing mysqlbinlog output.. done. Cleaning up test file(s).. done. Fri May 10 10:12:18 2019 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user=‘mhauser‘ --slave_host=192.168.148.37 --slave_ip=192.168.148.37 --slave_port=3306 --workdir=/opt/mastermha/app1 --target_version=10.2.23-MariaDB-log --manager_version=0.56 --relay_log_info=/data/mysql/relay-log.info --relay_dir=/data/mysql/ --slave_pass=xxx Fri May 10 10:12:18 2019 - [info] Connecting to root@192.168.148.37(192.168.148.37:22).. Checking slave recovery environment settings.. Opening /data/mysql/relay-log.info ... ok. Relay log found at /data/mysql, up to localhost-relay-bin.000002 Temporary relay log file is /data/mysql/localhost-relay-bin.000002 Testing mysql connection and privileges.. done. Testing mysqlbinlog output.. done. Cleaning up test file(s).. done. Fri May 10 10:12:18 2019 - [info] Slaves settings check done. Fri May 10 10:12:18 2019 - [info] 192.168.148.7(192.168.148.7:3306) (current master) +--192.168.148.27(192.168.148.27:3306) +--192.168.148.37(192.168.148.37:3306) Fri May 10 10:12:18 2019 - [info] Checking replication health on 192.168.148.27.. Fri May 10 10:12:18 2019 - [info] ok. Fri May 10 10:12:18 2019 - [info] Checking replication health on 192.168.148.37.. Fri May 10 10:12:18 2019 - [info] ok. Fri May 10 10:12:18 2019 - [warning] master_ip_failover_script is not defined. Fri May 10 10:12:18 2019 - [warning] shutdown_script is not defined. Fri May 10 10:12:18 2019 - [info] Got exit code 0 (Not master dead). MySQL Replication Health is OK. # 启动管理程序,如果主数据库故障会进行主从切换 [root@localhost ~]# masterha_manager --cOnf=/etc/mastermha/app1.cnf

手工kill主数据库进程查看切换效果

[root@node1 ~]# ps -ef | grep mysqld root 9774 1 0 10:21 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/node1.localdomain.pid mysql 9936 9774 0 10:21 ? 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/node1.localdomain.err --pid-file=/data/mysql/node1.localdomain.pid --socket=/tmp/mysql.sock --port=3306 [root@node1 ~]# kill -9 9774 [root@node1 ~]# kill -9 9936 # 监控节点的日志显示 主库切换 [root@localhost mastermha]# tail /opt/mastermha/app1/manager.log Started automated(non-interactive) failover. The latest slave 192.168.148.27(192.168.148.27:3306) has all relay logs for recovery. Selected 192.168.148.27(192.168.148.27:3306) as a new master. 192.168.148.27(192.168.148.27:3306): OK: Applying all logs succeeded. 192.168.148.37(192.168.148.37:3306): This host has the latest relay log events. Generating relay diff files from the latest slave succeeded. 192.168.148.37(192.168.148.37:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.148.27(192.168.148.27:3306) 192.168.148.27(192.168.148.27:3306): Resetting slave info succeeded. Master failover to 192.168.148.27(192.168.148.27:3306) completed successfully. # 192.168.148.27 查看信息 MariaDB [mysql]> show slave hosts; +-----------+------+------+-----------+ | Server_id | Host | Port | Master_id | +-----------+------+------+-----------+ | 37 | | 3306 | 27 | +-----------+------+------+-----------+ # 192.168.148.37 查看信息 MariaDB [mysql]> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.148.27 Master_User: repluser Master_Port: 3306 Connect_Retry: 60

MariaDB高可用架构之MHA


推荐阅读
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • shell脚本实战 pdf_Shell 脚本操作数据库实战
    安装mariadb数据库(默认没有密码,直接mysql即可进入数据库管理控制台)yuminstallmariadbmariadb-serv ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
author-avatar
撒哈拉2011的马甲_978
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有