原作者:梅丽莎安德森  转载翻译:https://www.digitalocean.com/community/tutorials/how-to-configure-a-galera-cluster-with-mysql-5-6-on-ubuntu-16-04 

如何在Ubuntu 16.04上使用MySQL 5.6配置Galera集群

介绍

群集通过跨不同服务器分发更改来为数据库添加高可用性。如果其中一个实例失败,则其他实例已可用于继续投放。

集群有两种常规配置,主动 - 被动和主动 - 主动。在主动 - 被动群集中,所有写入都在单个活动服务器上完成,然后复制到一个或多个被动服务器,这些服务器只有在活动服务器发生故障时才能接管。一些主动 - 被动群集还允许SELECT在被动节点上进行操作。在主动 - 主动群集中,每个节点都是读写的,对一个节点的更改将复制到所有节点。

在本指南中,我们将配置一个主动 - 主动MySQL Galera集群。出于演示目的,我们将配置和测试三个节点,即最小的可配置集群。

先决条件

要继续,你需要三台Ubuntu 16.04服务器,每台服务器都有:

  • 至少1GB的RAM。为数据集配置足够的内存对于防止性能下降和崩溃至关重要。群集的内存使用很难预测,所以一定要充足。
  • 具有sudo权限的非root用户。这可以通过使用Ubuntu 16.04指南进行初始服务器设置来配置。
  • 启用了简单的防火墙。按照我们的初始服务器设置的最后一步,使用Ubuntu 16.04指南进行配置ufw
  • 私人网络,如果它可供你使用。按照我们的如何设置和使用DigitalOcean专用网络的指南进行配置。

一旦满足所有这些先决条件,我们就可以安装该软件了。

步骤1 - 将Galera存储库添加到所有服务器

修补包含Galera集群的MySQL未包含在默认的Ubuntu存储库中,因此我们首先将Galera项目维护的外部Ubuntu存储库添加到我们所有的三个服务器中。

注意: Galera Cluster背后的公司Codership维护着这个存储库,但请注意并非所有外部存储库都是可靠的。请务必仅从受信任的来源安装。

在每台服务器上,使用apt-key命令添加存储库密钥,该命令apt将用于验证软件包是否可信。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA 

一旦我们在每个服务器的数据库中拥有可信密钥,我们就可以添加存储库。要做到这一点,创建一个名为新文件galera.list中的/etc/apt/sources.list.d/每台服务器上:

sudo nano /etc/apt/sources.list.d/galera.list 

在文本编辑器中,添加以下行,这些行将使适当的存储库可供APT包管理器使用:/etc/apt/sources.list.d/galera.list

# /etc/apt/sources.list.d/galera.list
deb http://releases.galeracluster.com/mysql-wsrep-5.6/ubuntu xenial main
deb http://releases.galeracluster.com/galera-3/ubuntu xenial main

保存并关闭文件(新闻CTRL + XYENTER)。

Codership存储库现在可供所有三台服务器使用。但是,您必须指示apt更喜欢Codership的存储库而不是其他存储库,以确保它安装创建Galera集群所需的软件的修补版本。为此,请galera.pref/etc/apt/preferences.d/目录中创建另一个新文件:

sudo nano /etc/apt/preferences.d/galera.pref 

将以下行添加到文本编辑器:/etc/apt/preferences.d/galera.pref

# Prefer Codership repository
Package: *
Pin: origin releases.galeracluster.com
Pin-Priority: 1001

保存并关闭该文件,然后运行sudo apt-get update以包含新存储库中的包清单:

sudo apt-get update 

您可能会看到签名警告uses weak digest algorithm (SHA1)。GitHub上存在一个未解决的问题。与此同时,继续进行是可以的。

一旦在所有三台服务器上更新了存储库,我们就可以安装MySQL和Galera了。

第2步 - 在所有服务器上安装MySQL和Galera

在所有三台服务器上运行以下命令,以安装修补的版本的MySQL,以便与Galera以及Galera和几个依赖项一起使用:

sudo apt-get install galera-3 galera-arbitrator-3 mysql-wsrep-5.6 

在安装过程中,系统会要求您为MySQL管理用户设置密码。

我们应该拥有开始配置集群所需的所有部分,但由于我们将rsync在后面的步骤中依赖,所以我们确保它们都安装在所有这三个部分上:

sudo apt-get install rsync 

这将确认最新版本rsync已经可用,提示您升级您的版本或安装它。

