MariaDB 的高可用部署通常涉及 主从复制(Master-Slave replication)、Galera Cluster、或者 MHA (Master High Availability) 等技术。在高可用部署中,关键目标是保证数据库在故障发生时,能够无缝地进行故障转移,并且系统能够维持一致性。
下面我会介绍几种常见的 MariaDB 高可用部署方案,你可以根据你的需求选择适合的方案。
1. MariaDB 主从复制 + 负载均衡
这是最基础的高可用部署方案,利用 MariaDB 的 主从复制(Master-Slave Replication)将数据从主节点同步到从节点。
步骤:
-
配置主从复制:
- 在主节点上,开启二进制日志(binary log):
# 修改 my.cnf 配置 [mysqld] log-bin=mysql-bin server-id=1
- 在从节点上,配置
server-id
和设置主节点信息:# 修改 my.cnf 配置 [mysqld] server-id=2
- 在主节点创建复制账户:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
- 在从节点上,启动复制:
CHANGE MASTER TO MASTER_HOST='主节点IP', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='日志文件', MASTER_LOG_POS=日志位置; START SLAVE;
- 在主节点上,开启二进制日志(binary log):
-
配置负载均衡:
- 通过负载均衡器(如 HAProxy 或 ProxySQL)将读请求分发到多个从节点,写请求发送到主节点。
- 需要确保负载均衡器能够监控主节点的健康状况,并在主节点故障时切换到从节点。
-
故障转移:
- 如果主节点发生故障,可以通过 手动切换 或自动故障转移工具(如 MHA)来将一个从节点提升为新的主节点。
2. MariaDB Galera Cluster
Galera Cluster 是一个 同步多主(multi-master)集群,它可以提供高可用、高容错和自动故障转移功能,适合要求高一致性和高可用的场景。
步骤:
-
安装 Galera Cluster:
- 在每个节点上安装 MariaDB Galera。
sudo apt-get install mariadb-server galera-4
- 在每个节点上安装 MariaDB Galera。
-
配置 Galera 集群:
- 修改
my.cnf
配置文件,加入以下配置:[mysqld] wsrep_on=ON wsrep_cluster_name='galera_cluster' wsrep_cluster_address=gcomm://node1_ip,node2_ip,node3_ip wsrep_node_address='本机IP' wsrep_node_name='node1' binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
- 修改
-
启动集群:
- 在第一个节点上启动集群:
sudo systemctl start mariadb
- 在其他节点上启动集群:
sudo systemctl start mariadb
- 在第一个节点上启动集群:
-
验证集群状态:
- 连接到任意一个节点,执行以下命令验证集群状态:
SHOW STATUS LIKE 'wsrep_cluster_size';
这个命令应该返回集群的节点数。
- 连接到任意一个节点,执行以下命令验证集群状态:
-
负载均衡与故障转移:
- Galera 集群自带自动的故障转移机制。所有节点都是可写的,因此可以通过负载均衡器(如 HAProxy 或 ProxySQL)将读写请求均匀地分发到集群中的各个节点。
3. MariaDB MHA (Master High Availability)
MHA 是一个高可用解决方案,它可以在主节点宕机时自动选举一个从节点作为新的主节点,并重新配置从节点。适合在主从复制基础上实现自动故障转移。
步骤:
-
安装 MHA:
- 安装 MHA Manager 和 MHA Node。
sudo apt-get install mha4mysql-manager mha4mysql-node
- 安装 MHA Manager 和 MHA Node。
-
配置主从复制:
- 配置主从复制(如上述第 1 种方案所示)。
-
配置 MHA Manager:
- 在 MHA Manager 节点(通常是管理节点)上配置
mha.cnf
文件。[server default] manager_workdir=/var/lib/mha master_binlog_dir=/var/lib/mysql manager_log=/var/log/mha/manager.log [server1] hostname=主节点IP ssh_user=your_ssh_user candidate_master=1 [server2] hostname=从节点IP ssh_user=your_ssh_user candidate_master=1
- 配置 MHA Node 信息:
- 你需要在每个节点上配置
mha.cnf
文件,指定 主从节点 信息。
- 你需要在每个节点上配置
- 在 MHA Manager 节点(通常是管理节点)上配置
-
启动 MHA Manager:
- 启动 MHA Manager 监控,并进行故障转移:
masterha_manager --conf=/path/to/mha.cnf
- 启动 MHA Manager 监控,并进行故障转移:
-
验证故障转移:
- 如果主节点发生故障,MHA 会自动切换到其他从节点,并更新复制配置。
4. MariaDB + Keepalived + VRRP(虚拟路由冗余协议)
这种方案适用于需要 IP 漂移 的高可用配置,通常结合 主从复制 或 Galera Cluster 使用。Keepalived 可以在主节点故障时将虚拟 IP 地址漂移到其他健康的节点。
步骤:
-
配置 Keepalived:
- 在主节点和从节点上安装并配置 Keepalived,并设置一个虚拟 IP 地址(VIP)。
- 在主节点上,配置虚拟 IP 为优先状态:
virtual_ipaddress { 192.168.1.100 }
-
配置负载均衡:
- 使用负载均衡器(如 HAProxy 或 ProxySQL)将数据库连接请求定向到虚拟 IP 地址,而不依赖于具体的节点 IP 地址。
-
故障转移:
- 在主节点故障时,Keepalived 会将虚拟 IP 漂移到另一个健康节点,确保数据库可用性。
总结:
- MariaDB 主从复制 + 负载均衡:适合基础的读写分离高可用,但需要手动切换主节点。
- MariaDB Galera Cluster:适合要求高度一致性和高可用的应用,提供自动故障转移和多主节点支持。
- MariaDB MHA:适合自动故障转移和主从复制,提供更强的故障恢复能力。
- Keepalived + VRRP:适合虚拟 IP 漂移方案,增强数据库的高可用性和自动化。