MySQL_MHA架构_更换cpan国内源

MHA是用于MySQL的高可用性管理工具,采用Perl编写,能快速实现故障切换并在30秒内完成,保证数据一致性。它由管理节点和数据节点组成,监控主服务器并自动提升从服务器。MHA支持各种存储引擎,但仅监视主数据库,且需SSH互信,已不再维护。文章介绍了MHA的组件、配置、优缺点以及搭建过程。
摘要由CSDN通过智能技术生成

MHA简介

MHA(Master High Availability Manager and tools for MySQL)目前在MySQL高 可用方面是一个相对成熟的解决方案,它是采用Perl语言编写 的一个脚本管理工具,可以实现故障切换和主从提升功能。在 MySQL 故障切换过程 中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障 切换的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。

管理节点可以单独部署在一台独立的服务器上管理多个主从集群,也可以部署在一台从服务器上。

数据节点运行在每台 MySQL 服务器上。 

 管理节点会定时探测集群中的主服务器,当主服务器出现故障时,它可以自动将具有 最新数据的从服务器提升为新的主服务器,然后将所有其他的从服务器 slave重新指 向新的主服务器 master。整个故障转移过程对应用程序完全透明。

MHA的优势在于可以非常快速地完成故障转移及提升从服务器角色、主服务崩溃时 不会导致数据不一致、用户无须修改当前 MySQL 设置、不会产生性能损失,并且适 用于任何存储引擎。

提供的工具

Manager节点:   

masterha_check_ssh :MHA 依赖的 ssh 环境监测工具;   

masterha_check_repl :MYSQL 复制环境检测工具;   

masterga_manager :MHA 服务主程序;   

masterha_check_status :MHA 运行状态探测工具;   

masterha_master_monitor :MYSQL master 节点可用性监测工具;   masterha_master_swith:master :节点切换工具;   

masterha_conf_host :添加或删除配置的节点;   

masterha_stop :关闭 MHA 服务的工具。

Node节点:(这些工具通常由MHA Manager的脚本触发,无需人为操作)   

save_binary_logs :保存和复制 master 的二进制日志;   

apply_diff_relay_logs :识别差异的中继日志事件并应用于其他 slave;   

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

自定义扩展:  

secondary_check_script :通过多条网络路由检测master的可用性;   master_ip_failover_script :更新application使用的masterip;   

report_script :发送报告;   

init_conf_load_script :加载初始配置参数;   

master_ip_online_change_script ;更新master节点ip地址。

MHA的优缺点

优点

可以根据需要扩展 MySQL 的节点数量。

只要复制没有延迟,MHA 通常可以在几秒内实现故障切换。

可以使用任何存储引擎。

缺点

仅监视主数据库。

需要做 SSH 互信 使用 Perl 开发,二次开发困难。

跟不上 MySQL 新版本,最近一次发版是 2018 年。

(曾经MHA所解决的问题,已经逐渐被官方的解决方案所代替,因此,从MySQL8.0开 始,作者已经不在对MHA进行开发和维护。)

搭建

架构规划

 

设置主机名

hostnamectl set-hostname 1_master
# 1_master
hostnamectl set-hostname 1_slave1
# 1_slave1
hostnamectl set-hostname 1_slave2
# 1_slave2

配置Host文件

192.168.126.6   1_master
192.168.126.7   1_slave1
192.168.126.9   1_slave2

配置ssh互信

三台机器互相免密码登录,注意,自己跟自己也要配免密码登录

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub "root@192.168.162.6"
ssh-copy-id -i /root/.ssh/id_rsa.pub "root@192.168.126.7"
ssh-copy-id -i /root/.ssh/id_rsa.pub "root@192.168.126.9"
# 三台都执行
# 并都测试
ssh 192.168.162.6 date
ssh 192.168.162.7 date
ssh 192.168.162.9 date

 GTID同步

        gtid的全称为全局事务标识符(global transaction identifiner),是MySQL 5.6引 入的一个特性。gtid保证了MySQL的每一个事务都有一个全局唯一的标识,该标识在 本实例甚至主从复制环境都保证全局唯一。

         GTID = server_uuid:sequence_id server_uuid是一个32字节+1字节(/0)的字符串,MySQL第一次启动时生成,并将该 信息写入datadir目录下的auto.cnf文件。如果该文件丢失,MySQL会重新生成一个 新的server_uuid。相同的server_uuid下的事务对应的sequence_id在binlog文件中 是递增且连续有序的,他们以集合的方式呈现。

配置my.cnf文件,重启mysql服务

# 1_master
vim /etc/my.cnf
[mysqld]
server-id=6
log-bin=mysql-bin
skip-name-resolve = on
relay-log = relay-log
gtid-mode=on
enforce-gtid-consistency=true
default_authentication_plugin=mysql_native_password
# 1_slave1
vim /etc/my.cnf
[mysqld]
server-id = 7
relay_log = relay-log
read_only = 1
log_bin = mysql-log
log_slave_updates = 1
relay_log_purge = 0
skip_name_resolve
gtid-mode=on
enforce-gtid-consistency=true
default_authentication_plugin=mysql_native_password
# 1_slave2
vim /etc/my.cnf
[mysqld]
server-id = 9
relay_log = relay-log
read_only = 1
log_bin = mysql-log
log_slave_updates = 1
relay_log_purge = 0
skip_name_resolve
gtid-mode=on
enforce-gtid-consistency=true
default_authentication_plugin=mysql_native_password

