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

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

MariaDB Galera提供了许多功能,其中一些如下:
同步复制。
自动加入节点。
主动-主动多主拓扑。
真正的行级并行复制。
读写可扩展性,更小的客户端延迟。
节点失败,自动从群集中删除。
在本教程中,我们将解释如何在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权限的非root用户。


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

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

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

安装MariaDB Galera
MariaDB服务器和MariaDB Galera服务器软件包在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集群使用四个端口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'"

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

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

在Node3上,启动MariaDB服务:

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

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

+--------------------+-------+
| 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集群。

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

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容