分页: 1 / 1

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

发表于 : 2019年 5月 9日 06:15 星期四
jvip_chen
MariaDB Galera是MariaDB的一个多主集群。从MariaDB 10.1开始,MariaDB Server和MariaDB Galera Server包就被组合在一起,并且在安装MariaDB时自动安装Galera包及其依赖项。目前,MariaDB Galera集群只支持InnoDB/XtraDB存储引擎。在MariaDB 10.0和5.5中,需要分别下载。MariaDB Galera为站点的数据库增加了冗余。在MariaDB Galera集群中,多个数据库服务器相互连接并保持同步。

MariaDB Galera提供了许多功能,其中一些如下:

同步复制。

自动节点加入。

主多主机拓扑。

真正的行级并行复制。

读写可伸缩性,更小的客户端延迟。

失败节点,自动从集群中删除。

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

需求

运行Ubuntu 16.04服务器的三个节点。

在您的服务器上配置静态IP地址192.168.0.102的Node1、静态IP地址192.168.0.103的Node2和静态IP地址192.168.0.104的Node3。

在所有节点上设置具有sudo特权的非根用户。

开始

首先,需要用最新版本更新所有节点。你可以用以下命令更新它们:

代码: 全选

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
Next, add the repository and update the APT cache with the following command:

代码: 全选

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
In this process, you will be asked to set root password, remove anonymous users, disallow root login remotely and remove test database. Answer all the questions as shown below:

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
Add the following lines:

[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"
# Save the file when you are finished.
注意:192.168.0.102是节点1的IP地址


在Galera集群上添加Node2
接下来,转到Node2,为Galera创建一个配置文件:

代码: 全选

sudo nano /etc/mysql/conf.d/galera.cnf
Add the following lines:

[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"
# Save the file when you are finished.
注意:192.168.0.103是节点2的IP地址。

在Galera集群上添加Node3
接下来,转到Node3,为Galera创建一个配置文件:

代码: 全选

sudo nano /etc/mysql/conf.d/galera.cnf
Add the following lines:

[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"
# Save the file when you are finished.
注意:192.168.0.104是节点3的IP地址。


配置防火墙

Galera集群使用4个端口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集群。

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

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

代码: 全选

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

代码: 全选

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

代码: 全选

mysql -u root -p -e "show status like 'wsrep_cluster_size'"
If everything is fine you should see the following output:

+--------------------+-------+
| 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'"
If everything is working well, the cluster size should be set to two:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+
在Node3上,启动MariaDB服务:

代码: 全选

sudo systemctl start mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"
If everything is working well, the cluster size should be set to three:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
您的集群现在正在彼此工作和通信。

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

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

代码: 全选

mysql -u root -p
Enter your root password and create a database with name test_db:

代码: 全选

MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+
Now go to the Node2 and Node3, then check replication is working or not:

代码: 全选

mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+
恭喜你!您已经成功地在Ubuntu 16.04服务器上安装和配置了MariaDB Galera集群。

结论

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