温馨提示×

Ubuntu MariaDB集群部署方案

小樊
37
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