什么是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 roach3docker rm roach1 roach2 roach3

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

rm -rf cockroach-data

docker部署CockroachDB相关推荐

  1. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  2. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  3. docker部署springboot_Docker+SpringBoot快速构建和部署应用

    前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...

  4. docker初体验:docker部署nginx负载均衡集群

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...

  5. docker初体验:docker部署nginx服务

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx 环境 centos7 ...

  6. Docker系列 四.Docker部署SpringBoot

    四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...

  7. Docker部署文档

    Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...

  8. Docker部署Zookeeper集群

    Docker部署Zookeeper集群 官方网站: http://zookeeper.apache.org/ http://zookeeper.apache.org/doc/r3.4.8/zookee ...

  9. 部署go的web应用_使用Docker部署Go Web应用

    为什么需要Docker? 使用docker的主要目标是容器化.也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机. 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很 ...

最新文章

  1. linux shell 打印当前行号
  2. Netbeans OpenGL使用
  3. 设计模式6+1大原则
  4. Python命令行选项参数解析策略
  5. springboot读取自定义properties文件
  6. CCNA实验(9) -- Frame Relay
  7. es max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
  8. UVA 10002 Center of Masses
  9. Atitit 命令行返回 cli 返回解析 tab分割csv格式 v4 t34.docx Atitit 命令行返回 cli 返回解析 csv 格式 cliutil 目录 1.1. 线使用tab
  10. 工作流管理系统开发之十 数据库连接及事务设定
  11. Android Socket 服务器ServerSocket发数据到客户端
  12. 阿尔兹海默症AD最新研究进展(2022年2月)
  13. hive修复分区或修复表 以及msck命令的使用
  14. qq 登陆界面怎么测试
  15. 锐龙r77700参数 r7 7700功耗 r7 7700核显性能
  16. Office 365组命名策略 - 补充
  17. 学校作业-Usaco DP水题
  18. U型地埋管(地埋管换热器采用单孔双U管)仿真教程
  19. 音频基础知识 - PCM 浅析
  20. java画球_我的世界java版指令画球教程

热门文章

  1. 景区票务分销系统功能推荐,景区票务系统解决方案
  2. 十大经典排序算法-归并排序算法详解
  3. element plus修改CheckBox样式
  4. *** glibc detected *** ./Simple_Sound_Recording: free(): corrupted unsorted chunks: 0x0001c8a0 ***
  5. 全局变量和局部变量重名
  6. openwrt使用linux内核版本,openwrt更换原有Linux内核版本
  7. layui radio 回显
  8. 智能家居(7) —— 人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)
  9. 用 Python 制作“除夕夜倒计时”海报,新的一年你准备好了么?
  10. Javascript中数组元素是什么