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链接
暂无评论内容