#都重启
 systemctl restart mysqld
mysql> SHOW GLOBAL VARIABLES LIKE 'GTID_MODE';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | ON    |
+---------------+-------+
1 row in set (0.01 sec)
# 如果模式没打开就打开
mysql> SET GLOBAL GTID_MODE = ON;
Query OK, 0 rows affected (0.00 sec)

主从同步

基于GTID的方式只需要开启GTID,也就是全局事务ID,后面就可以直接使用比较简 单的方式来进行复制,不用关心当前的binlog应用到的位置。

# 主库
mysql>create user repl@'%' identified with mysql_native_password by 'Ch#123546';
mysql> grant replication slave on *.* to repl@'%' with grant option;
mysql> flush privileges;
# 从库
change master to
master_host='192.168.126.6',
master_port=3306,
master_user='repl',
master_password='Ch#123456',
master_auto_position=1;

Master设置VIP,在主库上执行添加VIP的过程(第一次手动添加,后续启动切换)

ifconfig ens33:1 192.168.42.5
# 不存在的网段

源码安装mha4mysql-node和mha4mysql-manager

mha 的 manager 软件是依赖于 node 软件运行的,所以需要先安装 node 端

编译安装node(三个节点都做)

yum install -y perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN
tar zxvf mha4mysql-node-0.58.tar.gz -C /user/local
cd /usr/local/mha4mysql-node-0.58
perl Makefile.PL
make
make install

安装完成后 会在/usr/local/bin/生成以下脚本文件,Node脚本说明(这些工具通常由 MHAManager的脚本触发)

编译安装Manager(在master节点上)

yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
tar -zxf mha4mysql-manager-0.58.tar.gz -C /usr/local/
cd /usr/local/mha4mysql-manager-0.58/
perl Makefile.PL
make
make install

这时使用make无法进行编译,在自动下载一些依赖的时候下载超时,需要更换国内源。

更换cpan国内源

# perl修改镜像源地址
[root@1_master mha4mysql-manager-0.58]# perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan[1]> o conf urllist unshift https://mirrors.aliyun.com/CPAN/
Please use 'o conf commit' to make the config permanent!


cpan[2]> o conf commit
commit: wrote '/root/.cpan/CPAN/MyConfig.pm'

