如何在 Ubuntu 16.04 上安装 MariaDB Galera 集群如何在 Ubuntu 16.04 上安装 MariaDB Galera 集群如何在 Ubuntu 16.04 上安装 MariaDB Galera 集群如何在 Ubuntu 16.04 上安装 MariaDB Galera 集群
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

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

如何在 Ubuntu 16.04 上安装 MariaDB Galera 集群

本教程适用于这些操作系统版本

  • Ubuntu 20.04(Focal Fossa)
  • Ubuntu 16.04(Xenial Xerus)

在此页

  1. 要求
  2. 开始
  3. 安装 MariaDB Galera
  4. 在 Node1 上设置 MariaDB 集群
  5. 在 Galera 集群上添加 Node2
  6. 在 Galera 集群上添加 Node3
  7. 配置防火墙
  8. 启动 MariaDB Galera 集群
  9. 测试数据库复制
  10. 结论

MariaDB Galera 是 MariaDB 的多主集群。从 MariaDB 10.1 开始,MariaDB Server 和 MariaDB Galera Server 包已经合并,Galera 包及其依赖项在安装 MariaDB 时自动安装。目前,MariaDB Galera Cluster 仅支持 InnoDB/XtraDB 存储引擎。在 MariaDB 10.0 和 5.5 中,您需要单独下载。 MariaDB Galera 为站点数据库添加了冗余。在MariaDB Galera Cluster 中,多个数据库服务器相互连接并保持同步。

MariaDB Galera 提供了很多功能,下面列出了其中的一些功能:

  1. 同步复制。
  2. 自动加入节点。
  3. 主动-主动多主拓扑。
  4. 真正的行级并行复制。
  5. 读取和写入可扩展性、更小的客户端延迟。
  6. 失败的节点,自动从集群中删除。

在本教程中,我们将解释如何在 Ubuntu 16.04 服务器上运行 3 个节点来设置 MariaDB Galera Cluster 10.1。我们还将测试所有节点之间的数据库复制。

要求

  • 三个节点运行 Ubuntu 16.04 服务器。
  • 在您的服务器上配置静态 IP 地址为 192.168.0.102 的节点 1、静态 IP 地址为 192.168.0.103 的节点 2 和静态 IP 地址为 192.168.0.104 的节点 3。
  • 在所有节点上设置具有 sudo 权限的非根用户。

入门

首先,您需要使用最新版本更新所有节点。您可以使用以下命令更新所有这些:

sudo apt-get update -y
sudo apt-get upgrade -y

接下来,重新启动所有节点以应用这些更改。然后,使用 sudo 用户登录并继续下一步。

安装 MariaDB Galera

MariaDB Server 和 MariaDB Galera Server 包合并在 MariaDB 10.1 版本中。默认情况下,MariaDB 10.1 在默认的 Ubuntu 存储库中不可用,因此您需要在所有节点上添加 MariaDB 存储库。

首先,使用以下命令添加 MariaDB 存储库密钥:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

接下来,使用以下命令添加存储库并更新 APT 缓存:

sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'
sudo apt-get update -y

更新存储库后,使用以下命令安装 MariaDB:

sudo apt-get install mariadb-server rsync -y

上面的命令将安装带有 Galera 和几个依赖项的 MariaDB。 Galera 部分在配置之前保持休眠状态,就像插件或存储引擎一样。在所有节点上安装 MariaDB 后,您可以继续保护 MariaDB。

默认情况下,MariaDB 安装是不安全的,因此您需要确保 MariaDB 安装安全。您可以通过运行 mysql_secure_installation 脚本来执行此操作:

sudo mysql_secure_installation

在此过程中,您将被要求设置 root 密码、删除匿名用户、禁止 root 远程登录以及删除测试数据库。如下图所示回答所有问题:

Enter current password for root (enter for none):
Change the root password? [Y/n] n
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

一旦 MariaDB 在所有节点上都受到保护,您就可以继续下一步。

在 Node1 上设置 MariaDB 集群

