MySQL高可用之MHA集群(中)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 一、MHA概述1.1 什么是 MHAMHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点故障的问题。


小贴士:

#manager 组件安装后在/usr/local/bin/ 下面会生成几个工具,主要包括以下几个:

工具 说明
masterha_check_ssh 检查 MHA 的 SSH 配置状况
masterha_check_repl 检查 MySQL 复制状况
masterha_manger 启动 manager的脚本
masterha_check_status 检测当前 MHA 运行状态
masterha_master_monitor 检测 master 是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的 server 信息
masterha_stop 关闭manager


#node 组件安装后也会在/usr/local/bin/ 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下:

工具 说明
save_binary_logs 保存和复制 master 的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞 SQL 线程)


2、在所有服务器上配置无密码认证

##(1)在 manager 节点上配置到所有数据库节点的无密码认证
 ssh-keygen -t rsa               #一路按回车键,生成密钥。"-t rsa"指定密钥的类型。
 ssh-copy-id 192.168.72.192    #将公钥传给所有数据库节点,形成免密码连接登录
 ssh-copy-id 192.168.72.60
 ssh-copy-id 192.168.72.80
 ##(2)在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证
 ssh-keygen -t rsa
 ssh-copy-id 192.168.72.60    #将公钥传给两个从节点,形成免密码连接登录
 ssh-copy-id 192.168.72.80
 ##(3)在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证
 ssh-keygen -t rsa
 ssh-copy-id 192.168.72.192
 ssh-copy-id 192.168.72.80
 ##(4)在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证
 ssh-keygen -t rsa
 ssh-copy-id 192.168.72.192
 ssh-copy-id 192.168.72.60
复制代码


(1)在 manager 节点上配置到所有数据库节点的无密码认证

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


(2)在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证

网络异常,图片无法展示
|


网络异常,图片无法展示
|


(3)在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证

网络异常,图片无法展示
|


网络异常,图片无法展示
|


(4)在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证

网络异常,图片无法展示
|


网络异常,图片无法展示
|


3、在 manager 节点上配置 MHA

##(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
 cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
 #拷贝后会有四个执行文件
 ll /usr/local/bin/scripts/
 ------------ 虚线内是注释 -------------------------------------------------------
 master_ip_failover          #自动切换时 VIP 的管理脚本
 master_ip_online_change     #在线切换时 VIP 的管理脚本
 power_manager               #故障发生后关闭主机的脚本
 send_report                 #因故障切换后发送报警的脚本
 --------------------------------------------------------------------------------
 ##(2)复制上述的自动切换时 VIP 的管理脚本到 /usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换
 cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
 ##(3)修改内容如下:(删除原有内容,直接复制并修改vip相关参数。可在拷贝前输入 :set paste 解决vim粘贴乱序问题)
 vim /usr/local/bin/master_ip_failover
 #!/usr/bin/env perl
 use strict;
 use warnings FATAL => 'all';
 use Getopt::Long;
 my (
 $command, $ssh_user, $orig_master_host, $orig_master_ip,
 $orig_master_port, $new_master_host, $new_master_ip, $new_master_port
 );
 #############################添加内容部分#########################################
 my $vip = '192.168.72.100';                             #指定vip的地址
 my $brdc = '192.168.72.255';                            #指定vip的广播地址
 my $ifdev = 'ens33';                                    #指定vip绑定的网卡
 my $key = '1';                                          #指定vip绑定的虚拟网卡序列号
 my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";   #代表此变量值为ifconfig ens33:1 192.168.72.100
 my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";    #代表此变量值为ifconfig ens33:1 192.168.72.100 down
 my $exit_code = 0;                                      #指定退出状态码为0
 #my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
 #my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
 ##################################################################################
 GetOptions(
 'command=s' => $command,
 'ssh_user=s' => $ssh_user,
 'orig_master_host=s' => $orig_master_host,
 'orig_master_ip=s' => $orig_master_ip,
 'orig_master_port=i' => $orig_master_port,
 'new_master_host=s' => $new_master_host,
 'new_master_ip=s' => $new_master_ip,
 'new_master_port=i' => $new_master_port,
 );
 exit &main();
 sub main {
 print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
 if ( $command eq "stop" || $command eq "stopssh" ) {
 my $exit_code = 1;
 eval {
 print "Disabling the VIP on old master: $orig_master_host \n";
 &stop_vip();
 $exit_code = 0;
 };
 if ($@) {
 warn "Got Error: $@\n";
 exit $exit_code;
 }
 exit $exit_code;
 }
 elsif ( $command eq "start" ) {
 my $exit_code = 10;
 eval {
 print "Enabling the VIP - $vip on the new master - $new_master_host \n";
 &start_vip();
 $exit_code = 0;
 };
 if ($@) {
 warn $@;
 exit $exit_code;
 }
 exit $exit_code;
 }
 elsif ( $command eq "status" ) {
 print "Checking the Status of the script.. OK \n";
 exit 0;
 }
 else {
 &usage();
 exit 1;
 }
 }
 sub start_vip() {
 `ssh $ssh_user@$new_master_host " $ssh_start_vip "`;
 }
 ## A simple system call that disable the VIP on the old_master
 sub stop_vip() {
 `ssh $ssh_user@$orig_master_host " $ssh_stop_vip "`;
 }
 sub usage {
 print
 "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
 }
