MySQL的高可用(MHA)

MySQL的高可用(MHA)

MHA简介

MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其他从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主二从,即一台充当master,一台充当备用master,另外一台充当从数据库,出于机器成本的考虑,淘宝进行了改造,目前淘宝TMHA已经一主一从。

MHA架构

MHA的工作原理


MHA是由一台manager服务器远程监控主服务器,当主服务器挂了提升一台从服务器作为主服务器。
当主节点挂了,manager首先要查看哪台从节点,同步的数据最多,然后提升同步最多的从节点为主节点,再将其余的MySQL服务器对他做从节点。
如果原主节点没彻底死透,manager会让新的主机通过ssh协议远程连接到原先的主节点,拉取二进制日志进行同步。如果主节死透了那就放弃。  


MHA搭建

环境准备

一、准备4台主机,管理节点1台,主节点MySQL服务器1台,从节点MySQL服务器2台

主机 IP
Manager 192.168.73.111
Master 192.168.73.110
Slave1 192.168.73.112
Slave2 192.168.73.113

二、将Manager管理节点配置为时间服务器,向所有MySQL服务器提供时间同步。

1.安装chrony服务

[[email protected] ~]# yum install -y chrony

2.修改chrony配置文件

[[email protected] ~]# vim /etc/chrony.conf
server 172.22.0.1 iburst
allow 192.168.0.0/16
local stratum 10

3.启动chrony服务

[[email protected] ~]# systemctl start chronyd

4.将MySQL服务器与Manager服务器进行时间同步
4.1在所有MySQL主机上修改配置文件并启动,并启动服务

[[email protected] ~]# sed -i ‘/^server 0/i server 192.168.73.111 iburst‘ /etc/chrony.conf
[[email protected] ~]# systemctl start chronyd

4.2确认时间同步

[[email protected] ~]# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  ‘^‘ = server, ‘=‘ = peer, ‘#‘ = local clock.
 / .- Source state ‘*‘ = current synced, ‘+‘ = combined , ‘-‘ = not combined,
| /   ‘?‘ = unreachable, ‘x‘ = time may be in error, ‘~‘ = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.73.111                4   6   377    54    +25us[  +41us] +/-  105ms

三、配置ssh为的密钥认证登陆

当主节点宕机,manager会让从节点通过ssh协议去尝试连接主节点,并拉取二进制日志,所以要时用密钥的认证方式让从节点登陆到主节点拉取数据。
1.在manager服务器上生成私钥文件

[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yAvC2PJUlRyAf1udlrVXzmIsUljTdUdW6X6FVpQ3Ajo [email protected]
The key‘s randomart image is:
+---[RSA 2048]----+
|   ..ooo   ++. +%|
|  .  .o   o oo.=*|
|   ..    E = oo*o|
| + ...... B o B.+|
|o = ..ooS. . =...|
| + . ...       ..|
|  .   .         .|
|                 |
|                 |
+----[SHA256]-----+

2.将公钥文件复制给自己

[[email protected] ~]# ssh-copy-id 127.0.0.1

3.将整个~/.ssh目录复制给所有的MySQL主机

[[email protected] ~]# scp -r ~/.ssh 192.168.73.110:/root

至此所有环境准备完毕

一、配置主从复制

主节点配置

1.修改配置文件

[[email protected] ~]# vim /etc/my.cnf
[mysqld]
server-id=1
log-bin
binlog-format=row
skip_name_resolve

2.启动数据库服务

[[email protected] ~]# systemctl start mariadb

3.创建主从复制账号

[[email protected] ~]# mysql -e "GRANT REPLICATION SLAVE ON *.* TO ‘repluser‘@‘192.168.73.%‘ IDENTIFIED BY ‘centos‘;"

4.添加mha的管理账号,让管理节点远程连接到主机用来设置主从调整

[[email protected] ~]# mysql -e "GRANT ALL ON *.* TO ‘mhauser‘@‘192.168.73.%‘ IDENTIFIED BY ‘centos‘;"

从节点配置

1.修改配置文件

[[email protected] ~]# vim /etc/my.cnf
[mysqld]
server-id=2
read-only
log-bin
relay_log_purge=0
skip_name_resolve

2.启动服务

[[email protected] ~]# systemctl start mariadb

3.配置CHANGE MASTER TO

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=‘192.168.73.110‘, MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘centos‘,MASTER_PORT=3306,MASTER_LOG_FILE=‘mariadb-bin.000001‘,MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.00 sec)

4.启动线程

MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

在Slave2节点上也执行相同的操作,此处步骤省略,需要注意server-id需要修改为和其他主从节点不同

5.测试
主节点导入hellodb库

[[email protected] ~]# mysql < hellodb_innodb.sql

从节点查看是否同步
slave1

[[email protected] ~]# mysql -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+

Slave2

[[email protected] ~]# mysql -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+

二、配置管理节点及被管理节点

1.在管理节上安装mha4mysql-manager、mha4mysql-node,将两个包放在同一目录下

[[email protected] ~]# yum install *.rpm -y  #这两个包有依赖管理需要一起安装

2.在所有被管理节点上安装mha4mysql-node

