部署 CockroachDB
分布式 SQL,Postgres 线兼容、强一致和多区域。
平台高级
为什么
CockroachDB 是分布式 SQL 数据库,线兼容 Postgres。强一致(可串行化)存活节点/区域故障,地理分区低延迟。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
全球分布 SQL 应用需强一致用 CockroachDB。单区域避免(用 Postgres)。
如何做
1. Docker — cockroachdb/cockroach:v23.2
2. 初始化 — cockroach init --insecure 集群
3. SQL — cockroach sql,Postgres 兼容
4. 区域 — --locality=region=us-east1,zone=us-east1-b
5. 分区 — PARTITION BY region 地理数据
6. HA — 跨区域 3+ 节点,自动故障转移
7. 备份 — BACKUP TO 定期备份
示例
# 启动 3 节点集群
cockroach start --insecure --listen-addr=localhost:26257 --http-addr=localhost:8080 --locality=region=us-east,zone=us-east-1 --join=localhost:26257,localhost:26258,localhost:26259
# 初始化集群
cockroach init --insecure --host=localhost:26257
# SQL(Postgres 兼容)
cockroach sql --insecure --host=localhost:26257 -e "
CREATE TABLE users (id UUID PRIMARY KEY, name STRING, region STRING);
INSERT INTO users VALUES (gen_random_uuid(), 'Alice', 'us-east');
"
# 地理分区表
CREATE TABLE orders (
id UUID PRIMARY KEY,
region STRING NOT NULL,
total DECIMAL
) PARTITION BY LIST (region) (
PARTITION us_east VALUES IN ('us-east'),
PARTITION eu_west VALUES IN ('eu-west')
);
常见问题
- ⚠跨区域写慢 — 用地理分区让数据近用户
- ⚠Postgres 扩展不支持 — CockroachDB 支持核心 Postgres,非所有扩展
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓多区域用地理分区 — 数据近用户,低延迟
- ✓用生存目标 — REGION 生存容忍区域故障
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求