cpan[3]> o conf urllist
    urllist
        0 [https://mirrors.aliyun.com/CPAN/]
        1 [http://www.cpan.org/]
        2 [https://mirrors.aliyun.com/CPAN/]
        3 [https://mirrors.tuna.tsinghua.edu.cn/CPAN/]
Type 'o conf' to view all configuration items
# 更换后就可以使用make命令

编译安装完成后,在/usr/local/mha4mysql-manager-0.58/samples/scripts 目录下会有相关脚本

master_ip_failover自动切换时 VIP 管理的脚本
master_ip_online_change在线切换时 vip 的管理
power_manager故障发生后关闭主机的脚本
send_report因故障切换后发送报警的脚本

修改故障转移脚本(master_ip_failover),添加如下

vim /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_failover
# 配置一个闲置的网段
my $vip = '192.168.126.5/24';
my $key = '1';
m y $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
# 换成自己的网卡名称
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
# 换成自己的网卡名称
my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 192.168.126.5";
# 换成自己的网卡名称

配置MHA

由于脚本中并没有master_ip_failover脚本,启动时会报错,请到 mha4mysqlmanager-0.5X/samples/scripts下拷贝对应脚本到指定位置。或注释掉 master_ip_failover_script也可以。

mkdir -p /usr/local/mha
mkdir -p /etc/mha
vim /etc/mha/mha.cnf 

[server default]
manager_workdir=/usr/local/mha
manager_log=/usr/local/mha/manager_running.log
master_ip_failover_script=/usr/local/mha/scripts/master_ip_failov
er
master_ip_online_change_script=/usr/local/mha/scripts/master_ip_o
nline_change
ping_interval=1
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 1_slave1 -s 1_slave2 --user=root --master_host=1_master --master_ip=192.168.126.6 --master_port=3306
ssh_user=root
user=root
password=Ch#123456
repl_user=repl
repl_password=Ch#123456
[server1]
hostname=192.168.126.6
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.126.7
port=3306
[server3]
hostname=192.168.126.9
port=3306

执行完命令后,需要创建对应的目录如下,然后将自带的一些shell脚本copy到此目录中

cd /usr/local/mha
mkdir scripts
cd scripts/
cp /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_* .

MHA服务启动

到这步我才发现我在安装perl-Log-Dispatch的时候,yum仓库并没有这个包,所以有两个解决办法

yum install epel-release
# epel-release 是一个软件仓库,全称是Extra Packages for Enterprise Linux(企业版Linux的额外软件# 包)。
# 这个软件仓库提供了一些常用的软件包,这些软件包可能没有包含在主要的 Linux 发行版中。
# 这些软件包通常是由社区维护的,而不是由 Linux 发行版的官方团队维护的。
# 如果您想要在您的 Linux 系统中安装一些额外的软件包,
# 您可以将 epel-release 软件仓库添加到您的系统中。
yum install perl-CPAN
perl -MCPAN -e 'install Log::Dispatch'
# 手动安装该软件包。
# 您可以在 CPAN 上找到该软件包的安装文件并进行手动安装。
# 手动安装软件包可能需要下载和编译源代码,并且可能需要满足其他依赖项。
# 因此,这可能需要一些时间和技术知识。
# 我反正使用第一种,第二种已经在更换国内源就花费好长时间了。

1.检查SSH情况

[root@1_master bin]# masterha_check_ssh --conf=/etc/mha/mha.cnf
Sun Apr 16 09:34:31 2023 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Apr 16 09:34:31 2023 - [info] Reading application default configuration from /etc/mha/mha.cnf..
Sun Apr 16 09:34:31 2023 - [info] Reading server configuration from /etc/mha/mha.cnf..
Sun Apr 16 09:34:31 2023 - [info] Starting SSH connection tests..
Sun Apr 16 09:34:32 2023 - [debug]
Sun Apr 16 09:34:31 2023 - [debug]  Connecting via SSH from root@192.168.126.6(192.168.126.6:22) to root@192.168.126.7(192.168.126.7:22)..
Sun Apr 16 09:34:31 2023 - [debug]   ok.
Sun Apr 16 09:34:31 2023 - [debug]  Connecting via SSH from root@192.168.126.6(192.168.126.6:22) to root@192.168.126.9(192.168.126.9:22)..
Sun Apr 16 09:34:32 2023 - [debug]   ok.
Sun Apr 16 09:34:33 2023 - [debug]
Sun Apr 16 09:34:32 2023 - [debug]  Connecting via SSH from root@192.168.126.9(192.168.126.9:22) to root@192.168.126.6(192.168.126.6:22)..
Sun Apr 16 09:34:32 2023 - [debug]   ok.
Sun Apr 16 09:34:32 2023 - [debug]  Connecting via SSH from root@192.168.126.9(192.168.126.9:22) to root@192.168.126.7(192.168.126.7:22)..
Sun Apr 16 09:34:33 2023 - [debug]   ok.
Sun Apr 16 09:34:33 2023 - [debug]
Sun Apr 16 09:34:31 2023 - [debug]  Connecting via SSH from root@192.168.126.7(192.168.126.7:22) to root@192.168.126.6(192.168.126.6:22)..
Sun Apr 16 09:34:32 2023 - [debug]   ok.
Sun Apr 16 09:34:32 2023 - [debug]  Connecting via SSH from root@192.168.126.7(192.168.126.7:22) to root@192.168.126.9(192.168.126.9:22)..
Sun Apr 16 09:34:32 2023 - [debug]   ok.
Sun Apr 16 09:34:33 2023 - [info] All SSH connection tests passed successfully.

2.检查复制情况

masterha_check_repl --conf=/etc/mha/mha.cnf
# Bareword "FIXME_xxx" not allowed while "strict subs" in use at 
# /usr/local/mha/scripts/master_ip_failover line 99.
# Execution of /usr/local/mha/scripts/master_ip_failover aborted due to compilation errors.
# Sun Apr 16 09:46:57 2023 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln229]  
# Failed to get master_ip_failover_script status with return code 255:0.
# Sun Apr 16 09:46:57 2023 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln427] 
# Error happened on checking configurations.  at /usr/local/bin/masterha_check_repl line 
# 48.
# Sun Apr 16 09:46:57 2023 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln525] 
# Error happened on monitoring servers.
# Sun Apr 16 09:46:57 2023 - [info] Got exit code 1 (Not master dead).
# 
# MySQL Replication Health is NOT OK!
# 根据报错我们把/usr/local/mha/scripts/master_ip_failover的第99行'FIXME_xxx'注释掉
# 后面的报错也一并解决了
# 虽然还有报错,但是看到MySQL Replication Health is OK.应该就行了

3.检查MHA状态

[root@1_master bin]# masterha_check_status -conf=/etc/mha/mha.cnf
mha is stopped(2:NOT_RUNNING).

4.启动MHA Manager ,并查看状态

[root@1_master bin]# nohup masterha_manager --conf=/etc/mha/mha.cnf < /dev/null > /usr/local/mha/manager_start.log 2>&1 &
[1] 31703
[root@1_master bin]# masterha_check_status --conf=/etc/mha/mha.cnf
mha (pid:31819) is running(0:PING_OK), master:192.168.126.6

5.关闭MHA-manager 

[root@1_master bin]# masterha_stop --conf=/etc/mha/mha.cnf
Stopped mha successfully.
[1]+  Exit 1                  nohup masterha_manager --conf=/etc/mha/mha.cnf < /dev/null > /usr/local/mha/manager_start.log 2>&1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值