温馨提示×

Ubuntu MariaDB集群部署方案

小樊
32
2025-11-02 17:30:28
栏目: 云计算

Ubuntu MariaDB集群部署方案(基于Galera Cluster)

一、方案概述

MariaDB Galera Cluster是多主同步集群解决方案,支持任意节点读写、自动数据同步、故障自动转移和高一致性,适用于对高可用性要求高的生产环境(如金融、电商等)。本方案基于Ubuntu系统(推荐22.04及以上版本),采用3节点部署(最小高可用配置),使用rsync作为状态快照传输(SST)方法。

二、准备工作

1. 环境要求

  • 服务器:至少3台运行Ubuntu 22.04及以上版本的服务器(物理机或虚拟机均可);
  • 网络:节点间网络互通,开放3306(MySQL端口)、4567(Galera集群通信端口)、4568(SST端口)
  • 权限:所有节点安装sudo权限,能通过SSH互相访问。

2. 软件版本

  • MariaDB:推荐10.5及以上版本(自带Galera驱动,无需额外安装);
  • Galera Provider:与MariaDB版本匹配(如MariaDB 10.5对应Galera 4)。

三、详细部署步骤

1. 安装MariaDB

在所有节点执行以下命令,安装MariaDB Server及客户端:

sudo apt update && sudo apt upgrade -y # 更新系统包 sudo apt install mariadb-server mariadb-client -y # 安装MariaDB 

2. 配置MariaDB集群

2.1 创建Galera配置文件

在每个节点的/etc/mysql/mariadb.conf.d/目录下创建99-cluster.cnf文件(避免与默认配置冲突):

sudo nano /etc/mysql/mariadb.conf.d/99-cluster.cnf 

添加以下内容(需替换为实际节点IP):

[mysqld] # 基础配置 bind-address = 0.0.0.0 # 允许远程访问 default-storage-engine = InnoDB # 使用InnoDB引擎(Galera仅支持InnoDB) innodb_autoinc_lock_mode = 2 # 解决自增ID冲突 binlog_format = ROW # 行级复制(保证数据一致性) # Galera集群配置 wsrep_on = ON # 开启Galera功能 wsrep_provider = /usr/lib/galera/libgalera_smm.so # Galera驱动路径(Ubuntu默认路径) wsrep_cluster_name = "ubuntu_mariadb_cluster" # 集群唯一名称(所有节点必须一致) wsrep_cluster_address = "gcomm://192.168.1.101,192.168.1.102,192.168.1.103" # 所有节点IP列表(初始化时用) wsrep_node_address = "192.168.1.101" # 当前节点IP(需与服务器实际IP一致) wsrep_node_name = "node1" # 当前节点名称(自定义,如node1/node2/node3) wsrep_sst_method = rsync # 状态快照传输方法(可选rsync/xtrabackup-v2,rsync更简单) wsrep_sst_auth = sst_user:sst_password # SST用户及密码(用于数据同步,需提前创建) 

2.2 创建SST用户(可选但推荐)

为保证数据同步安全,创建专用SST用户(仅在第一个节点执行):

mysql -u root -p 

在MySQL shell中执行:

CREATE USER 'sst_user'@'%' IDENTIFIED BY 'sst_password'; -- 创建用户 GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sst_user'@'%'; -- 授权 FLUSH PRIVILEGES; -- 刷新权限 EXIT; 

3. 初始化集群

3.1 启动第一个节点(初始化集群)

第一个节点(如192.168.1.101)上执行以下命令,初始化集群:

sudo systemctl stop mariadb # 停止MariaDB服务(若已启动) galera_new_cluster # 初始化集群(生成集群UUID) sudo systemctl start mariadb # 启动MariaDB服务 

3.2 启动其他节点

第二个节点(如192.168.1.102)和第三个节点(如192.168.1.103)上执行以下命令,加入集群:

sudo systemctl restart mariadb # 重启MariaDB服务(会自动连接集群) 

4. 验证集群状态

任意节点上执行以下命令,检查集群是否正常运行:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';" 

若输出结果中wsrep_cluster_size的值等于节点数量(如3),则表示集群部署成功。

四、可选优化(负载均衡与监控)

1. 配置HAProxy负载均衡(提升可用性)

安装HAProxy并配置负载均衡,将请求分发到各个MariaDB节点:

sudo apt install haproxy -y # 安装HAProxy 

编辑HAProxy配置文件(/etc/haproxy/haproxy.cfg),添加以下内容:

frontend mysql_front bind 192.168.1.200:3306 # HAProxy监听IP(负载均衡器IP) default_backend mysql_back backend mysql_back balance roundrobin # 轮询算法 server node1 192.168.1.101:3306 check # 节点1 server node2 192.168.1.102:3306 check # 节点2 server node3 192.168.1.103:3306 check # 节点3 

重启HAProxy:

sudo systemctl restart haproxy 

此后,应用程序可通过192.168.1.200:3306访问MariaDB集群。

2. 监控与日志

  • 监控工具:使用Prometheus+Granafa监控集群状态(如节点存活、QPS、延迟);
  • 日志分析:收集/var/log/mysql/error.log(MariaDB错误日志)和/var/log/syslog(系统日志),及时排查问题。

五、注意事项

1. 网络要求

  • 节点间网络延迟需**<10ms**(高延迟会导致同步失败);
  • 防火墙需开放**3306(MySQL)、4567(集群通信)、4568(SST)**端口。

2. 数据一致性

  • Galera Cluster采用同步复制,写操作会在所有节点确认后才返回成功,因此写入性能略低于异步复制;
  • 避免在应用层直接写入多个节点(应通过负载均衡器统一入口)。

3. 故障恢复

  • 若所有节点宕机,必须从最后一个正常关闭的节点初始化集群(使用galera_new_cluster命令);
  • 若部分节点宕机,正常节点会自动同步数据(需确保网络恢复后节点能重新连接)。

通过以上步骤,可在Ubuntu系统上快速部署高可用的MariaDB Galera Cluster,满足企业级生产环境的需求。

0