本教程适用于以下操作系统版本
- 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,这是当前的最新版本。

配置 UFW
安装完 CockroachDB 后,你必须安装 UFW 来保护你的服务器。然后,开放 TCP 端口 8080 和 26257,这两个端口将被 CockroachDB 集群使用。
使用下面的命令将 UFW 软件包安装到你的 Debian 服务器上。
sudo apt install ufw -y

现在执行以下命令添加 OpenSSH 配置文件并启用 UFW。输入 y 以启动并启用 UFW。
sudo ufw allow OpenSSH
sudo ufw enable
UFW 启用后,你将看到输出“Firewall is active and enabled on system startup”。

接下来,使用以下命令将 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

生成证书
在为 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

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/

生成客户端证书
生成 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。

生成节点证书
最后,你需要生成节点证书,其数量同样取决于集群中服务器的数量。在本示例中,我将为 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

切换到 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

设置证书权限
所有证书生成完毕后,运行以下命令,以允许 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

最后,使用以下命令验证 CockroachDB 服务,确保服务正在运行。
sudo systemctl status cockroachdb
因此,请务必确保 CockroachDB 服务在你的两台 Debian 服务器上都在运行。


初始化 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...”表明集群已初始化完成。

接下来,执行以下命令验证你的 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 集群中服务器的数量,以及每台服务器的状态。

集群运行后,执行以下命令登录 CockroachDB 服务器。请务必在 comp1 服务器上运行此命令,因为你的客户端证书位于 comp1 机器上。
cockroach sql --certs-dir=/opt/cockroachdb/certs --host=192.168.5.21:26257
连接成功后,你将看到如下的 CockroachDB 提示符:

执行以下 SQL 语句创建一个新用户 bob,密码为 p4ssw0rd。随后,将管理员权限授予用户 bob。
CREATE USER bob WITH PASSWORD 'p4ssw0rd';
GRANT admin TO bob;
按 Ctrl+d 退出 CockroachDB 服务器。

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

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

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