Linux运维——mysql高可用MHA

MHA:

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于 Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在 0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,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,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。

MHA工作原理:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log)到其他的slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新的master;

(6)使其他的slave连接新的master进行复制;

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

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

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

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

环境:   一对多复制

server1:172.25.40.1(master,mha-manger,mha-node)
server2:172.25.40.2(slave,mha-node)
server3:172.25.40.3(slave,mha-node)

注:主从复制方式:

1.一对多:配置简单

2.线性复制:可以降低master的开销

eg:server1------>server2------>server3   对于server2master和slave都要激活,因为他也要记录二进制文件推送给server3

一、配置mysql从库『server3』

master【server1】、slave【server2】配置,请查看之前的博客 mysql主从复制

1.安装

[root@server3 ~]# ls                             ##所需安装包
mysql-community-client-5.7.24-1.el7.x86_64.rpm
mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# yum install * -y
[root@server3 ~]# systemctl start mysqld

2.改密码

[root@server3 ~]# grep password /var/log/mysqld.log                     ##获取初始密码
2019-01-17T13:15:13.898545Z 1 [Note] A temporary password is generated for root@localhost: lF,,:.g96fsa
[root@server3 ~]# mysql_secure_installation    ##安全初始化
Enter password for user root:
New password:

3.下载半同步模块semisync_slave.so

为了尽可能的减少主库硬件损坏宕机造成的数据丢失,在配置MHA的同时建议配置成半同步复制

[root@server3 ~]# mysql -p
Enter password:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';    ##下载半同步slave模块

4.配置主配置文件

[root@server3 ~]# vim /etc/my.cnf


[root@server3 ~]# systemctl restart mysqld

5.加server1为主

[root@server3 ~]# mysql -p
Enter password:
mysql> change master to master_host='172.25.19.1',master_user='repl', master_password='Redhat-1',master_auto_position=1;                           ##用gtid自动
mysql> start slave;            ##开启
mysql> show slave status\G            ##查看slave状态
*************************** 1. row ***************************
 Slave_IO_Running: Yes
 Slave_SQL_Running: No           
  ##数据不一致导致
解决方法:

1)注释并行的代码
[root@server3 ~]# vim /etc/my.cnf


[root@server3 ~]# systemctl restart mysqld
2.关slave
[root@server3 ~]# mysql -pRedhat-1
mysql> stop slave;
3.备份
[root@server1 ~]# mysqldump -u root -p westos > westos.sql                 
Enter password:
[root@server1 ~]# mysqldump -u root -p --set-gtid-purged=OFF westos > westos.sql
Enter password:
[root@server1 ~]# diff westos.sql westos1.sql 17,24d16               ##对比两个文件不同
< SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
< SET @@SESSION.SQL_LOG_BIN= 0;
<
< --
< -- GTID state at the beginning of the backup
< --
<
< SET @@GLOBAL.GTID_PURGED='3472d0a6-1980-11e9-b8d1-525400963735:1-5';  
48d39
< SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
59c50
< -- Dump completed on 2019-01-17 21:30:20
---
> -- Dump completed on 2019-01-17 21:28:01

[root@server1 ~]# scp westos.sql server3:
4.导入
[root@server3 ~]# mysqladmin -u root -pRedhat-1 create westos;     ##建库
[root@server3 ~]# mysql -u root -p westos < westos.sql                 
Enter password:
5.开启slave
[root@server3 ~]# mysql -pRedhat-1
mysql> start slave;

6.加入并行
[root@server3 ~]# vim /etc/my.cnf


[root@server3 ~]# systemctl restart mysqld
7.查看slave状态
[root@server3 ~]# mysql -pRedhat-1
mysql> use westos;
mysql> select * from userlist;

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

二、安装MHA

【server1】manger、node:

[root@server1 MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm         perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm                perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm                                perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm               perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm                           perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
[root@server1 MHA-7]# yum install * -y

【server2、server3】node:

[root@server2 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@server3 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm

三、三节点相互免密连接

[root@server1 ~]# 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:
98:85:ef:f5:55:61:a3:58:da:49:4a:eb:82:96:9d:e2 root@server1
The key's randomart image is:


[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# ls
id_rsa  id_rsa.pub   known_hosts
[root@server1 .ssh]# ssh-copy-id server1
[root@server1 .ssh]# logout
Connection to 172.25.19.1 closed.
[kiosk@foundation19 ~]$ ssh root@172.25.19.1
[root@server1 ~]# scp -r .ssh/ server2:          ##将私钥、公钥发送给其他node
[root@server1 ~]# scp -r .ssh/ server3:
检测:各节点都可以免密登陆
[root@server1 ~]# ssh server1
Last login: Thu Jan 17 23:35:43 2019 from foundation19.ilt.example.com
[root@server1 ~]# logout
Connection to server1 closed.
[root@server1 ~]# ssh server2
Last login: Thu Jan 17 17:23:48 2019 from foundation19.ilt.example.com
[root@server2 ~]# logout
Connection to server2 closed.
[root@server1 ~]# ssh server3
Last login: Thu Jan 17 18:53:40 2019 from foundation19.ilt.example.com
[root@server3 ~]# logout

[root@server2 ~]# ssh server1
Last login: Thu Jan 17 23:36:20 2019 from server1
[root@server1 ~]# logout
Connection to server1 closed.
[root@server2 ~]# ssh server2
Last login: Thu Jan 17 23:36:25 2019 from server1
[root@server2 ~]# logout
Connection to server2 closed.
[root@server2 ~]# ssh server3
Last login: Thu Jan 17 23:36:31 2019 from server1
[root@server3 ~]# logout

[root@server3 ~]# ssh server1
Last login: Thu Jan 17 23:36:50 2019 from server2
[root@server1 ~]# logout
Connection to server1 closed.
[root@server3 ~]# ssh server2
Last login: Thu Jan 17 23:36:54 2019 from server2
[root@server2 ~]# logout

四、配置主从  (原则:每个节点配置完全一样;文件除server-id外全一样)

[server1]
[root@server1 masterha]# mysql -p
Enter password:
mysql> grant all on *.* to root@'%' identified by 'Redhat-1';     ##给root用户所有权限
mysql> flush privileges;    ##生效
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';    ##加半同步slave
mysql> grant replication slave on *.* to repl@'172.25.19.%' identified by 'Redhat-1';   ##给repl复制权限
mysql> flush privileges;     ##生效
[root@server1 masterha]# vim /etc/my.cnf      ##与server3除id外都一样
[root@server1 masterha]# systemctl restart mysqld
[server2]
[root@server2 ~]# mysql -p
Enter password:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> set global read_only=1;
[root@server2 ~]# vim /etc/my.cnf    ##与server3除id外都一样
[root@server2 ~]# systemctl restart mysqld
[server3]
[root@server3 ~]# mysql -p
Enter password:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.48 sec)

mysql> set global read_only=1;

[root@server3 ~]# vim /etc/my.cnf


[root@server3 ~]# systemctl restart mysqld

五、配置MHA-manger

1.创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)

[root@server1 conf]# mkdir /etc/masterha

[root@server1 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz

[root@server1 MHA-7]# cd mha4mysql-manager-0.58/samples/conf/
[root@server1 conf]# ls
app1.cnf    masterha_default.cnf
[root@server1 conf]# cp   *    /etc/masterha/
[root@server1 conf]# cd /etc/masterha/
[root@server1 masterha]# ls
app1.cnf  masterha_default.cnf
[root@server1 masterha]# cat app1.cnf  >>masterha_default.cnf

2.修改配置文件

[root@server1 masterha]# vim masterha_default.cnf
[server default]
manager_workdir=/etc/masterha                           
##设置manger工作目录
manager_log=/etc/masterha/manager.log             ##设置manger日志
user=root                        ##设置监控用户
password=Redhat-1     ##监控用户密码
ssh_user=root               ##设置ssh登陆用户名
master_binlog_dir=/var/lib/mysql  ##mysql的数据目录。设置master保存binlog,以便MHA可找到master的日志。
remote_workdir=/tmp            ##设置远端mysql在发生切换时binlog的保存位置
#secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2   ##添加谁来做二次检测
ping_interval=1    ##设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
repl_user=repl     ##设置复制环境中的复制用户名
repl_password=Redhat-1   ##复制用户的密码
#master_ip_failover_script= /usr/local/bin/master_ip_failover      ##设置自动failover时切换脚本
# shutdown_script= /script/masterha/power_manager  ##设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
# report_script= /script/masterha/send_report       ##设置发生切换后发送的报警的脚本
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change  ###设置手动failover时切换脚本

[server1]
hostname=172.25.19.1

candidate_master=1
check_repl_delay=0

[server2]
hostname=172.25.19.2
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]
hostname=172.25.19.3
no_master=1

注:MHA在发生切换的过程中,从库的恢复过程中依赖于relay log的相关信息,所以这里要将relay log的自动清除设置为OFF,采用手动清除relay log的方式。在每个节点上都执行mysql -e 'set global relay_log_purge=0'

六、检测

[root@server1 masterha]# masterha_check_ssh --conf=/etc/masterha/masterha_default.cnf   ##检测manger到节点的免密ssh连接状态


[root@server1 masterha]# masterha_check_repl --conf=/etc/masterha/masterha_default.cnf  ##检测整个复制环境状态

七、

 

<think>我们正在Rocky Linux上部署MySQLMHA架构。MHA(Master High Availability)是一个用于实现MySQL主从复制高可用的工具,能够在主库发生故障时自动进行故障转移,提升一个从库为新的主库,并让其他从库重新指向新的主库。 根据引用内容,MHA部署通常需要至少三台数据库服务器(一主二从),但淘宝TMHA支持一主一从(但这里我们按标准的三节点部署)。以下是部署步骤的概述: 1. **环境准备**:三台Rocky Linux服务器,均安装MySQL(或MariaDB)并配置主从复制(通常为一主两从)。 2. **配置主从复制**:确保主从复制正常运行(引用[1][2][5]中有相关操作)。 3. **配置SSH免密登录**:MHA Manager需要能够通过SSH无密码访问所有MySQL节点。 4. **安装MHA Node和Manager**:在所有节点安装MHA Node,在Manager节点安装MHA Manager。 5. **配置MHA**:创建MHA配置文件,设置监控用户、复制用户等。 6. **启动MHA Manager**:进行故障转移测试。 现在,我们详细展开每个步骤: ### 1. 环境准备 假设有三台Rocky Linux服务器: - Master: 192.168.59.141 - Slave1: 192.168.59.142 (备用Master) - Slave2: 192.168.59.143 - MHA Manager: 可以单独一台,也可以部署在某一台Slave上(比如192.168.59.144),但通常为了节省资源,可以部署在Slave2上。 每台服务器上安装MySQL(这里以MySQL 5.7为例): ```bash sudo yum install -y mysql-community-server ``` 启动MySQL并设置开机启动: ```bash sudo systemctl start mysqld sudo systemctl enable mysqld ``` ### 2. 配置主从复制 #### 在主库(141)上操作: 修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`段添加: ```ini server-id=1 log-bin=master-bin binlog_format=row skip-name-resolve ``` 重启MySQL: ```bash sudo systemctl restart mysqld ``` 创建复制用户(引用[5]): ```sql CREATE USER 'repl'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 记录binlog位置(初始状态下,如果没有数据,可以跳过,但通常我们会先同步数据): ```sql SHOW MASTER STATUS; ``` 假设输出:`master-bin.000001, 154` #### 在从库(142,143)上操作: 修改配置文件`/etc/my.cnf`,注意server-id不同: - Slave1 (142): `server-id=2` - Slave2 (143): `server-id=3` 同样设置`log-bin`(因为Slave1可能成为新的主库,所以需要开启binlog)和`skip-name-resolve`。 重启从库的MySQL。 配置复制(引用[5]): ```sql CHANGE MASTER TO MASTER_HOST='192.168.59.141', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=154; START SLAVE; ``` 检查复制状态: ```sql SHOW SLAVE STATUS\G ``` 确保`Slave_IO_Running`和`Slave_SQL_Running`都是`Yes`。 ### 3. 配置SSH免密登录 在MHA Manager节点(假设在143上同时部署Manager)上生成SSH密钥,并分发到所有节点(包括自己): ```bash ssh-keygen -t rsa ssh-copy-id root@192.168.59.141 ssh-copy-id root@192.168.59.142 ssh-copy-id root@192.168.59.143 ``` 测试免密登录每个节点。 ### 4. 安装MHA Node和Manager 在所有节点(141,142,143)安装MHA Node。 首先安装依赖: ```bash sudo yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager ``` 下载MHA Manager和NodeRPM包(需根据Rocky Linux版本选择,或从源码安装)。这里以源码安装为例(以Node安装为例,Manager只需在管理节点安装): #### 在所有节点安装MHA Node ```bash # 下载 wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm # 安装 sudo rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm ``` #### 在Manager节点(143)安装MHA Manager ```bash wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm sudo rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm ``` ### 5. 配置MHA 在Manager节点创建配置文件目录: ```bash sudo mkdir -p /etc/mha sudo mkdir -p /var/log/mha ``` 创建配置文件`/etc/mha/app1.cnf`(引用[3]): ```ini [server default] manager_log=/var/log/mha/manager.log manager_workdir=/var/log/mha master_binlog_dir=/var/lib/mysql # 根据实际binlog目录修改,如果自定义了则写自定义目录 user=root # MHA管理用户,需要在MySQL中创建并授权 password=123456 # 该用户的密码 ping_interval=2 remote_workdir=/tmp ssh_user=root repl_user=repl # 复制用户 repl_password=123456 # 故障转移脚本(可选) master_ip_failover_script=/usr/local/bin/master_ip_failover # 关闭自动failover(可选,测试时可先关闭) # shutdown_script="" [server1] hostname=192.168.59.141 port=3306 candidate_master=1 # 设置为候选主库 [server2] hostname=192.168.59.142 port=3306 candidate_master=1 # 设置为候选主库 [server3] hostname=192.168.59.143 port=3306 no_master=1 # 该节点不会成为主库 ``` 注意:需要在MySQL中为MHA管理用户(这里用的root,但建议创建专用用户)授权。在每个MySQL节点执行: ```sql CREATE USER 'root'@'%' IDENTIFIED BY '123456'; -- 如果root用户已有远程访问权限,可跳过 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; -- 实际生产环境应限制权限 -- 或者创建专用用户,如mha CREATE USER 'mha'@'%' IDENTIFIED BY 'mhapass'; GRANT ALL PRIVILEGES ON *.* TO 'mha'@'%'; ``` ### 6. 启动MHA Manager 在Manager节点检查SSH连通性: ```bash masterha_check_ssh --conf=/etc/mha/app1.cnf ``` 检查复制集群状态: ```bash masterha_check_repl --conf=/etc/mha/app1.cnf ``` 如果检查无误,启动MHA: ```bash nohup masterha_manager --conf=/etc/mha/app1.cnf > /var/log/mha/manager.log 2>&1 & ``` 查看状态: ```bash masterha_check_status --conf=/etc/mha/app1.cnf ``` ### 故障转移测试 - 停止主库(141)的MySQL服务,观察MHA自动切换。 - 切换后,检查新的主库(142)和从库(143)的复制状态。 注意:故障转移后,原主库需要重新加入集群作为从库,并重新配置MHA。 ### 注意事项 - 确保时间同步(NTP)。 - 确保MySQL的binlog目录正确配置。 - 生产环境建议使用专用用户并最小化权限。 以上步骤在Rocky Linux 8/9上应该可行,具体版本可能需调整。如果遇到依赖问题,可尝试从EPEL仓库安装。 §§相关问题§§ 1. MHA故障转移后,如何将原主库重新加入集群? 2. 如何配置MHA的邮件报警功能? 3. MHA支持哪些MySQL版本?在MySQL 8.0上部署需要注意什么?</think>### 在Rocky Linux上部署MySQL MHA架构的完整指南 #### 一、环境准备 1. **服务器规划**(至少3台): - Master: 192.168.59.141 - Slave1(候选主): 192.168.59.142 - Slave2: 192.168.59.143 - MHA Manager节点:可部署在任意节点(建议独立服务器) 2. **基础配置**: ```bash # 所有节点执行 sudo hostnamectl set-hostname master # 分别设置slave1, slave2 sudo dnf install -y mariadb-server mariadb perl-DBD-MySQL sudo systemctl start mariadb && sudo systemctl enable mariadb sudo mysql_secure_installation # 设置root密码 ``` #### 二、配置主从复制 1. **Master节点配置** (`/etc/my.cnf.d/mariadb-server.cnf`): ```ini [mysqld] server-id=1 log-bin=master-bin binlog_format=row relay_log_purge=0 skip_name_resolve=1 ``` 2. **Slave节点配置**(修改server-id分别为2/3): ```ini [mysqld] server-id=2 # Slave1设为2,Slave2设为3 relay-log=slave-relay-bin read_only=1 ``` 3. **创建复制用户**: ```sql -- 在Master执行 CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 4. **启动主从复制**: ```sql -- 在Slave1/Slave2执行 CHANGE MASTER TO MASTER_HOST='192.168.59.141', MASTER_USER='repl', MASTER_PASSWORD='SecurePass123!', MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=245; START SLAVE; ``` 验证复制状态:`SHOW SLAVE STATUS\G`(确认`Slave_IO_Running=Yes`, `Slave_SQL_Running=Yes`)[^5] #### 三、配置SSH免密登录 ```bash # 在Manager节点执行 ssh-keygen -t rsa ssh-copy-id root@192.168.59.141 ssh-copy-id root@192.168.59.142 ssh-copy-id root@192.168.59.143 ``` #### 四、安装MHA组件 1. **所有节点安装MHA Node**: ```bash sudo dnf install -y https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-1.el8.noarch.rpm ``` 2. **Manager节点安装MHA Manager**: ```bash sudo dnf install -y https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-1.el8.noarch.rpm ``` #### 五、配置MHA Manager 1. **创建配置文件** (`/etc/masterha/app1.cnf`): ```ini [server default] manager_log=/var/log/mha/manager.log manager_workdir=/var/log/mha master_binlog_dir=/var/lib/mysql user=root password=YourRootPassword ssh_user=root repl_user=repl repl_password=SecurePass123! ping_interval=2 [server1] hostname=192.168.59.141 candidate_master=1 [server2] hostname=192.168.59.142 candidate_master=1 [server3] hostname=192.168.59.143 no_master=1 ``` 2. **创建故障转移脚本** (`/usr/bin/master_ip_failover`): ```perl #!/usr/bin/perl my $command = "sudo /sbin/ip addr add 192.168.59.100/24 dev eth0"; system($command); ``` #### 六、启动与验证 1. **检查MHA配置**: ```bash masterha_check_ssh --conf=/etc/masterha/app1.cnf # 验证SSH连通性 masterha_check_repl --conf=/etc/masterha/app1.cnf # 验证主从复制 ``` 2. **启动MHA监控**: ```bash nohup masterha_manager --conf=/etc/masterha/app1.cnf > /var/log/mha/manager.log 2>&1 & ``` 3. **验证MHA状态**: ```bash masterha_check_status --conf=/etc/masterha/app1.cnf # 应显示"app1 is running" ``` #### 七、故障转移测试 1. 停止Master节点MySQL服务: ```bash sudo systemctl stop mariadb ``` 2. 观察日志自动切换: ```bash tail -f /var/log/mha/manager.log # 应看到"Master failover to 192.168.59.142 completed" ``` 3. 验证新主库VIP: ```bash ip addr show eth0 | grep 192.168.59.100 ``` > **关键注意**:故障转移后原主库需重新配置为从库加入集群[^1][^4] #### 八、日常维护命令 ```bash # 停止MHA监控 masterha_stop --conf=/etc/masterha/app1.cnf # 手动故障转移 masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=192.168.59.141 ``` [^1]: MySQL MHA 部署全攻略:从零搭建高可用数据库架构 [^2]: Linux——MySQL双主之Keepalived高可用 [^3]: Mariadb主从复制之MHA配置 [^4]: MySQL集群Cluster [^5]: 从小白到大神之路之学习运维49天
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值