复制代码


(1)在 manager 节点上复制相关脚本到/usr/local/bin/ 目录。

网络异常,图片无法展示
|


(2)将master_ip_failover(自动切换时 VIP 的管理脚本)复制到/usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换。

网络异常,图片无法展示
|


(3)修改/usr/local/bin/master_ip_failover 脚本,删除原有内容,所有内容全都重新添加。

网络异常,图片无法展示
|


4、 manager节点编辑配置文件,管理 mysql 节点服务器

创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理 mysql 节点服务器。

mkdir /etc/masterha
 cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/   #复制配置文件
 vim /etc/masterha/app1.cnf   #删除原有内容,直接复制并修改节点服务器的IP地址
 [server default]
 manager_log=/var/log/masterha/app1/manager.log
 manager_workdir=/var/log/masterha/app1
 master_binlog_dir=/usr/local/mysql/data
 master_ip_failover_script=/usr/local/bin/master_ip_failover
 master_ip_online_change_script=/usr/local/bin/master_ip_online_change
 user=mha
 password=manager
 ping_interval=1
 remote_workdir=/tmp
 repl_password=123
 repl_user=myslave
 secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.72.60 -s 192.168.72.80
 shutdown_script=""
 ssh_user=root
 user=mha
 [server1]
 hostname=192.168.72.192
 port=3306
 [server2]
 candidate_master=1
 check_repl_delay=0
 hostname=192.168.72.60
 port=3306
 [server3]
 hostname=192.168.72.80
 port=3306
复制代码


网络异常,图片无法展示
|


编辑配置文件 /etc/masterha/app1.cnf

网络异常,图片无法展示
|


app1.cnf配置文件注释:

[server default]
 manager_log=/var/log/masterha/app1/manager.log   #manager日志
 manager_workdir=/var/log/masterha/app1        #manager工作目录
 master_binlog_dir=/usr/local/mysql/data/       #master保存binlog的位置,这里的路径要与master里配置的binlog的路径一致,以便MHA能找到
 master_ip_failover_script=/usr/local/bin/master_ip_failover  #设置自动failover时候的切换脚本,也就是上面的那个脚本
 master_ip_online_change_script=/usr/local/bin/master_ip_online_change  #设置手动切换时候的切换脚本
 user=mha                #设置mysql用户,给manager授权时创建的用户
 password=manager        #设置mysql用户的密码,这个密码是前文中创建监控用户的那个密码
 ping_interval=1         #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
 remote_workdir=/tmp     #设置远端mysql在发生切换时binlog的保存位置
 repl_password=123123    #设置复制用户的密码(主从同步授权时创建的用户和密码)
 repl_user=myslave       #设置复制用户的用户
 report_script=/usr/local/send_report    #设置发生切换后发送的报警的脚本
 secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.72.60 -s 192.168.72.80           #指定检查的从服务器IP地址
 shutdown_script=""      #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用,可以使用系统自带的power_manager )
 ssh_user=root           #设置ssh的登录用户名
 [server1]                  #master
 hostname=192.168.72.192
 port=3306
 [server2]                  #slave1
 hostname=192.168.72.60
 port=3306
 candidate_master=1
 #设置为候选master,设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个从库不是集群中最新的slave
 check_repl_delay=0
 #默认情况下如果一个slave落后master 超过100M的relay logs的话,MHA将不会选择该slave作为一个新的master, 因为对于这个slave的恢复需要花费很长时间;通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
 [server3]                #slave2
 hostname=192.168.72.80
 port=3306
复制代码


5、第一次配置需要在 Master 节点上手动开启虚拟IP

/sbin/ifconfig ens33:1 192.168.72.100/24
复制代码


网络异常,图片无法展示
|

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
缓存 监控 关系型数据库
MySQL PXC 集群死锁分析案例
前不久一个系统死锁导致部分业务受到影响,今次补上详细的节点日志分析过程。
20 1
|
11天前
|
关系型数据库 MySQL Serverless
体验阿里云PolarDB MySQL Serverless集群
体验阿里云PolarDB MySQL Serverless集群
|
26天前
|
关系型数据库 MySQL Serverless
Serverless 应用引擎产品使用合集之在SAE2.0上的应用如何访问云原生数据库PolarDB MySQL版集群
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
10天前
|
存储 SQL 关系型数据库
实时计算 Flink版产品使用问题之要配置MySQL集群存储节点,该如何配置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
负载均衡 关系型数据库 MySQL
MySQL PXC集群多个节点同时大量并发update同一行
如本文标题,MySQL PXC集群多个节点同时大量并发update同一行数据,会怎样? 为此,本人做了一个测试,来验证到底会怎样!
17 0
|
14天前
|
网络协议 关系型数据库 MySQL
【最佳实践】MySQL数据库迁移到PXC集群
借本次数据库迁移实践,再次总结一下MySQL数据库迁移到PXC的最佳操作路径。
24 0
|
14天前
|
网络协议 关系型数据库 MySQL
MySQL PXC集群配置IPv6
前阵子为PXC集群配置IPv6支持,遇见奇怪的问题,就是SST同步时总是报错,为此在官网论坛提交了问题,未得到答案,最后偶然得到了答案
23 0
|
21天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
19天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
18天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
994 7
Mysql 数据库主从复制

推荐镜像

更多