一旦我们在三台服务器上安装了MySQL,我们就可以开始配置了。

第3步 - 配置第一个节点

集群中的每个节点都需要具有几乎相同的配置。因此,我们将在第一台机器上执行所有配置,然后将其复制到其他节点。

默认情况下,MySQL配置为检查/etc/mysql/conf.d目录以从结尾的文件中获取其他配置设置.cnf。我们将在此目录中创建一个包含所有特定于集群的指令的文件:

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

将以下配置添加到文件中。您需要更改以红色突出显示的设置。我们将在下面解释每个部分的含义。

# /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="test_cluster"
wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip"# Galera Synchronization Configuration
wsrep_sst_method=rsync# Galera Node Configuration
wsrep_node_address="this_node_ip"
wsrep_node_name="this_node_name"
  • 第一部分修改或重新设置允许群集正常运行的MySQL设置。例如,Galera Cluster不能与MyISAM或类似的非事务性存储引擎一起使用,也mysqld不能绑定到localhost的IP地址。您可以在Galera Cluster 系统配置页面上更详细地了解这些设置。

  • “Galera Provider Configuration”部分配置提供写集复制API的MySQL组件。在我们的例子中,这意味着Galera,因为Galera是一个wsrep(写集复制)提供程序。我们指定用于配置初始复制环境的常规参数。这不需要任何自定义,但您可以了解有关Galera配置选项的更多信息。

  • “Galera群集配置”部分定义群集,按IP地址或可解析的域名标识群集成员,并为群集创建名称以确保成员加入正确的群组。您可以将其更改wsrep_cluster_name为更有意义的内容test_cluster或保持原样,但必须wsrep_cluster_address使用三台服务器的地址进行更新。如果您的服务器具有专用IP地址,请在此处使用它们。

  • “Galera同步配置”部分定义了集群如何在成员之间进行通信和同步数据。这仅用于节点联机时发生的状态转移。对于我们的初始设置,我们正在使用rsync,因为它通常可用并且做我们现在需要的。

  • “Galera节点配置”部分阐明了IP地址和当前服务器的名称。在尝试诊断日志中的问题以及以多种方式引用每个服务器时,这很有用。在wsrep_node_address必须你在机器的地址相匹配,但你可以选择你,以帮助您识别在日志文件中的节点想要的任何名称。

如果对群集配置文件感到满意,请将内容复制到剪贴板中,然后保存并关闭该文件。

现在配置了第一台服务器,我们将继续前两个节点。

步骤4 - 配置剩余节点

在每个剩余节点上,打开配置文件:

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

粘贴从第一个节点复制的配置,然后更新“Galera节点配置”以使用您正在设置的特定节点的IP地址或可解析的域名。最后,更新其名称,您可以将其设置为帮助您识别日志文件中的节点的任何内容:

. . .
# Galera Node Configuration
wsrep_node_address="this_node_ip"
wsrep_node_name="this_node_name"
. . .

保存并退出每台服务器上的文件。

我们几乎准备好调出集群,但在此之前,我们需要确保适当的端口是开放的。

步骤5 - 在每个服务器上打开防火墙

在每台服务器上,让我们检查防火墙的状态:

sudo ufw status 

在这种情况下,只允许SSH通过:

Output
Status: activeTo                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

您可能有其他规则或根本没有防火墙规则。由于在这种情况下只允许SSH流量,因此您需要为MySQL和Galera流量添加规则。

Galera可以使用四个端口:

  • 3306 用于MySQL客户端连接和使用mysqldump方法的状态快照传输。
  • 4567 Galera Cluster用于复制流量,多播复制在此端口上同时使用UDP传输和TCP。
  • 4568 用于增量状态转移。
  • 4444 用于所有其他状态快照转移。

在我们的示例中,我们将在设置时打开所有四个端口。一旦我们确认复制正常,我们将关闭我们实际上没有使用的任何端口,并将流量限制在集群中的服务器上。

使用以下命令打开端口:

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

注意:根据服务器上运行的其他内容,您可能希望立即限制访问。该UFW要领:通用防火墙规则和命令指南可以帮助这一点。

第6步 - 启动群集

首先,我们需要停止运行MySQL服务,以便我们的集群可以联机。

在所有三台服务器上停止MySQL:

在所有三台服务器上使用以下命令来停止mysql,以便我们可以将它们备份到集群中:

sudo systemctl stop mysql 

