本页内容

  • 先决条件
  • 设置 FQDN
  • 下载并安装 CockroachDB
  • 配置 Firewalld
  • 生成 SSL/TLS 证书 生成 CA 证书 生成客户端证书 生成节点证书
  • 以 Systemd 服务方式运行 CockroachDB
  • 初始化 CockroachDB 集群
  • 在 CockroachDB 上创建管理员用户
  • CockroachDB 上的基本操作
  • 检查 CockroachDB 集群中的数据库复制
  • 结论
  • 生成 CA 证书
  • 生成客户端证书
  • 生成节点证书

CockroachDB 是一款开源的、分布式且可扩展的 SQL 数据库,适用于云应用。CockroachDB 提供更高层次的一致性、可复制的 SQL 数据库以及事务性数据存储。CockroachDB 将你的数据存储在多个位置,从而加快数据传送速度。此外,它易于扩展,并为你的应用提供高可用性和容错能力。

本指南向你展示如何在多台 AlmaLinux 9 服务器上安装并创建 CockroachDB 集群。你还将学习使用 CockroachDB 的基本查询,以及验证数据库的自动复制。

先决条件

在开始之前,请确保你具备以下条件:

  • 两台或更多 AlmaLinux 9 服务器 - 在本演示中,我们将使用两台服务器:srv1,IP 地址为 192.168.10.20;以及 srv2,IP 地址为 192.168.10.21。
  • 一个可以执行 sudo 命令以获取 root 权限的非 root 用户。

设置 FQDN

你要做的第一步是为你所有的服务器设置 fqdn(完全限定域名),并确保每个 fqdn 都指向正确的本地 IP 地址。

在 srv1 上,运行以下命令将 fqdn 设置为 srv1.hwdomain.lan。

sudo hostnamectl set-hostname srv1.hwdomain.lan

对于 srv2,运行以下命令将 fqdn 设置为 srv2.hwdomain.lan。

sudo hostnamectl set-hostname srv2.hwdomain.lan

现在使用以下 nano 编辑器命令打开 /etc/hosts 文件。

sudo nano /etc/hosts

将以下配置插入到该行的末尾。

```ini
192.168.10.20 srv1.hwdomain.lan srv1
192.168.10.21 srv2.hwdomain.lan srv2
```

完成后保存并退出该文件。

最后,运行以下命令来验证每台服务器的 fqdn,并执行 ping 命令以确保每个 fqdn 都指向正确的内部 IP 地址。

sudo hostname -f
ping -c3 srv1.hwdomain.lan
ping -c3 srv2.hwdomain.lan

srv1 服务器应具有 fqdn srv1.hwdomain.lan,并指向 IP 地址 192.168.10.20;而 srv2 服务器配置的 fqdn 为 srv2.hwdomain.lan,IP 地址为 192.168.10.21。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

下载并安装 CockroachDB

CockroachDB 可以安装在多种环境中,你可以传统地通过下载 CockroachDB 的预编译二进制包来安装,也可以将其安装在 Kubernetes 等容器化环境中。

在本节中,你将通过预编译二进制包将 CockroachDB 安装到你的 AlmaLinux 9 服务器上。

首先,使用以下 dnf 命令安装 curl。

sudo dnf install curl -y

如何在 AlmaLinux 9 上安装 CockroachDB 集群

现在运行以下命令下载 CockroachDB 二进制包,并通过 tar 命令解压它。

curl https://binaries.cockroachdb.com/cockroach-v23.1.3.linux-amd64.tgz --output cockroach-v23.1.3.linux-amd64.tgz
tar -xzf cockroach-v23.1.3.linux-amd64.tgz

使用以下命令将 CockroachDB 二进制文件 cockroach-v23.1.3.linux-amd64/cockroach 移动到 /usr/bin/ 目录。

sudo cp -i cockroach-v23.1.3.linux-amd64/cockroach /usr/bin/

如何在 AlmaLinux 9 上安装 CockroachDB 集群

最后,输入以下命令来验证 cockroach 二进制文件的完整路径以及 CockroachDB 版本。

which cockroach
cockroach version

如何在 AlmaLinux 9 上安装 CockroachDB 集群

配置 Firewalld

在安装 CockroachDB 之后,你将配置 firewalld,并为 CockroachDB Web 管理面板开放端口 8080,为集群连接开放端口 26257。

运行以下 firewall-cmd 命令,将端口 8080 和 26257 添加到 firewalld 中。然后重新加载 firewalld 以应用更改。

sudo firewall-cmd --add-port={8080/tcp,26257/tcp} --permanent
sudo firewall-cmd --reload

现在使用以下命令验证 firewalld 规则列表。你应该能看到端口 8080 和 26257 已添加到 firewalld 中。

sudo firewall-cmd --list-all