首先,转到 Node1 并为 Galera 创建一个配置文件。默认情况下,MariaDB 从 /etc/mysql/conf.d/ 目录中读取配置。为此,请运行以下命令:

sudo nano /etc/mysql/conf.d/galera.cnf

添加以下行:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.102"
wsrep_node_name="Node1"

完成后保存文件。

注:192.168.0.102为Node1的IP地址

在 Galera 集群上添加 Node2

接下来,转到 Node2 并为 Galera 创建一个配置文件:

sudo nano /etc/mysql/conf.d/galera.cnf

添加以下行:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.103"
wsrep_node_name="Node2"

完成后保存文件。

注:192.168.0.103为Node2的IP地址。

在 Galera 集群上添加 Node3

接下来,转到 Node3 并为 Galera 创建一个配置文件:

sudo nano /etc/mysql/conf.d/galera.cnf

添加以下行:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.104"
wsrep_node_name="Node3"

完成后保存文件。

注:192.168.0.104为Node3的IP地址。

配置防火墙

Galera Cluster 使用四个端口 3306 用于 MySQL 客户端连接,4444 用于状态快照传输,4567 用于 Galera 集群复制流量,4568 用于增量状态传输。因此,您需要使用 UFW 防火墙允许所有这些端口。您可以通过在所有节点上运行以下命令来执行此操作:

首先,使用以下命令启用 UFW 防火墙:

sudo ufw enable

接下来,使用以下命令允许所有端口:

sudo ufw allow 3306/tcp
sudo ufw allow 4444/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4567/udp

然后,您可以使用以下命令检查防火墙的状态:

sudo ufw status

在所有节点上配置 UFW 防火墙后,您可以继续下一步。

启动 MariaDB Galera 集群

成功配置所有节点后,转到 Node1 并启动 Galera Cluster。

在 Galera 启动之前,您需要确保所有节点上的 MariaDB 服务都已停止。

在所有节点上运行以下命令:

sudo systemctl stop mysql

现在,使用以下命令在 Node1 上启动 Galera 集群:

sudo galera_new_cluster

现在,使用以下命令检查集群是否正在运行:

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

如果一切正常,您应该会看到以下输出:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

在Node2上,启动MariaDB服务:

sudo systemctl start mysql

您可以使用以下命令检查 MariaDB 服务的状态是否正常工作:

sudo systemctl status mysql

如果一切正常,您应该会看到以下输出:

?? mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-09-17 10:11:20 EDT; 10min ago
  Process: 715 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 713 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 545 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set
  Process: 535 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 514 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
 Main PID: 661 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 26 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           ??????661 /usr/sbin/mysqld

Sep 17 10:11:11 debian systemd[1]: Starting MariaDB database server...
Sep 17 10:11:15 debian mysqld[661]: 2017-09-17 10:11:15 140287134630464 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process
Sep 17 10:11:20 debian systemd[1]: Started MariaDB database server.

现在,您的第二个节点应该自动链接到集群。您可以使用以下命令验证这一点:

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

如果一切正常,集群大小应该设置为两个:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

在Node3上,启动MariaDB服务:

sudo systemctl start mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"

如果一切正常,集群大小应该设置为三个:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

您的集群现在正在工作并相互通信。

测试数据库复制

现在,所有节点都在线了,是时候测试跨 Galera 集群的数据库复制了。让我们首先在 Node1 上创建一个数据库,然后检查它是否在所有节点上都被复制了。

首先,使用以下命令登录到 MariaDb 控制台:

mysql -u root -p

输入你的 root 密码并创建一个名为 test_db 的数据库:

MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

现在转到 Node2 和 Node3,然后检查复制是否正常工作:

mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

恭喜!您已经在 Ubuntu 16.04 服务器上成功安装和配置了 MariaDB Galera Cluster。

结论

我希望您现在有足够的知识在 Ubuntu 16.04 上安装和配置 MariaDB Galera Cluster。您现在可以轻松地扩展到几个甚至几十个不同的节点。如果您有任何疑问或更多疑问,请参考链接 Galera Cluster Doc

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