systemctl 不显示所有服务管理命令的结果,因此为了确保我们成功,请运行以下命令:

sudo systemctl status mysql 

如果最后一行看起来如下所示,则命令成功。

Output

. . . Sep 02 22:17:56 galera-02 systemd[1]: Stopped LSB: start and stop MySQL.

一旦我们关闭了mysql所有服务器,我们就可以继续了。

打开第一个节点:

我们配置集群的方式是,每个联机的节点都尝试连接到其galera.cnf文件中指定的至少一个其他节点以获取其初始状态。正常systemctl start mysql会失败,因为第一个节点没有连接的节点,所以我们需要将wsrep-new-cluster参数传递给我们开始的第一个节点。但是,此时既不会systemdservice不会正确接受--wsrep-new-cluster参数,所以我们需要使用启动脚本启动第一个节点/etc/init.d。完成此操作后,您可以启动其余节点systemctl.

注意:如果您希望将它们全部启动systemd,则在启动另一个节点后,您可以终止初始节点。由于第二个节点可用,因此当您重新启动第一个节点时,sudo systemctl start mysql它将能够加入正在运行的集群

sudo /etc/init.d/mysql start --wsrep-new-cluster 

此脚本完成后,该节点将注册为群集的一部分,我们可以使用以下命令查看它:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'" Output+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |+--------------------+-------+ 

在剩余的节点上,我们可以mysql正常启动。他们将搜索联机的群集列表中的任何成员,因此当他们找到一个时,他们将加入群集。

打开第二个节点:

开始mysql

sudo systemctl start mysql 

随着每个节点上线,我们应该看到我们的簇大小增加:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'" Output+--------------------+-------+| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 2 |
+--------------------+-------+ 

打开第三个节点:

开始mysql

sudo systemctl start mysql 

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

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'" Output+--------------------+-------+| Variable_name | Value |+--------------------+-------+
| wsrep_cluster_size | 3 |+--------------------+-------+ 

此时,整个群集应该在线并进行通信。有了它,我们可以测试每个集群节点之间的复制。

第7步 - 测试复制

我们已经完成了到目前为止的步骤,以便我们的集群可以执行从任何节点到任何其他节点的复制,称为主动 - 主动复制。让我们测试复制是否按预期工作。

写入第一个节点:

我们首先在第一个节点上进行数据库更改。以下命令将创建一个名为的数据库,playground并在其中调用一个表equipment

mysql -u root -p -e 'CREATE DATABASE playground;
CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");' 

我们现在在表中有一个值。

在第二个节点上读写:

接下来,我们将查看第二个节点以验证复制是否正常:

mysql -u root -p -e 'SELECT * FROM playground.equipment;' 

如果复制正常,我们在第一个节点上输入的数据将在第二个节点上显示:

Output

+----+-------+-------+-------+

| id | type | quant | color |

+----+-------+-------+-------+

| 1 | slide | 2 | blue |

+----+-------+-------+-------+

从这个节点,我们可以将数据写入集群:

mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");' 

在第三个节点上读写:

从第三个节点,我们可以通过再次查询数据库来读取所有这些数据:

mysql -u root -p -e 'SELECT * FROM playground.equipment;' Output+----+-------+-------+--------+
| id | type | quant | color |
+----+-------+-------+--------+
| 1 | slide | 2 | blue | | 2 |
swing | 10 | yellow |
+----+-------+-------+--------+ 

同样,我们可以从此节点添加另一个值:

mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");' 

在第一个节点上阅读:

回到第一个节点,我们可以验证我们的数据在任何地方都可用:

mysql -u root -p -e 'SELECT * FROM playground.equipment;' Output +----+--------+-------+--------+
| id | type | quant | color |
+----+--------+-------+--------+
| 1 | slide | 2 | blue |
| 2 | swing | 10 | yellow |
| 3 | seesaw | 3 | green |
+----+--------+-------+--------+ 

我们已经测试过,我们可以写入所有节点,并且正在正确执行复制。

结论

此时,您应该配置一个有效的三节点Galera测试集群。如果您计划在生产环境中使用Galera集群,建议您从不少于五个节点开始。

在生产使用之前,您可能需要查看一些其他状态快照传输(sst)代理,例如“xtrabackup”,它允许您非常快速地设置新节点,而不会对您的活动节点造成大的中断。这不会影响实际的复制,但在初始化节点时是一个问题。最后,为了保护数据在服务器之间移动时,您还应该设置SSL加密。

