MYSQL 之 MHA架构搭建实验步骤

目录

  • 一、MHA的概述
    • 1.1MHA工作原理总结为以下几条:
  • 二:MHA切换
    • 2.1 验证复制设置以及确认当前master状态
    • 2.2 确认新master
    • 2.3 当前master停写
    • 2.4 等待其他slave追上当前master,同步无延迟
    • 2.5 确保新master可写
    • 2.6 让其他slave指向新master
  • 三、MHA的案例
    • 3.1、案例需求
    • 3.2具体搭建过程
    • 3.3、安装 MHA
    • 3.5、配置无密码访问
    • 3.5、配置MHA

一、MHA的概述

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA的组成
该软件由两部分组成: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试图从宕机的主服务器.上保存二进制日志,最大程度的保证数据的不丢失
  • 使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险

1.1MHA工作原理总结为以下几条:

从宕机崩溃的master保存二进制日志事件(binlog events);
识别含有最新更新的slave;
应用差异的中继日志(relay log)到其他slave;
应用从master保存的二进制日志事件(binlog events);
提升一个slave为新master;
使用其他的slave连接新的master进行复制。
验证复制设置以及确认当前master状态

  • 连接所有hosts,MHA自动来确认当前master是哪个,配置文件中无需指定哪个是master。如果其中有任何一个slave挂了,脚本立即退出,停止监控。如果有一些必要的脚本没有在MHA
    Node节点安装,那么MHA在这个阶段终止,且停止监控。

监控master

  • 监控master,直到master挂了。这个阶段,MHA不会监控slave,Stopping/Restarting/Adding/Removing操作在slave上,不会影响当前的MHA监控进程。当你添加或者删除slave的时候,请更新好配置文件,最好重启MHA。

检测master是否失败

  • 如果MHA Manger三次间隔时间都没办法连接master
    server,就会进入这个阶段。如果你设置了secondary_check_script
    ,那么MHA会调用脚本做二次检测来判断master是否是真的挂了。接下来的步骤,就是masterha_master_switch的工作流程了

再次验证slave的配置

  • 如果发现任何不合法的复制配置(有些slave的master不是同一个),那么MHA会停止监控,且报错。可以设置ignore_fail忽略。这一步是处于安全考虑,很有可能,复制的配置文件已经被改掉了,所以double
    check是比较推荐的做法。检查最后一次failover(故障转移)的状态
    如果上一次的failover报错,或者上一次的failover结束的太近(默认3天),MHA停止监控,停止failover,那么在masterha_manager命令中设置ignore_last_failover,wait_on_failover_error来改变这一检测。这么做,也是出于安全考虑。频繁的failover,检查下是否网络出问题,或者其他错误呢?

关掉失败的master的服务器(可选)

  • 如果在配置文件中定义了master_ip_failover_script and/or shutdown_script
    ,MHA会调用这些的脚本。关闭dead master,避免脑裂(值得商榷)。

