docker部署CockroachDB

什么是CockroachDB

CockroachDB是基于事务性和高度一致的键值存储构建的分布式SQL数据库。它水平缩放; 在磁盘,机器,机架甚至数据中心故障中幸存下来,从而将延迟中断降到最低,并且无需人工干预;支持 高度一致的 ACID交易;并提供了熟悉的 SQL API,用于结构化,操作和查询数据。

docker运行CockroachDB

步骤1: 创建网桥网络

由于将在单个主机上运行多个Docker容器,每个容器一个CockroachDB节点,因此需要创建Docker所指的桥接网络。桥接网络将使容器能够作为单个群集进行通信,同时使它们与外部网络隔离。

docker network create -d bridge roachnet

步骤2.启动第一个节点

docker run -d \
--name=roach1 \
--hostname=roach1 \
--net=roachnet \
-p 26257:26257 -p 8080:8080  \
-v "${PWD}/cockroach-data/roach1:/cockroach/cockroach-data"  \
cockroachdb/cockroach:v19.1.5 start --insecure

此命令创建一个容器并启动其中的第一个CockroachDB节点。让我们看一下每个部分:

docker run:用于启动新容器的Docker命令。
-d:此标志在后台运行容器,因此可以在同一shell中继续执行后续步骤。
--name:容器的名称。这是可选的,但是自定义名称可以大大简化在其他命令中引用容器的操作,例如,在容器中打开Bash会话或停止容器时。
--hostname:容器的主机名。将使用它来将其他容器/节点加入集群。
--net:容器要加入的桥接网络。有关更多详细信息,请参见步骤1。
-p 26257:26257 -p 8080:8080:这些标志将节点间和客户端节点通信26257的默认端口()以及8080从容器到主机到Admin UI()的HTTP请求的默认端口映射。这样可以进行容器间通信,并可以从浏览器调用管理界面。
-v "${PWD}/cockroach-data/roach1:/cockroach/cockroach-data":此标志将主机目录挂载为数据卷。这意味着该节点的数据和日志将存储在${PWD}/cockroach-data/roach1主机上,并且在容器停止或删除后仍将保留。有关更多详细信息,请参阅Docker的Bind Mounts主题。
cockroachdb/cockroach:v19.1.5 start --insecure:CockroachDB命令以不安全模式启动容器中的节点。

步骤3.将节点添加到集群

至此,集群已经处于运行状态。仅使用一个节点,就可以连接SQL客户端并开始构建数据库。但是,在实际部署中,总是希望3个或更多节点能够利用CockroachDB的自动复制,重新平衡和容错功能。

要模拟实际部署,请通过添加两个以上的节点来扩展集群:

节点2
docker run -d \
--name=roach2 \
--hostname=roach2 \
--net=roachnet \
-v "${PWD}/cockroach-data/roach2:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.1.5 start --insecure --join=roach1

节点3
docker run -d \
--name=roach3 \
--hostname=roach3 \
--net=roachnet \
-v "${PWD}/cockroach-data/roach3:/cockroach/cockroach-data" \
cockroachdb/cockroach:v19.1.5 start --insecure --join=roach1

这些命令再添加两个容器,并在其中启动CockroachDB节点,将它们连接到第一个节点。与步骤2相比,只有几处需要注意:

-v:此标志将主机目录挂载为数据卷。数据和日志这些节点将被存储在${PWD}/cockroach-data/roach2与${PWD}/cockroach-data/roach3主机上和容器停止或删除之后将继续存在。
--join:此标志使用第一个容器的将新节点加入群集hostname。否则,cockroach start将接受所有默认设置。请注意,由于每个节点都在唯一的容器中,因此使用相同的默认端口不会引起冲突。

步骤4.测试集群

现在,已扩展到3个节点,可以将任何节点用作群集的SQL网关。为了说明这一点,请使用以下docker exec命令在第一个容器中启动内置SQL Shell:

docker exec -it roach1 ./cockroach sql --insecure

运行一些基本的CockroachDB SQL语句:

CREATE DATABASE bank;

CREATE TABLE bank.accounts (id INT PRIMARY KEY, balance DECIMAL);

INSERT INTO bank.accounts VALUES (1, 1000.50);

SELECT * FROM bank.accounts;

在这里插入图片描述
退出节点1上的SQL Shell:

\q

然后在第二个容器中启动SQL Shell:

docker exec -it roach2 ./cockroach sql --insecure

现在运行相同的SELECT查询:

SELECT * FROM bank.accounts;

在这里插入图片描述
节点1和节点2的行为与SQL网关相同。

完成后,退出节点2上的SQL Shell:

\q

步骤5.监视集群

启动第一个容器/节点时,已将节点的默认HTTP端口映射8080到8080主机上的端口。要查看集群的Admin UI指标,请将浏览器指向上的该端口localhost,即http://localhost:8080,然后单击左侧导航栏上的Metrics。

如前所述,CockroachDB自动在后台复制数据。要验证成功复制了上一步中写入的数据,请向下滚动到“ 每个节点的副本数”图,然后将鼠标悬停在该行上:

CockroachDB管理界面
在这里插入图片描述
每个节点上的副本数相同,表明群集中的所有数据已被复制3次(默认值)。

步骤6.停止集群
使用docker stop和docker rm命令停止并删除容器(以及集群):

docker stop roach1 roach2 roach3

docker rm roach1 roach2 roach3

如果不打算重新启动群集,则可能要删除节点的数据存储:

rm -rf cockroach-data
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值