# Galera 多主集群

URL: https://caijiao.org/mariadb/advanced/replication/galera
Source: docs/mariadb/advanced/replication/galera.md
Description: 本节介绍 MariaDB Galera 多主集群的配置与原理，帮助用户实现多节点高可用和同步写入，提高数据库的可靠性和扩展性。

## 1. 什么是 Galera 集群

Galera 是 MariaDB 的多主同步复制插件，支持多节点数据同步和同时写入，保证各节点数据一致性，实现高可用和负载均衡。

## 2. 安装准备

确保所有节点 MariaDB 版本支持 Galera，并安装 Galera 相关软件包：

```bash
sudo apt install mariadb-server galera-4
````

或使用对应系统包管理工具安装。

## 3. 配置 Galera 集群

编辑每个节点的 MariaDB 配置文件（如 `/etc/mysql/my.cnf`），添加或修改以下内容：

```ini
[mysqld]
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# 集群名称
wsrep_cluster_name="galera_cluster"

# 集群节点 IP 列表（逗号分隔）
wsrep_cluster_address="gcomm://node1_ip,node2_ip,node3_ip"

# 当前节点唯一ID
wsrep_node_name="node1"

# 当前节点 IP
wsrep_node_address="node1_ip"

# SST 方法（状态快照传输）
wsrep_sst_method=rsync

# SST 用户及密码
wsrep_sst_auth="sstuser:password"
```

## 4. 创建 SST 用户

在任意节点 MariaDB 中执行：

```sql
CREATE USER 'sstuser'@'%' IDENTIFIED BY 'password';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'%';
FLUSH PRIVILEGES;
```

## 5. 启动集群

* **第一个节点启动：**

```bash
sudo systemctl stop mariadb
sudo galera_new_cluster
```

* **其他节点启动：**

```bash
sudo systemctl restart mariadb
```

## 6. 验证集群状态

登录 MariaDB，执行：

```sql
SHOW STATUS LIKE 'wsrep_cluster_size';
```

返回的值应为集群节点数，表示集群正常。

## 7. 注意事项

* Galera 集群要求网络稳定，节点时钟同步。
* 事务支持同步提交，性能受网络延迟影响。
* 适合读写负载均衡和高可用场景。

---

Galera 多主集群为 MariaDB 提供了强大的多节点同步能力，实现无单点故障的高可用数据库架构。
