本教程适用于以下操作系统版本

  • Debian 12(Bookworm)
  • Debian 11(Bullseye)

本页内容

  • 前置条件
  • 安装 CockroachDB
  • 配置 UFW 防火墙
  • 生成证书 生成 CA 生成客户端 生成节点 设置证书权限
  • 配置 Systemd 服务 comp1 的 CockroachDB 服务 comp2 的 CockroachDB 服务 启动 CockroachDB
  • 初始化 CockroachDB 集群
  • 结论
  • 生成 CA
  • 生成客户端
  • 生成节点
  • 设置证书权限
  • comp1 的 CockroachDB 服务
  • comp2 的 CockroachDB 服务
  • 启动 CockroachDB

CockroachDB 是一款面向云应用的开源分布式可扩展 SQL 数据库。CockroachDB 提供更高层级的一致性、可复制的 SQL 数据库以及事务型数据存储。

CockroachDB 将你的数据存储在多个位置,从而加快数据交付速度。此外,它还易于扩展,并为你的应用提供高可用性和容错能力。

在本指南中,我们将向你展示如何在 Debian 12 服务器上安装 CockroachDB。随后,我们还将演示如何借助多台 Debian 服务器初始化 CockroachDB 集群。

前置条件

在继续之前,请确保你已满足以下条件:

  • 两台或多台通过本地网络互相连接的 Debian 12 服务器。
  • 一个具有管理员权限的非 root 用户。
  • 每台服务器都已配置 FQDN(完全限定域名)。

安装 CockroachDB

CockroachDB 是一个分布式可扩展的 SQL 数据库系统。在部署 CockroachDB 集群之前,你必须在每台服务器上安装 CockroachDB 应用程序。

现在你将在每台 Debian 服务器上安装 CockroachDB。

首先,创建一个新系统用户 cockroach,其默认主目录为 /opt/cockroachdb。

sudo adduser --home /opt/cockroachdb --system --group cockroach
sudo chown -R cockroach:cockroach /opt/cockroachdb

使用下面的 curl 命令下载最新版本的 CockroachDB。请务必访问 CockroachDB 下载页面以获取最新版本的下载链接。

curl https://binaries.cockroachdb.com/cockroach-v23.1.14.linux-amd64.tgz --output cockroach-v23.1.14.linux-amd64.tgz

下载完成后,解压 cockroach-v23.1.14.linux-amd64.tgz 文件,并将 CockroachDB 二进制文件复制到 /usr/bin/ 目录。

tar -xzf cockroach-v23.1.14.linux-amd64.tgz
cp -i cockroach-v23.1.14.linux-amd64/cockroach /usr/bin/

最后,使用下面的命令验证 CockroachDB 的版本。

cockroach --version

你可以从下方看到,已安装 CockroachDB v23.1.14,这是当前的最新版本。

在 Debian 12 上安装 CockroachDB 集群

配置 UFW

安装完 CockroachDB 后,你必须安装 UFW 来保护你的服务器。然后,开放 TCP 端口 8080 和 26257,这两个端口将被 CockroachDB 集群使用。

使用下面的命令将 UFW 软件包安装到你的 Debian 服务器上。

sudo apt install ufw -y

在 Debian 12 上安装 CockroachDB 集群

现在执行以下命令添加 OpenSSH 配置文件并启用 UFW。输入 y 以启动并启用 UFW。

sudo ufw allow OpenSSH
sudo ufw enable

UFW 启用后,你将看到输出“Firewall is active and enabled on system startup”。

在 Debian 12 上安装 CockroachDB 集群

接下来,使用以下命令将 TCP 端口 8080 和 26257 添加到 UFW。CockroachDB 集群将使用这两个 TCP 端口。

sudo ufw allow 8080/tcp
sudo ufw allow 26257/tcp

最后,使用以下命令验证 UFW 状态以及已启用的规则列表。你将看到 UFW 状态为 Active(已激活),且 OpenSSH、端口 8080/tcp 和 26257/tcp 均已启用。

sudo ufw status

在 Debian 12 上安装 CockroachDB 集群