如何在Ubuntu 16.04上使用MySQL 5.6配置Galera集群相关推荐

  1. 如何在Ubuntu 16.04上创建多节点MySQL集群(MySQL-Cluster)

    翻译转载:https://www.digitalocean.com/community/tutorials/how-to-create-a-multi-node-mysql-cluster-on-ub ...

  2. 如何在Ubuntu 16.04上使用ProxySQL缓存优化MySQL查询

    The author selected the Free Software Foundation to receive a donation as part of the Write for DOna ...

  3. 【转】如何在Ubuntu 16.04上使用UFW设置防火墙

    https://www.howtoing.com/how-to-set-up-a-firewall-with-ufw-on-ubuntu-16-04/ 如何在Ubuntu 16.04上使用UFW设置防 ...

  4. 如何在Ubuntu 14.04上安装MySQL

    如何在Ubuntu 14.04上安装MySQL 介绍 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一 ...

  5. 关闭防火墙linux 16.04,如何在Ubuntu 16.04上配置和设置防火墙

    在本文中,我们将学习–如何在Ubuntu 16.04上配置和设置UFW(防火墙),UFW代表"不复杂的防火墙",它充当IPTABLES的接口,从而简化了防火墙的配置过程,对于防火墙 ...

  6. 如何在Ubuntu 16.04上增加Swap分区

    最近在安装一些软件的时候经常出现因为内存不足而崩溃的错误,故查看了Linux Swap分区的介绍,以及如何创建swap分区.内容转自下面两篇优质文章.谢谢这两位作者的整理与无私奉献.读者可直接点击链接 ...

  7. 如何在 ubuntu 16.04上运行jar文件

    如何在 ubuntu 16.04上运行jar文件 sudo apt-get update 1 安装依赖包 sudo apt-get install python-software-properties ...

  8. unison_如何在Ubuntu 16.04上使用Unison备份大目录

    unison The author selected the Free and Open Source Fund to receive a donation as part of the Write ...

  9. 如何在Ubuntu 16.04上安装Swift和Vapor

    翻译自:How to Install Swift and Vapor on Ubuntu 16.04 介绍 Swift是Apple开发的一种编程语言,特点是快,安全和现代化,它有一个支持语言的庞大社区 ...

最新文章

  1. 无人驾驶汽车系统入门:基于VoxelNet的激光雷达点云车辆检测及ROS实现
  2. 编程入门python语言是多大孩子学的-什么是少儿Python编程?这一篇就够啦!
  3. 最强黑客库Blackbone使用教程
  4. phpredisadmin common.inc.php,phpRedisAdmin安装
  5. 打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...
  6. 关于redis连接池
  7. 海信新机F30S即将发布:搭载紫光展锐虎贲T310处理器
  8. 1w存银行一年多少利息_一百万存银行一年利息多少?提前取出利息怎么算?
  9. Sonar扫描python代码
  10. [短评] 关于顺丰快递大战阿里菜鸟物流事件的一点吐槽
  11. 阿里ai布局开始_如何从AI开始?
  12. 西南科技大学OJ题 顺序栈基本操作的实现1044
  13. rt-thread驱动篇(07)---STM32F429单片机SD卡驱动添加
  14. 【网页设计大作业】:端午主题(HTML+CSS+JavaScript)——中国传统文化(6页)
  15. 编程入门: 自学编程从哪里开始? [初学参考]
  16. c语言aps审核,APS考官最讨厌的几类人
  17. 低功耗SD\SPI NAND Flash芯片
  18. 怎样使控件的背景色为透明色?
  19. python3 安装urllib3
  20. 仅仅有人物没背景的图片怎么弄_纯干货//只会画人物不会画背景?这3种方法教你快速画背景!...

热门文章

  1. KODExplorer 简介
  2. 层内容被FLASH遮挡解决办法
  3. Python关于中文字符前面的u(转载)
  4. C++——random库中的uniform_int_distribution
  5. 【python】字符串连接错误,类型错误 TypeError: coercing to Unicode
  6. 【今日CV 计算机视觉论文速览】Mon, 28 Jan 2019
  7. SpringBoot—单元测试模板(controller层和service层)
  8. 《学习OpenCV》课后习题解答(第四章)(仅供参考)(不断更新)
  9. 科一主观题刷题 0308
  10. 数据库的移动 1007 sqlserver