[[email protected] ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
[[email protected] ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
[[email protected] ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

3.在管理节点上创建配置文件

[[email protected] ~]# vim /etc/mha/aap1.conf

[server default]
user=mhauser
password=centos
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=centos
ping_interval=1

[server1]
hostname=192.168.73.110
candidate_master=1
[server2]
hostname=192.168.73.112
candidate_master=1
[server3]
hostname=192.168.73.113
candidate_master=1 

4.做检查
4.1检查ssh连接

[[email protected] ~]# masterha_check_ssh --conf=/etc/mha/aap1.conf 

4.2检查主从复制

[[email protected] ~]# masterha_check_repl --conf=/etc/mha/aap1.conf 

5.以上两项全部成功后启动程序
mha这个程序是跑在前台的,一次性的可以使用nohub或screen来解决跑在前台的问题

[[email protected] ~]# masterha_manager --conf=/etc/mha/aap1.conf 

三、测试

1.在master上跑个存储过程,导入存储过程

[[email protected] ~]# mysql hellodb < testlog.sql 

2.调用存储过程

MariaDB [(none)]> USE hellodb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [hellodb]> call pro_testlog;

3.另起一个主节点窗口将主节点断网

[[email protected] ~]# ifdown ens33

4.manager端完成切换退出,查看日志,查看新的主节点是哪台slave

[[email protected] app1]# tail /data/mastermha/app1/manager.log

Started automated(non-interactive) failover.
The latest slave 192.168.73.112(192.168.73.112:3306) has all relay logs for recovery.
Selected 192.168.73.112(192.168.73.112:3306) as a new master.
192.168.73.112(192.168.73.112:3306): OK: Applying all logs succeeded.
192.168.73.113(192.168.73.113:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.73.113(192.168.73.113:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.73.112(192.168.73.112:3306)
192.168.73.112(192.168.73.112:3306): Resetting slave info succeeded.
Master failover to 192.168.73.112(192.168.73.112:3306) completed successfully.
#此处显示最新的主节点为192.168.73.112

由于从节点在配置文件中定义的为read-only,此时被提升为主能执行写操作时应为管理服务器上有管理账号,他将从节点的服务器全局变量read_only给关闭了

[[email protected] ~]# mysql -e "SELECT @@read_only;"
+-------------+
| @@read_only |
+-------------+
|           0 |
+-------------+

为了防止服务服务重启再次变为read-only,此时需要对新主节点的配置文件进行修改将read-only行注释

[mysqld]
server-id=2
#read-only
log-bin
relay_log_purge=0
skip_name_resolve

四、测试新的主节点

1.对hellodb.teachers表插入数据

[[email protected] ~]# mysql -e "INSERT hellodb.teachers VALUES(5,‘Tang San‘,30,‘M‘);"

2.Slave2主机上查看是否同步

[[email protected] ~]# mysql -e "SELECT * FROM hellodb.teachers;"
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | Tang San      |  30 | M      |    #已经同步
+-----+---------------+-----+--------+

其他事项

当原主节点被修复后,将其添加为从节点使用。

原文地址:https://blog.51cto.com/11886307/2391341

时间: 2024-10-09 14:24:46

MySQL的高可用(MHA)的相关文章

MySQL之高可用MHA部署

先说一下大概原理 虚拟机A  ip为10.0.3.92           作为master 虚拟机B  ip为10.0.3.102  作为slave1 虚拟机C  ip为10.0.3.103  作为slave2 虚拟机D  ip为10.0.3.104  作为manager 首先配置一主两从环境,A为主,BC为从 然后配置所有虚拟机两两之间ssh免密登录(ssh怎么免密登录,自己百度,或者搜索我博客里的文章吧,也有记录怎么配置ssh免密登录的) D中新建配置文件 D中检测ssh配置以及主从配置是

技术实战:基于 MHA 方式实现 MySQL 的高可用(转)

转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 MHA 方式实现 Mysql 的高可用的技术实战,希望对您有所帮助. AD:51CTO网+ 首届中国APP创新评选大赛火热招募中…… 数据的重要性对于人们来说重要程度不说自明,在信息时代,数据有着比人们更大的力量,我们也知道最近的斯诺登事件,军事专家对于他掌握的数据给出的评价是,相当于美军十个重装

mysql实现高可用架构之MHA

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

Mysql 的高可用之 MHA

                                                                    Mysql 的高可用之 MHA MHA作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. 该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点).

mysql复制(高可用架构方案的基础)

mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以在全部改变中根据业务需求选择部分库和部分表的复制复制的场景: 1.数据库容灾 2.需求:创建一个从数据服务器,做数据的测试和分析 3.负载均衡 4.复制时高可用架构方案的基础 mysql高可用架构特点1.数据库故障的检测与排除2.主从数据库的切换3.数据的备份和保护 mysql高可用架构常用方案1.

基于keepalived搭建MySQL的高可用集群

http://www.cnblogs.com/ivictor/p/5522383.html 基于keepalived搭建MySQL的高可用集群 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和PXC. 对于小公司,一般推荐使用keepalived+双主,简单. 下面来部署一下 配置环境: 角色                          

分布式数据存储 - MySQL主从复制高可用方案

前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可用方案,因为主从节点中主节点仍然是单点的,一旦主节点宕机会导致应用中写失败.双主复制虽然很好的避免主节点的单点故障,但是未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换.本篇文章就来剖析主从复制的高可用. 一.基础概念介绍 Keep

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置

corosync+pacemaker+mysql+drbd 实现mysql的高可用

corosync corosync的由来是源于一个Openais的项目,是Openais的一个子 项目,可以实现HA心跳信息传输的功能,是众多实现HA集群软件中之一,heartbeat与corosync是流行的Messaging Layer (集群信息层)工具.而corosync是一个新兴的软件,相比Heartbeat这款很老很成熟的软件,corosync与Heartbeat各有优势,博主就不在这里比较之间的优势了,corosync相对于Heartbeat只能说现在比较流行. pacemaker