生成证书

在为 CockroachDB 集群生成证书之前,请执行以下命令,在 /opt/cockroachdb 目录下创建 certs 和 private 两个新目录,用于存放你的证书。

mkdir -p /opt/cockroachdb/{certs,private}

现在继续生成以下证书:CA 证书、节点证书和客户端证书。

生成 CA

CA 证书对于为客户端证书和节点证书签名非常重要。在本节中,你将在 comp1 服务器上生成 CA 证书,并通过 scp 将 CA 证书和密钥复制到 comp2 服务器。因此,请确保你拥有 comp2 服务器的 SSH 访问权限。

执行以下命令,在 comp1 服务器上生成 CA 证书。

cockroach cert create-ca \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

在 Debian 12 上安装 CockroachDB 集群

CA 生成后,将 ca.key 和 ca.crt 一并复制到 comp2 服务器。

scp /opt/cockroachdb/private/ca.key 
[email protected]
:/opt/cockroachdb/private/
scp /opt/cockroachdb/certs/ca.crt 
[email protected]
:/opt/cockroachdb/certs/

在 Debian 12 上安装 CockroachDB 集群

生成客户端证书

生成 CA 之后,你接下来需要的证书是客户端证书。它将用于通过 TLS 以安全方式连接到 CockroachDB 集群。

仍然在 comp1 服务器上,执行以下命令为默认用户 root 创建客户端证书。

cockroach cert create-client \
root \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

流程完成后,你的客户端证书将位于 /opt/cockroachdb/certs/client.root.crt 和 /opt/cockroachdb/certs/client.root.key。

在 Debian 12 上安装 CockroachDB 集群

生成节点证书

最后,你需要生成节点证书,其数量同样取决于集群中服务器的数量。在本示例中,我将为 comp1 和 comp2 服务器各生成一个节点证书。

在 comp1 服务器上执行以下命令,为 comp1 生成节点证书。请务必将 IP 地址和 FQDN 替换为你的服务器信息。

cockroach cert create-node \
comp1.hwdomain.lan \
192.168.5.21 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

在 Debian 12 上安装 CockroachDB 集群

切换到 comp2 服务器,执行以下命令为 comp2 生成节点证书。同时请修改为 comp2 服务器的 IP 地址和 FQDN 信息。

cockroach cert create-node \
comp2.hwdomain.lan \
192.168.5.22 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

在 Debian 12 上安装 CockroachDB 集群

设置证书权限

所有证书生成完毕后,运行以下命令,以允许 cockroach 用户访问证书文件。请务必在 comp1 和 comp2 两台服务器上都执行此操作。

sudo chown -R cockroach:cockroach /opt/cockroachdb/certs
sudo chown -R cockroach:cockroach /opt/cockroachdb/private

配置 Systemd 服务

为 CockroachDB 生成证书后,下一步是为每台服务器创建 CockroachDB 服务文件。然后启动并启用 CockroachDB 服务。

comp1 的 CockroachDB 服务

在 comp1 服务器上,使用下面的 nano 编辑器命令创建新的 systemd 服务文件 /etc/systemd/system/cockroachdb.service。

sudo nano /etc/systemd/system/cockroachdb.service

添加以下服务配置。请务必将 --advertise-addr 参数替换为 comp1 的 IP 地址。

[Unit]
Description=Cockroach Database cluster node
Requires=network.target
[Service]
Type=notify
WorkingDirectory=/opt/cockroachdb
ExecStart=/usr/bin/cockroach start --certs-dir=/opt/cockroachdb/certs --advertise-addr=192.168.5.21 --join=192.168.5.21,192.168.5.22
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=cockroach
[Install]
WantedBy=default.target

完成后保存并退出文件。

comp2 的 CockroachDB 服务

切换到 comp2 服务器,执行下面的 nano 编辑器命令,创建新的服务文件 /etc/systemd/system/cockroachdb.service。

sudo nano /etc/systemd/system/cockroachdb.service

插入以下配置,并务必将 --advertise-addr 参数替换为 comp2 的 IP 地址。

