docker部署CockroachDB

发布于:2021-10-01 09:16:07

什么是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

相关推荐

最新更新

猜你喜欢