如何在 Ubuntu 上部署安全的 CockroachDB 集群
CockroachDB 是一个可扩展的云原生 SQL 数据库,用于构建可扩展的云服务。它专门设计用于在多个位置存储数据副本以提供快速访问。它是一个基于事务和键值存储构建的分布式 SQL 数据库。 IT 可以承受磁盘、机器和数据中心故障,几乎零延迟中断,无需人工干预。
本教程将向您展示如何在 Ubuntu 服务器上设置三个三节点 CockroachDB 集群。
先决条件
- 三台服务器运行 Ubuntu 20.04。
- 服务器配置了 root 密码。
对于本教程,我们将使用以下设置:
主机名 IP 地址
节点1 104.245.33.97
节点2 216.98.11.175
节点3 45.58.38.224
入门
在开始之前,您需要将所有节点更新到最新版本。您可以通过以下命令将所有节点一一更新:
apt-get update -y
更新所有节点后,重新启动它们以应用更改。
设置时间同步
在开始之前,您需要在所有节点之间设置时间同步。您可以使用 chrony 来完成此操作。 Chrony 是网络时间协议 (NTP) 的灵活实现。用于同步不同NTP服务器的系统时钟
首先,使用以下命令安装 chrony:
apt-get install chrony -y
安装后,使用以下命令编辑 chrony 配置文件:
nano /etc/chrony/chrony.conf
找到默认池并将其替换为以下行:
pool 0.id.pool.ntp.org iburst maxsources 4
pool 1.id.pool.ntp.org iburst maxsources 1
pool 2.id.pool.ntp.org iburst maxsources 1
pool 3.id.pool.ntp.org iburst maxsources 2
保存并关闭文件,然后重新启动 chrony 服务,并使用以下命令使其在系统重新引导时启动:
systemctl restart chrony
systemctl enable chrony
完成后,您可以继续下一步。
安装 CockroachDB
首先,您需要在所有节点上安装 CockroachDB。
您可以使用以下命令从其官方网站下载最新版本的 CockroachDB:
wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz
下载完成后,使用以下命令解压下载的文件:
tar -xvzf cockroach-latest.linux-amd64.tgz
接下来,使用以下命令将 CockroachDB 二进制文件复制到 /usr/local/bin 目录:
cp cockroach-*/cockroach /usr/local/bin/
接下来,使用以下命令验证 CockroachDB 版本:
cockroach version
您应该得到以下输出:
Build Tag: v20.1.6
Build Time: 2020/09/24 18:16:45
Distribution: CCL
Platform: linux amd64 (x86_64-unknown-linux-gnu)
Go Version: go1.13.9
C Compiler: gcc 6.3.0
Build SHA-1: be8c0a720e98a147263424cc13fc9bfc75f46013
Build Type: release
Note: Run all commands on all nodes.
创建证书
首先,在所有节点上创建一个目录来存放证书文件。在所有节点上运行以下命令创建 certs 目录:
mkdir ~/certs
接下来,您需要创建 CA 证书、根证书和客户端证书。
创建CA证书
在node1上,使用以下命令创建CA证书:
cockroach cert create-ca --certs-dir=certs --ca-key=certs/ca.key
此命令将在 ~/certs 目录中生成 ca.key 和 ca.crt。
接下来,使用以下命令将生成的 CA 复制到两个节点:
scp ~/certs/ca.crt ~/certs/ca.key [email :~/certs/
scp ~/certs/ca.crt ~/certs/ca.key [email :~/certs/
创建客户端证书
接下来,您需要生成客户端证书来保护 SQL 和集群之间的通信。
在所有节点上执行以下命令生成客户端证书:
cockroach cert create-client root --certs-dir=certs --ca-key=certs/ca.key
完成后,您可以继续创建服务器证书。
创建服务器证书
接下来,您需要生成服务器证书以保护 CockroachDB 集群上的服务器之间的通信。
在node1上执行以下命令生成服务器证书:
cockroach cert create-node localhost $(hostname) 104.245.33.97 --certs-dir=certs --ca-key=certs/ca.key
在node2上执行以下命令生成服务器证书:
cockroach cert create-node localhost $(hostname) 216.98.11.175 --certs-dir=certs --ca-key=certs/ca.key
在node3上执行以下命令生成服务器证书:
cockroach cert create-node localhost $(hostname) 45.58.38.224 --certs-dir=certs --ca-key=certs/ca.key
这将在 ~/certs 目录中生成 node.key 和 node.crt 文件。
您可以使用以下命令列出所有证书:
cockroach --certs-dir=certs cert list
您应该得到以下输出:
Certificate directory: certs
Usage | Certificate File | Key File | Expires | Notes | Error
---------+------------------+-----------------+------------+----------------------------------------+--------
CA | ca.crt | | 2030/10/06 | num certs: 1 |
Node | node.crt | node.key | 2025/10/02 | addresses: localhost,db1,104.245.33.97 |
Client | client.root.crt | client.root.key | 2025/10/02 | user: root |
(3 rows)
完成后,您可以继续下一步。
启动 CockroachDB 集群
至此,所有证书都已准备好,可以启动集群了。
在node1上,运行以下命令来初始化Secure CockroachDB Cluster:
cockroach start --background --certs-dir=certs --advertise-host=104.245.33.97 --listen-addr=104.245.33.97
您可以使用以下命令检查集群的状态:
cockroach node status --certs-dir=certs --host=104.245.33.97
您应该得到以下输出:
id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live
-----+---------------------+---------------------+---------+----------------------------------+----------------------------------+----------+--------------+----------
1 | 104.245.33.97:26257 | 104.245.33.97:26257 | v20.1.6 | 2020-09-28 08:34:44.939507+00:00 | 2020-09-28 08:36:10.492789+00:00 | | true | true
(1 row)
完成后,您可以继续下一步。
将两个节点添加到集群
接下来,您必须将两个节点添加到 CockroachDB 安全集群。
在node2上,运行以下命令将其添加到CockroachDB安全集群中。
cockroach start --background --certs-dir=certs --advertise-host=216.98.11.175 --listen-addr=216.98.11.175 --join=104.245.33.97:26257
在节点3上,运行以下命令将其添加到CockroachDB安全集群中。
cockroach start --background --certs-dir=certs --advertise-host=45.58.38.224 --listen-addr=45.58.38.224 --join=104.245.33.97:26257
接下来,返回到 node1 并使用以下命令检查集群的状态:
cockroach node status --certs-dir=certs --host=104.245.33.97
您应该看到所有节点都已添加到集群中。
id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live
-----+---------------------+---------------------+---------+----------------------------------+----------------------------------+----------+--------------+----------
1 | 104.245.33.97:26257 | 104.245.33.97:26257 | v20.1.6 | 2020-09-28 08:34:44.939507+00:00 | 2020-09-28 08:45:42.014332+00:00 | | true | true
2 | 216.98.11.175:26257 | 216.98.11.175:26257 | v20.1.6 | 2020-09-28 08:37:12.209878+00:00 | 2020-09-28 08:45:40.747232+00:00 | | true | true
3 | 45.58.38.224:26257 | 45.58.38.224:26257 | v20.1.6 | 2020-09-28 08:39:37.913658+00:00 | 2020-09-28 08:45:37.97068+00:00 | | true | true
(3 rows)
至此,CockroachDB集群已启动并监听8080端口。
完成后,您可以继续下一步。
访问 CockroachDB 仪表板
CockroachDB 提供了一个简单易用的 Web 界面来监控集群。在访问 CockroachDB Web 界面之前,您需要创建一个管理员用户并为其设置密码。
首先,使用以下命令登录 cockroach DB SQL shell:
cockroach sql --certs-dir=certs --host=104.245.33.97
接下来,创建一个名为 hitesh 的用户并使用以下命令设置密码:
CREATE USER hitesh WITH PASSWORD 'mypassword';
接下来,退出 SQL shell,然后使用 URL https://node1-ip-address:8080 访问 CockroachDB Web 界面。您应该看到以下页面:
提供您的管理员用户名和密码,然后单击登录输入按钮。您应该在下一页中看到 CockroachDB 仪表板:
验证数据库复制
接下来,您需要验证数据库是否在所有节点之间复制。
在 node1 上,使用以下命令登录 SQL shell:
cockroach sql --certs-dir=certs --host=104.245.33.97
接下来,使用以下命令创建名为 testdb1 和 testdb2 的数据库:
create database testdb1;
create database testdb2;
接下来,使用以下命令验证数据库:
show databases;
您应该在以下输出中看到所有数据库:
database_name
-----------------
defaultdb
postgres
system
testdb1
testdb2
(5 rows)
Time: 3.568509ms
接下来,转到Node2并验证数据库是否已复制。
在node2上,使用以下命令登录SQL shell:
cockroach sql --certs-dir=certs --host=216.98.11.175
运行以下命令来显示数据库:
show databases;
您应该在以下输出中看到 testdb1 和 testdb2:
database_name
-----------------
defaultdb
postgres
system
testdb1
testdb2
(5 rows)
Time: 19.196903ms
上面的结果表明数据库复制在CockroachDB集群上正在工作。
结论
恭喜!您已在 Ubuntu 20.04 服务器上成功安装并设置了安全的 CockroachDB 集群。您现在可以轻松地将更多节点添加到集群中。如果您有任何疑问,请随时问我。想要了解更多信息,可以访问CockroachDB官方文档。