如何在 Ubuntu 16.04 的三节点集群上部署 CockroachDB

来自 [CockroachDB] 的文章(https://www.cockroachlabs.com/)

介绍

CockroachDB 是一个开源、分布式的 SQL 数据库,提供一致性、可扩展性和可生存性。

设置 CockroachDB 很简单:您将其安装在多个服务器上,每个服务器都被称为 node,并将它们合并在一起,以便作为一个单一实体,被称为 cluster

有了这种设计,随着数据存储需求的增长,您可以通过创建新的节点并将它们连接到现有的集群来轻松增加系统的容量。

注:在写作时,CockroachDB目前处于beta状态,因此我们建议使用本指南作为熟悉该技术的机会,而不是作为一个关键任务软件的部署指南。

本指南不确保访问群集的管理用户界面;如果他们知道正确的 URL,任何人都可以访问它. 如果您打算将此留在生产中,请考虑使用 防火墙规则控制对端口 `8080’的访问。

目标

在本指南中,您将通过在多个服务器上部署 CockroachDB,一个分布式多节点集群来创建一个分布式且容错的数据库,您将开始通过在多个服务器上安装 CockroachDB,将它们作为节点启动,然后让它们作为一个集群一起工作。

此外,我们还将展示数据分布以及群集如何存活在失败中,并向您展示如何将应用程序连接到CockroachDB。

本指南涵盖了没有SSL加密的不安全部署的设置,我们不建议用于生产,然而,CockroachDB还提供了DigitalOcean的安全部署指南(https://www.cockroachlabs.com/docs/deploy-cockroachdb-on-digital-ocean.html)。

前提条件

在你开始之前,你需要以下几点:

  • 3 Ubuntu 16.04 服务器,至少拥有2GB的RAM并允许私人联网. 它们都应该在同一区域。 在本指南中,我们将使用下列主机名: -** 口红-01** -克罗克 -02
  • ** Cockroach-03** (中文(简体) ).
  • " 26257 " ,用于网络间和应用程序通信: " sudo ufw 允许2627/tcp ,
  • " 8080 " 用于行政管理部门: " sudo ufw 允许8080/tcp ,

在本指南中,我们将使用站式主机名称和IP地址,如 cockroach-01 , cockroach_01_public_ip,和 cockroach_01_public_ip为三个服务器。

第1步:安装CockroachDB

您的集群中的每个节点都需要有一个副本的cockroach二进制(即程序)。我们将在您的第一个服务器上安装CockroachDB, cockroach-01 ,然后在其他服务器上做同样的事情。

要开始,请使用 SSH 登录到 cockroach-01

1[environment local]
2ssh sammy@cockroach_01_public_ip

接下来,从 sudo 用户的主目录下载并安装最新的cockroach二进制:

1wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz?s=do

提取二进制:

1tar -xf cockroach-latest.linux-amd64.tgz?s=do --strip=1 cockroach-latest.linux-amd64/cockroach

移动二进制,以便从命令行轻松访问:

1sudo mv cockroach /usr/local/bin

通过检查其版本来确保二进制是可访问的:

1cockroach version

如果您的系统无法找到cockroach命令,请再次检查此部分,以确保您已下载并提取该程序。

最后,对您打算作为节点使用的其他两个服务器重复这些命令. 在我们的示例中,这是 cockroach-02 和 ** cockroach-03** 。

现在CockroachDB在您的所有机器上可用,您可以设置集群。

步骤2 - 启动你的第一个节点

你的第一个CockroachDB节点将启动你的集群. 没有什么特别的这个第一个节点; 它只是你必须从一个开始,然后让其他人加入它。

请记住您的私人 IP 地址 cockroach-01 . 从 DigitalOcean 控制面板,点击此主机。

该命令启动了没有SSL加密的节点(‘--不安全’),返回了命令提示的控制(‘--背景’),并将这个节点设置为使用其内部IP地址(‘--advertise-host’)与其他节点进行通信。

1cockroach start --insecure --background --advertise-host=cockroach_01_private_ip

注意: 当您启动节点时,您可以使用多个旗帜来更改其行为,例如更改存储的目录数据。

现在你的节点(和群集)是活跃的,你可以通过去它的管理器用户界面仪表板(一个工具与CockroachDB组合,向你显示有关你的群集的信息)查看其细节。

在这里,你会看到你有一个节点在运行。

CockroachDB Admin UI showing a cluster running 1 node

您将在 NODE 盘中注意到一个警告呼叫点(!) 如果您点击警告,则表明您的集群具有 ** Low Replication** ,这意味着您没有足够的节点。

在下一步中,我们将通过将其他两个服务器作为节点添加到这个集群中来解决这个问题. 通过拥有三个节点,CockroachDB 确保至少有三个副本的数据,因此您可以失去一个节点而不会不可挽回地失去数据。

步骤3 – 将节点2和3添加到您的集群中

在您的 cockroach-02 服务器上,用cockroach start命令启动 CockroachDB节点,就像您在步骤 2 中所做的那样,在这里我们更新了命令,以指定您希望它通过其私有 IP 地址连接到第一个服务器的群集。

1[environment second]
2cockroach start --insecure --background \
3--advertise-host=cockroach_02_private_ip \
4--join=cockroach_01_private_ip:26257

在你的第三台机器上重复这个命令, cockroach-03 ,其私人IP地址。

1[environment third]
2cockroach start --insecure --background \
3--advertise-host=cockroach_03_private_ip \
4--join=cockroach_01_private_ip:26257

现在,当您从任何节点访问 Admin UI 时,您将看到群集有 3 个节点。

  • http://cockroach_03_public_ip:8080

CockroachDB Admin UI showing a cluster running 3 nodes

现在,所有节点都通过集群连接,他们都将可以访问相同的数据。

(可选)步骤4 – 证明数据破坏

每当您将数据写入一个节点时,集群中的所有其他节点都可以访问它. 最简单的方式来证明这一点是使用 CockroachDB 的示例数据,然后从 嵌入式 SQL 客户端查看它。

从你的第一个节点, cockroach-01 ,生成示例数据:

1cockroach gen example-data | cockroach sql

这将创建一个名为startrek的样本数据库。

现在,您可以启动 SQL 客户端并查看您的集群中的哪些数据库:

1cockroach sql
1SHOW DATABASES;

您将看到列出的startrek数据库,其中包含我们的示例数据。

1+--------------------+
2|      Database      |
3+--------------------+
4| information_schema |
5| pg_catalog         |
6| startrek           |
7| system             |
8+--------------------+

注意: CockroachDB 支持自己的 SQL 方言,它提供比其他数据库提供的 不同的 SQL 标准扩展

现在,移动到您的第二节点的终端, cockroach-02 ,并运行相同的命令:

1[environment second]
2cockroach sql
1[environment second]
2SHOW DATABASES;

您将看到,即使您在另一个节点上生成示例数据,但它已被分布,并且从所有其他服务器上可以访问startrek数据库。

您也可以从管理员用户界面的 DATABASES 侧栏查看该数据库的存在;例如,在 http://cockroach_01_public_ip:8080/# /databases/

(可选)步骤5 – 从集群中删除节点

除了将数据分发到群集中的所有节点之外,CockroachDB在服务器中断的情况下还保证了您的数据的可用性和完整性。

CockroachDB 对节点故障的容忍公式为 (n - 1)/2 ,其中 ** n** 是群集中的节点数,因此,在这个三节点示例中,我们可以容忍失去一个节点而不会失去任何数据。

为了证明这一点,我们将从集群中删除一个节点,并显示该集群的所有数据仍然可用,然后我们将该节点重新连接到集群中,并看到它接收了在离线时发生的所有更新。

从你的第二个节点, cockroach-02 ,如果你还没有在其中,启动SQL客户端:

1[environment second]
2cockroach sql

计算示例数据库的引用表中的行数:

1[environment second]
2SELECT COUNT(*) FROM startrek.quotes;

您将看到表中有 200 行,请按CTRL+C来退出 SQL 客户端。

现在,我们将从集群中删除这个节点,并看到所有数据仍然可用于其他节点。

从您使用的同一个节点(cockroach-02 )开始,停止鸭子过程:

1[environment second]
2cockroach quit

现在切换到您其他节点中的一个终端(例如cockroach-03 )并启动SQL客户端:

1[environment third]
2cockroach sql

运行与之前相同的命令来计算引用表中的行数:

1[environment third]
2SELECT COUNT(*) FROM startrek.quotes;

尽管失去了集群中的一个节点,但你会发现你仍然有 200 行数据!这意味着 CockroachDB 已经成功地承受了系统故障并维持了数据的完整性。

(可选)步骤 6 — 重新加入集群的节点

我们还可以证明,CockroachDB优雅地处理返回在线的服务器。 首先,我们会删除一些数据,然后让我们删除的节点重新加入集群。

从您目前正在运行的节点中,例如 cockroach-03 ,删除所有引用,其中大于50个。

1[environment third]
2DELETE FROM startrek.quotes WHERE episode > 50;
1[environment third]
2SELECT COUNT(*) FROM startrek.quotes;

你会看到现在有133行数据。

现在,回到我们从集群中删除的节点的终端(cockroach-02 ),并让它重新加入集群:

1[environment second]
2cockroach start --insecure --background \
3--advertise-host=cockroach_02_private_ip \
4--join=cockroach_01_private_ip:26257

启动内置的 SQL 客户端:

1[environment second]
2cockroach sql

现在,计算引用表中包含的行数:

1[environment second]
2SELECT COUNT(*) FROM startrek.quotes;

应该是133。

因此,尽管在更新发生时离线,但节点在重新加入集群后会更新。

如果您愿意,您现在可以删除示例数据(仍然使用cockroach sql CLI):

1[environment second]
2DROP TABLE quotes;
3DROP TABLE episodes;
4DROP DATABASE startrek;

(可选)步骤7 – 连接应用程序

随着群集的启动和运行,您可以将其用作应用程序的数据库,这需要两个部分:

  • 与您的应用程序一起使用的驱动程序(CockroachDB 与 PostgreSQL 驱动程序一起工作) * 适当的连接字符串

本指南为您展示了一个一般的例子;您需要为自己的应用提供具体信息。

选择并安装适当的驱动程序(从兼容的 PostgreSQL 客户端驱动程序列表中)(https://www.cockroachlabs.com/docs/install-client-drivers.html)为您的应用程序。

注意:虽然 CockroachDB 支持 PostgreSQL 线程协议,但它的 SQL 语法不同,并且不是 PostgreSQL 的插入替代品。

然后,在您需要应用程序连接到数据库的任何时刻使用适当的连接字符串。

您的连接链应连接到端口26257,并可以使用任何节点的IP地址,这意味着您的防火墙也必须允许在端口26257上的连接(正如我们在前提条件中设置的那样)。

例如,这里有一个PHP/PDO连接字符串,将用户sammy连接到localhost上的数据库bank:

1PDO('pgsql:host=localhost;port=26257;dbname=bank;sslmode=disable',
2    'sammy', null, array(
3      PDO::ATTR_ERRMODE          => PDO::ERRMODE_EXCEPTION,
4      PDO::ATTR_EMULATE_PREPARES => true,
5  ));

对于使用 PostgreSQL 客户端驱动程序的更多帮助,CockroachDB 有 一系列可用的代码样本

结论

在这一点上,你已经创建了一个三节点的集群,看到CockroachDB的分布式和可生存的功能,并看到如何将集群连接到应用程序中。

由于 CockroachDB 是一个快速移动的项目,你会偶尔看到你的仪表板显示消息 有更新的版本的 CockroachDB 可用. ** 使用 ** 更新 按钮查看更新的二进制,在写时你将不得不手动下载和安装。

如果您想通过添加更多的节点来水平扩展部署,请按照上面的第四节点上的第二和第三节点的步骤,等等.您所需要做的就是安装cockroach二进制并让新节点(s)加入您的现有集群。

如果在检查后,您想要在生产中运行 CockroachDB,请阅读他们的 推荐的生产设置

最后,这里有一个通用链接到 CockroachDB的文档

Published At
Categories with 技术
comments powered by Disqus