如何在 AlmaLinux 9 上安装 CockroachDB 集群

生成 SSL/TLS 证书

在接下来的部分中,你将生成多个用于 CockroachDB 集群的证书。这可以通过 OpenSSL 实现,但你也可以使用 cockroach 命令行工具。

以下是你将生成的一些 SSL/TLS 证书:

  • CA 证书:这将用于签署你所有的证书。
  • 客户端证书:这可用于连接到 CockroachDB 集群。
  • 节点证书:你必须为每个服务器创建节点证书,以创建安全的 CockroachDB 集群。

生成 CA 证书

在 srv1 和 srv2 两台服务器上运行以下命令,创建一个新目录 /opt/cockroachdb/。在该目录中,你还将创建 certs 和 private 两个目录。

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

在 srv1 上,运行以下 cockroach 命令来生成 CA 证书。这将生成 CA 证书 ca.crt 和 ca.key。

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

如何在 AlmaLinux 9 上安装 CockroachDB 集群

现在运行以下 scp 命令,将 CA 证书 ca.crt 和 ca.key 复制到 srv2 服务器。

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

如何在 AlmaLinux 9 上安装 CockroachDB 集群

生成客户端证书

在 srv1 服务器上,运行以下命令为默认用户 root 生成客户端证书。这将生成两个证书 client.root.crt 和 client.root.key,可用于登录 CockroachDB 集群。

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

如何在 AlmaLinux 9 上安装 CockroachDB 集群

生成节点证书

在生成 CA 证书并将其上传到 srv2 服务器后,你将在 srv1 和 srv2 两台服务器上生成节点证书。

在 srv1 服务器上运行以下命令以生成节点证书。请务必更改 srv1 服务器的 fqdn 和 IP 地址。

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

命令执行后,节点证书 node.crt 和 node.key 将可用。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

现在在 srv2 服务器上运行以下命令以生成节点证书。请务必更改 srv2 服务器的 fqdn 和 IP 地址。

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

你应该能看到已生成节点证书 node.crt 和 node.key。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

以 Systemd 服务方式运行 CockroachDB

在生成 SSL/TLS 证书之后,接下来你将启动 CockroachDB 服务。你可以通过命令行手动启动 CockroachDB,但推荐的方法是使用 systemd 服务。

首先,在 srv1 和 srv2 两台服务器上运行以下命令,创建一个新用户 cockroach,并将 /opt/cockroachdb 目录的所有权更改为用户 cockroach。

sudo adduser -d /opt/cockroachdb -r -U cockroach
sudo chown -R cockroach:cockroach /opt/cockroachdb

在 srv1 服务器上,运行以下 nano 命令,创建一个新 systemd 服务文件 /etc/systemd/system/cockroachdb.service。

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

插入以下配置,并务必将 --advertise-addr 参数更改为 srv1 服务器的 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.10.20 --join=192.168.10.20,192.168.10.21
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=cockroach
[Install]
WantedBy=default.target

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

现在切换到 srv2 服务器,使用 nano 编辑器创建一个新 systemd 服务文件 /etc/systemd/system/cockroachdb.service。

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

将以下配置添加到该文件中,并务必将 --advertise-addr 参数更改为 srv2 服务器的 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.10.21 --join=192.168.10.20,192.168.10.21
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=cockroach
[Install]
WantedBy=default.target

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

接下来,运行以下 systemctl 命令以重新加载 systemd 管理器并应用新的 systemd 服务。

sudo systemctl daemon-reload

然后,使用以下 systemctl 命令启动并启用 cockroachdb 服务。

sudo systemctl start cockroachdb
sudo systemctl enable cockroachdb

如何在 AlmaLinux 9 上安装 CockroachDB 集群

最后,验证 cockroachdb 服务,以确保其正在运行。

sudo systemctl status cockroachdb

如果配置成功,你应该会看到 cockroachdb 服务状态为 active (running)。

srv1 服务器上的 cockroachdb 服务状态。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

srv2 服务器上的 cockroachdb 服务状态。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

初始化 CockroachDB 集群

在 srv1 和 srv2 服务器上将 CockroachDB 作为 systemd 服务启动后,你就可以初始化 CockroachDB 集群了。

在 srv1 服务器上运行以下 cockroach 命令,以初始化 CockroachDB 集群。

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

如果初始化成功,你应该会看到输出 "Cluster successfully initialized"。

现在运行以下命令,检查 CockroachDB 数据目录 /opt/cockroachdb/cockroach-data/ 中的 CockroachDB 日志。

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

如果你看到类似 "CockroachDB node starting.." 的输出,这意味着 CockroachDB 集群已成功初始化。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

最后,运行以下命令来检查 CockroachDB 集群中的节点列表以及每个节点的详细状态。

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

你应该能看到集群中有两台 CockroachDB 服务器,状态为 alive 且可用。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

