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 roach3docker rm roach1 roach2 roach3
如果不打算重新启动群集,则可能要删除节点的数据存储:
rm -rf cockroach-data
docker部署CockroachDB相关推荐
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- Docker 部署SpringBoot项目不香吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...
- docker部署springboot_Docker+SpringBoot快速构建和部署应用
前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...
- docker初体验:docker部署nginx负载均衡集群
Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...
- docker初体验:docker部署nginx服务
Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx 环境 centos7 ...
- Docker系列 四.Docker部署SpringBoot
四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...
- Docker部署文档
Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...
- Docker部署Zookeeper集群
Docker部署Zookeeper集群 官方网站: http://zookeeper.apache.org/ http://zookeeper.apache.org/doc/r3.4.8/zookee ...
- 部署go的web应用_使用Docker部署Go Web应用
为什么需要Docker? 使用docker的主要目标是容器化.也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机. 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很 ...
最新文章
- linux shell 打印当前行号
- Netbeans OpenGL使用
- 设计模式6+1大原则
- Python命令行选项参数解析策略
- springboot读取自定义properties文件
- CCNA实验(9) -- Frame Relay
- es max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
- UVA 10002 Center of Masses
- Atitit 命令行返回 cli 返回解析 tab分割csv格式 v4 t34.docx Atitit 命令行返回 cli 返回解析 csv 格式 cliutil 目录 1.1. 线使用tab
- 工作流管理系统开发之十 数据库连接及事务设定
- Android Socket 服务器ServerSocket发数据到客户端
- 阿尔兹海默症AD最新研究进展(2022年2月)
- hive修复分区或修复表 以及msck命令的使用
- qq 登陆界面怎么测试
- 锐龙r77700参数 r7 7700功耗 r7 7700核显性能
- Office 365组命名策略 - 补充
- 学校作业-Usaco DP水题
- U型地埋管(地埋管换热器采用单孔双U管)仿真教程
- 音频基础知识 - PCM 浅析
- java画球_我的世界java版指令画球教程
热门文章
- 景区票务分销系统功能推荐,景区票务系统解决方案
- 十大经典排序算法-归并排序算法详解
- element plus修改CheckBox样式
- *** glibc detected *** ./Simple_Sound_Recording: free(): corrupted unsorted chunks: 0x0001c8a0 ***
- 全局变量和局部变量重名
- openwrt使用linux内核版本,openwrt更换原有Linux内核版本
- layui radio 回显
- 智能家居(7) —— 人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)
- 用 Python 制作“除夕夜倒计时”海报,新的一年你准备好了么?
- Javascript中数组元素是什么