恢复一台新master

  • 从crashed master服务器上保存binlog到Manager(如果可以的话如果dead
    master可以SSH的话,拷贝binary
    logs从最新的slave上的end_log_pos(Read_Master_Log_Pos)位置开始拷贝。选举新master
    一般根据配置文件的设置来决定选举谁,如果想设置一些候选master,设置candidate_master=1;如果想设置一些host,永远都不会选举,设置no_master=1;确认最新的slave
    (这台slave拥有最新的relay-log)。恢复和提升新master根据老master binlog生成差异日志,应用日志到new
    master,如果这一步发生错误(如:duplicate key error),MHA停止恢复,并且其余的slave也停止恢复。

二:MHA切换

2.1 验证复制设置以及确认当前master状态

连接配置文件中列出的所有hosts,MHA自动来确认当前master是哪个,配置文件中无需指定哪个是master。执行 flush tables 命令在master上(可选). 这样可以缩短FLUSH TABLES WITH READ LOCK的时间。
既不监控master,也不会failover。
检查下面的条件是否满足。

I

  • O线程是否在所有slave上都是running
  • SQL线程是否在所有slave上都是running
  • Seconds_Behind_Master 是否低于2秒(—running_updates_limit=N)
  • master上是否没有长的更新语句大于2秒

2.2 确认新master

  • 新master需要设置:
    –new_master_host参数。原来的master和新的master必须要有同样的复制过滤条件(binlog-do-db and
    binlog-ignore-db)。

2.3 当前master停写

  • 如果你在配置中定义了master_ip_online_change_script,MHA会调用它。可以通过设置SET GLOBAL
    read_only=1来完美的阻止写入。在老master上执行FLUSH TABLES WITH READ
    LOCK来阻止所有的写(–skip_lock_all_tables可以忽略这一步)。

2.4 等待其他slave追上当前master,同步无延迟

  • 调用这个函数MASTER_LOG_POS()。

2.5 确保新master可写

  • 执行SHOW MASTER STATUS来确定新master的binary
    log文件名和position。如果设置了master_ip_online_change_script,会调用它。可以创建写权限的用户,SET
    GLOBAL read_only=0。

2.6 让其他slave指向新master

  • 并行执行CHANGE MASTER, START SLAVE。

    MHA组件介绍 MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。

    Manager工具包主要包括以下几个工具:

(1)masterha_check_ssh #检查MHA的SSH配置状况;

(2)masterha_check_repl #检查MySQL复制状况;

(3)masterha_manger #启动MHA;

(4)masterha_check_status #检测当前MHA运行状态;

(5)masterha_master_monitor #检测master是否宕机;

(6)masterha_master_switch #控制故障转移(自动或者手动);

(7)masterha_conf_host #添加或删除配置的server信息;

Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

(1)save_binary_logs #保存和复制master的二进制日志;

(2)apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave;

(3)purge_relay_logs #清除中继日志(不会阻塞SQL线程);

三、MHA的案例

3.1、案例需求

  • 本案例要求通过MHA监控MySQL数据库在故障时进行自动切换,不影响业务。
    案例实现思路
    1、 安装MySQL数据库
    2、 配置MySQl一主两从
    3、 安装MHA软件
    4、 配置无密码认证
    5、 配置MySQL MHA 高可用
    6、 模拟 master 故障切换

3.2具体搭建过程

这里建议实验主机用 hostnamectl 命令修改,方便实验。

#将manager服务器的主机名改为manager
hostnamectl set-hostname manager
su
#修改服务器名称,将manster服务器的主机名改为manster
hostnamectl set-hostname manster
su
 #修改服务器名称,将slave1服务器的主机名改为slaveq
hostnamectl set-hostname slave1
 su
 #修改服务器名称,将slave2服务器的主机名改为slave2
hostnamectl set-hostname slave2
 su

实现MySQL的一主两从
一、MYSQL数据库已经安装完成,接下来是 Mysql 的一主两从部署。

主服务器 master:

vim /etc/my.cnf
server-id = 1               //指定id号,服务器的唯一标识,不能相同
log-bin=master-bin           //主服务器日志文件
log-slave-updates=true       //从服务器更新二进制日志

MYSQL 之 MHA架构搭建实验步骤_第1张图片
重启服务

systemctl restart mysqld

  • 从服务器slave1:
    1、修改配置文件
vim /etc/my.cnf

server-id = 2       
relay-log=relay-log-bin     //从主服务器上同步日志文件记录到本地  
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称

MYSQL 之 MHA架构搭建实验步骤_第2张图片
注意:如果你的 mysql 手工编译安装的是 5.7 版本,从服务器一定要在client段把 utf-8 这行注释掉,否则在最后检查MHA健康状况时报错。

[client]
#default-character-set=utf8	  //注释掉此行代码

2、重启服务

systemctl restart mysqld

同样从服务器 slave2 修改id和日志,重启服务。

vim /etc/my.cnf
server-id = 3       
relay-log=relay-log-bin     //从主服务器上同步日志文件记录到本地  
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称
#重启服务
systemctl restart mysqld

MYSQL 之 MHA架构搭建实验步骤_第3张图片
3、给master、slave1、slave2 分别建立软链接


你可能感兴趣的:(云计算,数据库,运维,云计算,mysql)