在 CockroachDB 上创建管理员用户

在 CockroachDB 集群运行后,下一步是为 CockroachDB 集群创建一个管理员用户。

首先,运行以下 cockroach 命令,使用默认用户 root 以及 /opt/cockroachdb/certs 目录中的证书,连接到 CockroachDB 服务器 srv1.hwdomain.lan。

cockroach sql --certs-dir=/opt/cockroachdb/certs --host=srv1.hwdomain.lan:26257

在下面的 CockroachDB 提示符中,确认你已以默认 root 用户身份连接到 CockroachDB 服务器 srv1.hwdomain.lan 以及数据库 defaultdb。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

现在运行以下查询,列出 CockroachDB 集群上可用的数据库。

SHOW DATABASES;

你应该能在你的 CockroachDB 集群上看到数据库 defaultdb、postgres 和 system。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

接下来,运行以下查询创建一个新用户 alice。然后,授予 alice 用户 admin 权限。不要忘记在下面的查询中更改密码。

CREATE USER alice WITH PASSWORD 'password';
GRANT admin TO alice;

现在输入 quit 或按 Ctrl+d 退出 CockroachDB shell。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

最后,启动你的 Web 浏览器,访问 srv1 的 IP 地址加上端口 8080(即:http://192.168.10.20:8080/),以进入 CockroachDB Web 管理面板。系统应该会提示你进行 CockroachDB 身份验证。

输入用户 alice 和密码,然后点击 Log in。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

如果你拥有正确的用户和密码,你应该会进入 CockroachDB 管理面板。你应该能看到 CockroachDB 集群拥有两台服务器:192.168.10.20 和 192.168.10.21。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

CockroachDB 上的基本操作

在接下来的部分中,你将学习如何在 CockroachDB 上创建新数据库和表,以及插入和检索数据。以下命令将在 srv1 服务器上运行。

首先,运行以下命令,以用户 alice 身份登录到 CockroachDB 集群。

cockroach sql --user=alice --certs-dir=/opt/cockroachdb/certs --host=srv1.hwdomain.lan:26257

当提示输入密码时,输入用户 alice 的密码。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

登录后,运行以下查询,创建一个包含表 users 的新数据库 testdb。

CREATE DATABASE testdb;
CREATE TABLE testdb.users (
   id INT PRIMARY KEY     NOT NULL,
   name           TEXT    NOT NULL,
   age            INT     NOT NULL,
   address        CHAR(50),
   salary         REAL
);

如何在 AlmaLinux 9 上安装 CockroachDB 集群

现在运行 USE 查询切换到数据库 testdb,并运行下面的一些 INSERT 查询,向表 users 中添加新数据。

USE testdb;
INSERT INTO users (id,name,age,address,salary) VALUES (1, 'Paul', 32, 'California', 20000.00);
INSERT INTO users (id,name,age,address,salary) VALUES (2, 'Jesse', 35, 'Mexico', 30000.00);
INSERT INTO users (id,name,age,address,salary) VALUES (3, 'Linda', 27, 'Canada', 40000.00);

如何在 AlmaLinux 9 上安装 CockroachDB 集群

最后,执行下面的 SELECT 查询,从表 users 中检索你的数据。

SELECT * FROM users;

你的数据应该会打印在你的终端屏幕上。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

检查 CockroachDB 集群中的数据库复制

在创建新数据库并插入新数据后,你现在将从 srv2 服务器验证 CockroachDB 集群中的数据库复制,因此请务必在 srv2 服务器上运行这些命令。

在 srv2 服务器上,运行以下命令,以用户 alice 身份连接到 CockroachDB 服务器。

cockroach sql --user=alice --certs-dir=/opt/cockroachdb/certs --host=srv2.hwdomain.lan:26257

当提示时,输入用户 alice 的密码。

登录后,运行以下查询,检查 CockroachDB 集群上可用的数据库列表。

SHOW DATABASES;

如果数据库复制成功,你应该能在 srv2 服务器上看到可用的数据库 testdb。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

现在运行以下查询,切换到数据库 testdb,并从表 users 中检索可用的数据。

USE testdb;
SELECT * FROM users;

如果复制成功,你应该能在 srv2 服务器上看到你的数据。

如何在 AlmaLinux 9 上安装 CockroachDB 集群

结论

恭喜,做得好!你已在你的 AlmaLinux 9 服务器上完成了 CockroachDB 集群的安装。你已创建了一个带有 SSL/TLS 证书的安全 CockroachDB 集群,并在后台以 systemd 服务方式运行 CockroachDB。此外,你还学习了一些用于创建管理员用户、创建数据库以及在 CockroachDB 上插入和检索数据的基本查询。

鉴于此,你现在可以开始迁移到 CockroachDB 集群,并且你的数据库将自动复制到多个节点。