[Unit]
Description=Cockroach Database cluster node
Requires=network.target
[Service]
Type=notify
WorkingDirectory=/opt/cockroachdb
ExecStart=/usr/bin/cockroach start --certs-dir=/opt/cockroachdb/certs --advertise-addr=192.168.5.22 --join=192.168.5.21,192.168.5.22
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=cockroach
[Install]
WantedBy=default.target

完成后,保存文件并退出编辑器。

启动 CockroachDB

CockroachDB 服务文件创建好后,你现在可以应用更改,然后启动并启用 CockroachDB 服务。

执行以下命令重新加载 systemd 管理器并应用新的 CockroachDB 服务。

sudo systemctl daemon-reload

现在使用以下命令在 comp1 和 comp2 两台服务器上启动并启用 CockroachDB 服务。

sudo systemctl start cockroachdb
sudo systemctl enable cockroachdb

在 Debian 12 上安装 CockroachDB 集群

最后,使用以下命令验证 CockroachDB 服务,确保服务正在运行。

sudo systemctl status cockroachdb

因此,请务必确保 CockroachDB 服务在你的两台 Debian 服务器上都在运行。

在 Debian 12 上安装 CockroachDB 集群

在 Debian 12 上安装 CockroachDB 集群

初始化 CockroachDB 集群

现在 CockroachDB 服务已在每台服务器上运行,你可以继续从 comp1 服务器初始化 CockroachDB 集群。随后,为 CockroachDB 创建管理员用户并访问 CockroachDB 的 Web 管理后台。

在 comp1 服务器上,执行以下命令初始化 CockroachDB 集群。流程完成后,你应看到输出“Cluster successfully initialized”。

cockroach init --certs-dir=/opt/cockroachdb/certs --host=192.168.5.21:26257

此外,你也可以通过以下命令查看 CockroachDB 日志文件来验证初始化过程。

grep 'node starting' /opt/cockroachdb/cockroach-data/logs/cockroach.log -A 11

输出“CockroachDB node starting...”表明集群已初始化完成。

在 Debian 12 上安装 CockroachDB 集群

接下来,执行以下命令验证你的 CockroachDB 集群。ls 选项用于获取集群中的服务器列表,而 status 命令用于检查 CockroachDB 集群的状态。

cockroach node --certs-dir=/opt/cockroachdb/certs --host=192.168.5.21 ls
cockroach node --certs-dir=/opt/cockroachdb/certs --host=192.168.5.21 status

你可以在下方看到 CockroachDB 集群中服务器的数量,以及每台服务器的状态。

在 Debian 12 上安装 CockroachDB 集群

集群运行后,执行以下命令登录 CockroachDB 服务器。请务必在 comp1 服务器上运行此命令,因为你的客户端证书位于 comp1 机器上。

cockroach sql --certs-dir=/opt/cockroachdb/certs --host=192.168.5.21:26257

连接成功后,你将看到如下的 CockroachDB 提示符:

在 Debian 12 上安装 CockroachDB 集群

执行以下 SQL 语句创建一个新用户 bob,密码为 p4ssw0rd。随后,将管理员权限授予用户 bob。

CREATE USER bob WITH PASSWORD 'p4ssw0rd';
GRANT admin TO bob;

按 Ctrl+d 退出 CockroachDB 服务器。

在 Debian 12 上安装 CockroachDB 集群

最后,在你本地机器的 Web 浏览器中打开并访问 comp1 的 IP 地址加端口 8080(https://192.168.5.21:8080)。你将看到 CockroachDB 登录页面。

使用用户 bob 和密码 p4ssw0rd 登录。

在 Debian 12 上安装 CockroachDB 集群

登录后,你将看到如下的 CockroachDB 管理后台:

在 Debian 12 上安装 CockroachDB 集群

结论

总结一下,你现在已经完成了 Debian 12 服务器上 CockroachDB 集群的安装。你还为 CockroachDB 创建了管理员用户,并访问了 CockroachDB 的 Web 管理后台。现在你可以创建新的数据库和用户,并利用 CockroachDB 的 Web 管理后台来管理 CockroachDB 的安装。