如何使用 Debian 10 设置 MariaDB Galera 多主同步复制如何使用 Debian 10 设置 MariaDB Galera 多主同步复制如何使用 Debian 10 设置 MariaDB Galera 多主同步复制如何使用 Debian 10 设置 MariaDB Galera 多主同步复制
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 Debian 10 设置 MariaDB Galera 多主同步复制

在此页

  1. 要求
  2. 第 1 步:安装 MariaDB
  3. 第 2 步:配置 MariaDB
  4. 第 3 步:引导集群
  5. 第 4 步:测试
  6. 第 5 步:故障排除提示
  7. 更多信息

MariaDB 提供两种不同的高可用性 (HA) 和集群解决方案。第一个是标准的 MariaDB 主/从复制,可以在不同的拓扑结构中配置,主要用于负载平衡、HA 和备份目的。第二个是 MariaDB Galera,一个多主机同步集群解决方案。其主要特点如下:

  • 多主机:Galera 集群中的所有节点都可以执行读取和写入操作,提供更好的可扩展性。
  • 节点可以自动加入集群,并在失败时被逐出。
  • Galera 复制是同步的,这意味着一个节点上的更改保证会应用到其他节点上。从理论上讲,这可以确保在节点出现故障时不会丢失任何数据。

本指南将引导您完成 MariaDB 的安装及其在 Galera 集群中的配置。我们将使用三个 Debian 10 节点进行演示,但可以使用任意数量(≥3)的节点。在 Galera 集群中设置两个节点在技术上是可行的,但不提供容错,因为一个故障节点将导致另一个节点停止。

要求

  • 三个或更多 Debian 10 实例。
  • 访问 root 用户或任何具有 sudo 权限的用户。
  • 应该设置 $EDITOR 环境变量。

注意:Galera 集群可以在 WAN 或 LAN 上工作。如果您的节点共享专用网络,请在适用的情况下使用专用 IP 地址。否则,应使用 WAN 地址。

如果使用 sudo 用户,请使用以下命令打开并使用 root shell 来完成此设置的长度:

sudo -s

第 1 步:安装 MariaDB

此步骤应在所有节点上执行。

使用以下命令安装 MariaDB、Galera 库和 Rsync。后者由 Galera 使用。

apt update
apt install -y mariadb-server mariadb-client galera-3 rsync

确保已启用 MariaDB 服务:

systemctl enable mariadb.service

使用 mysql_secure_installation 脚本保护您的 MariaDB 实例:

mysql_secure_installation

回答如下所示的问题,并确保为 MySQL root 用户选择一个强密码。

Enter current password for root (enter for none): Press <Enter>
Set root password? [Y/n] y
New password: your_password
Re-enter new password: your_password
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

第 2 步:配置 MariaDB

此步骤应在所有节点上执行。

停止所有节点上的 MariaDB 服务:

systemctl stop mariadb.service

默认情况下,MariaDB 守护进程只监听本地主机上的连接。为了使集群正常工作,应将其更改为外部可访问的地址。为此,编辑选项文件 /etc/mysql/mariadb.conf.d/50-server.cnf:

$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf

找到以下行:

bind-address = 127.0.0.1

如果您正在为集群使用专用网络并且您不想将 MariaDB 暴露给其他网络(即 WAN),请为每个节点指定本地 IPv4 地址。否则,使用 0.0.0.0 指示 MariaDB 监听所有接口。例如:

bind-address = 0.0.0.0

保存更改并退出文本编辑器。

我们现在将配置与集群相关的选项。创建一个新的选项文件:

$EDITOR /etc/mysql/mariadb.conf.d/99-cluster.cnf

在文件中输入以下合理的配置,替换 IP 地址。它在所有节点上应该是相同的。

[galera]

wsrep_on = on wsrep_provider = /lib/galera/libgalera_smm.so wsrep_cluster_address = gcomm://192.0.2.1,192.0.2.2,192.0.2.3 wsrep_cluster_name = galera_cluster_0 default_storage_engine = InnoDB innodb_autoinc_lock_mode = 2 innodb_doublewrite = 1 binlog_format = ROW

  • wsrep_on=on 启用写入集复制,这是 Galera 使用的基础功能。
  • wsrep_provider 指定 galera 库的路径。它由位于 Debian 10 上 /lib/galera/libgalera_smm.so 的 galera-3 软件包提供。
  • wsrep_cluster_address 应该至少包含另一个集群成员的地址。建议列出集群的所有成员。不需要特别的顺序。
  • wsrep_cluster_name 对于集群来说应该是唯一的,并且在同一个 galera 集群的所有节点上应该是相同的。
  • 其余选项是 Galera 正常工作所必需的,不应更改。

第 3 步:引导集群

在继续之前确保所有节点上的 MariaDB 已停止/处于非活动状态:

systemctl status mariadb.service

