cockroachdb/cockroachCockroachDB是一款分布式SQL数据库,专为提供"始终在线"(always-on)的客户体验设计。通过Docker镜像部署,可简化其在开发、测试及生产环境中的安装、配置与运行流程,支持从单节点本地部署到跨多主机的大规模分布式集群。
作为分布式SQL数据库,CockroachDB适用于需要强一致性、高可用性和水平扩展能力的业务场景,如***交易系统、电商平台、实时分析服务等对数据可靠性和服务连续性要求极高的应用。
通过Docker安装CockroachDB的详细步骤请参考官方文档:Install CockroachDB
适用于开发或测试环境,启动单节点CockroachDB并暴露SQL端口(26257)和管理UI端口(8080):
bash# 启动单节点容器(--insecure用于测试,生产环境需启用TLS) docker run -d \ --name=roach-single \ -p 26257:26257 \ # SQL客户端连接端口 -p 8080:8080 \ # 管理UI端口 -v "${PWD}/data:/cockroach/cockroach-data" \ # 持久化数据卷 cockroachdb/cockroach:latest \ start-single-node \ # 单节点模式启动命令 --insecure \ # 禁用TLS(仅测试用) --listen-addr=0.0.0.0:26257 \ # 允许外部连接 --http-addr=0.0.0.0:8080 # 管理UI监听地址
验证部署:访问 http://localhost:8080 查看管理UI,或通过SQL客户端连接 postgres://root@localhost:26257/defaultdb?sslmode=disable。
在单Docker主机上部署多节点集群,需先创建专用网络以实现容器间通信:
bashdocker network create roachnet # 创建桥接网络,供集群节点通信
以3节点集群为例,节点间通过--join参数指定初始集群成员:
bash# 节点1(初始化集群) docker run -d \ --name=roach1 \ --net=roachnet \ -p 26257:26257 \ # 暴露SQL端口到主机 -p 8080:8080 \ # 暴露管理UI端口到主机 -v "${PWD}/data/roach1:/cockroach/cockroach-data" \ cockroachdb/cockroach:latest \ start \ --insecure \ --listen-addr=roach1:26257 \ # 节点1容器内地址 --http-addr=roach1:8080 \ --join=roach1:26257,roach2:26257,roach3:26257 # 集群节点列表 # 节点2 docker run -d \ --name=roach2 \ --net=roachnet \ -v "${PWD}/data/roach2:/cockroach/cockroach-data" \ cockroachdb/cockroach:latest \ start \ --insecure \ --listen-addr=roach2:26257 \ --http-addr=roach2:8080 \ --join=roach1:26257,roach2:26257,roach3:26257 # 节点3 docker run -d \ --name=roach3 \ --net=roachnet \ -v "${PWD}/data/roach3:/cockroach/cockroach-data" \ cockroachdb/cockroach:latest \ start \ --insecure \ --listen-addr=roach3:26257 \ --http-addr=roach3:8080 \ --join=roach1:26257,roach2:26257,roach3:26257
验证集群:通过节点1的管理UI(http://localhost:8080)查看集群状态,或执行以下命令检查节点:
bashdocker exec -it roach1 cockroach node status --insecure --host=roach1:26257
对于生产环境的跨主机分布式集群,需结合容器编排工具实现节点发现、网络配置和服务管理,具体方案参考官方文档:
| 参数 | 作用说明 |
|---|---|
start-single-node | 单节点模式启动命令(自动初始化集群) |
start | 多节点模式启动命令(需配合--join指定集群节点) |
--insecure | 禁用TLS加密(仅测试用,生产环境需通过--certs-dir指定证书目录) |
--listen-addr | 节点间通信地址(格式:主机:端口,容器内需使用容器名或IP) |
--http-addr | 管理UI监听地址 |
--join | 集群初始节点列表(格式:节点1:端口,节点2:端口,...,用于节点发现) |
--store | 数据存储路径(默认/cockroach/cockroach-data,建议通过Docker卷挂载持久化) |
创建 docker-compose.yml 文件,简化多节点集群部署:
yamlversion: '3.8' services: roach1: image: cockroachdb/cockroach:latest container_name: roach1 command: start --insecure --listen-addr=roach1:26257 --http-addr=roach1:8080 --join=roach1:26257,roach2:26257,roach3:26257 ports: - "26257:26257" # SQL端口 - "8080:8080" # 管理UI端口 volumes: - ./data/roach1:/cockroach/cockroach-data networks: - roachnet roach2: image: cockroachdb/cockroach:latest container_name: roach2 command: start --insecure --listen-addr=roach2:26257 --http-addr=roach2:8080 --join=roach1:26257,roach2:26257,roach3:26257 volumes: - ./data/roach2:/cockroach/cockroach-data networks: - roachnet roach3: image: cockroachdb/cockroach:latest container_name: roach3 command: start --insecure --listen-addr=roach3:26257 --http-addr=roach3:8080 --join=roach1:26257,roach2:26257,roach3:26257 volumes: - ./data/roach3:/cockroach/cockroach-data networks: - roachnet networks: roachnet: driver: bridge # 桥接网络,实现容器间通信 volumes: roach1-data: roach2-data: roach3-data:
启动集群:
bashdocker-compose up -d # 后台启动所有节点 docker-compose logs -f # 查看集群日志
--insecure,通过--certs-dir指定TLS证书目录(证书生成方法参考官方文档)。-v参数)挂载数据目录,避免容器删除导致数据丢失。--cpus=2 --memory=4g),避免资源竞争影响性能。manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务