rocky mha部署mysql
时间: 2025-07-10 11:16:21 浏览: 12
<think>我们正在Rocky Linux上部署MySQL的MHA架构。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 [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
```
测试免密登录每个节点。
### 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和Node的RPM包(需根据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 [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
```
#### 四、安装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天
阅读全文
相关推荐


