要启动集群,首先需要一个节点创建它。在 Debian 10 上,这可以通过 galera_new_cluster 脚本来完成。该脚本应该只在一个节点上执行,并且只执行一次以初始化集群。

galera_new_cluster

这将在当前节点上启动 MariaDB。确保它正在运行:

systemctl status mariadb.service

然后在其他节点上启动 MariaDB:

systemctl start mariadb.service

集群现在应该可以运行了。

第 4 步:测试

为确保集群按预期工作,请选择任何节点并登录到 MariaDB:

mysql -u root -p

发出以下语句以创建数据库:

> CREATE DATABASE test0;
> \q

然后在所有其他节点上检查这个新数据库:

mysql -u root -p -e "SHOW DATABASES;"

上面的命令应该返回一个包含 test0 的列表:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test0              |
+--------------------+

您可能希望通过从每个节点写入集群来进行更彻底的测试。一旦您对测试感到满意,请从集群中清除所有不需要的数据库。可以使用任何节点。

mysql -u root -p -e "DROP DATABASE test0;"

第 5 步:故障排除提示

使用以下查询查看有关节点/集群当前状态的信息:

mysql -u root -p -e "SELECT * FROM information_schema.global_status WHERE variable_name IN ('WSREP_CLUSTER_STATUS','WSREP_LOCAL_STATE_COMMENT','WSREP_CLUSTER_SIZE','WSREP_EVS_REPL_LATENCY','WSREP_EVS_DELAYED','WSREP_READY');"

健康的 3 节点集群应返回以下内容:

+---------------------------+----------------+
| VARIABLE_NAME             | VARIABLE_VALUE |
+---------------------------+----------------+
| WSREP_CLUSTER_SIZE        | 3              |
| WSREP_CLUSTER_STATUS      | Primary        |
| WSREP_EVS_DELAYED         |                |
| WSREP_EVS_REPL_LATENCY    | 0/0/0/0/0      |
| WSREP_LOCAL_STATE_COMMENT | Synced         |
| WSREP_READY               | ON             |
+---------------------------+----------------+

  • WSREP_CLUSTER_SIZE 表示集群组件中的当前节点数。
  • WSREP_CLUSTER_STATUS 表示集群组件的状态,而不是整个集群的状态。
  • WSREP_EVS_DELAYED 显示延迟的节点列表。健康集群需要一个空值。
  • WSREP_EVS_REPL_LATENCY 以 min/avg/max/stddev/samplesize 格式显示复制延迟。这些值以秒为单位显示。非常高的延迟可能会导致性能下降。
  • WSREP_LOCAL_STATE_COMMENT 显示当前节点状态。
  • WSREP_READY 表示节点是否可以接受查询。

当 3 节点集群中的一个节点失去连接时,该集群将被划分为一个由 2 个节点组成的主要组件和一个非主要组件。主要组件不受中断影响并继续正常运行。从非主组件的角度来看,上面显示的查询将返回以下内容:

+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+
| VARIABLE_NAME             | VARIABLE_VALUE                                                                                                                 |
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+
| WSREP_CLUSTER_SIZE        | 1                                                                                                                              |
| WSREP_CLUSTER_STATUS      | non-Primary                                                                                                                    |
| WSREP_EVS_DELAYED         | 6b7864f2-fe7d-11e9-84ab-93e58c0d2907:tcp://192.0.2.1:4567:3,a421be89-fe7d-11e9-a91e-7e62f7562e58:tcp://192.0.2.3:4567:2        |
| WSREP_EVS_REPL_LATENCY    | 0/0/0/0/0                                                                                                                      |
| WSREP_LOCAL_STATE_COMMENT | Initialized                                                                                                                    |
| WSREP_READY               | OFF                                                                                                                            |
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+

请注意 WSREP_EVS_DELAYED 值,它指示与其他节点的连接问题。

在主要组件节点上,相同的查询返回:

+---------------------------+----------------------------------------------------------------+
| VARIABLE_NAME             | VARIABLE_VALUE                                                 |
+---------------------------+----------------------------------------------------------------+
| WSREP_CLUSTER_SIZE        | 2                                                              |
| WSREP_CLUSTER_STATUS      | Primary                                                        |
| WSREP_EVS_DELAYED         | a2217526-fe7d-11e9-8692-1f2f0cdb403d:tcp://192.0.2.2:4567:2    |
| WSREP_EVS_REPL_LATENCY    | 0/0/0/0/0                                                      |
| WSREP_LOCAL_STATE_COMMENT | Synced                                                         |
| WSREP_READY               | ON                                                             |
+---------------------------+----------------------------------------------------------------+

要从单节点故障中恢复,不需要手动干预。当故障节点重新连接到集群时,它会自动与集群同步。

更多信息

有关高级配置选项,请参阅 Galera 集群系统变量。

©2015-2025 艾丽卡 support@alaica.com