安装与部署 #

一、部署方式概览 #

1.1 部署选项 #

text
CockroachDB 部署方式
├── 本地单节点
│   └── 开发测试
│
├── 本地多节点
│   └── 测试集群
│
├── 生产集群
│   └── 自托管生产环境
│
├── Docker
│   └── 容器化部署
│
├── Kubernetes
│   └── 云原生部署
│
└── CockroachDB Cloud
    └── 托管服务

1.2 版本选择 #

版本 说明
Core 开源核心版本
Enterprise 企业版本 (高级特性)
CockroachDB Cloud 云服务版本

二、本地单节点部署 #

2.1 下载安装 #

Linux/macOS

bash
# 下载最新版本
curl https://binaries.cockroachdb.com/cockroach-v23.1.0.darwin-10.9-amd64.tgz | tar -xJ

# 添加到 PATH
export PATH=$PATH:$(pwd)/cockroach-v23.1.0.darwin-10.9-amd64

# 验证安装
cockroach version

Windows

powershell
# 下载并解压
# https://binaries.cockroachdb.com/cockroach-v23.1.0.windows-6.2-amd64.zip

# 添加到 PATH
$env:PATH += ";C:\path\to\cockroach-v23.1.0.windows-6.2-amd64"

# 验证安装
.\cockroach.exe version

2.2 启动单节点 #

bash
# 启动单节点集群
cockroach start-single-node --insecure --listen-addr=localhost

# 参数说明:
# --insecure: 不使用SSL (仅开发测试)
# --listen-addr: 监听地址

2.3 连接数据库 #

bash
# 使用内置SQL客户端
cockroach sql --insecure

# 或使用 PostgreSQL 客户端
psql -h localhost -p 26257 -U root -d defaultdb

2.4 Web管理界面 #

text
访问 Web UI:
http://localhost:8080

功能:
├── 集群概览
├── 数据库管理
├── SQL执行
├── 监控指标
└── 任务管理

三、本地多节点部署 #

3.1 启动多节点集群 #

bash
# 创建数据目录
mkdir -p cockroach-data/node{1,2,3}

# 启动节点1
cockroach start --insecure \
    --store=cockroach-data/node1 \
    --listen-addr=localhost:26257 \
    --http-addr=localhost:8080 \
    --join=localhost:26257,localhost:26258,localhost:26259

# 启动节点2 (新终端)
cockroach start --insecure \
    --store=cockroach-data/node2 \
    --listen-addr=localhost:26258 \
    --http-addr=localhost:8081 \
    --join=localhost:26257,localhost:26258,localhost:26259

# 启动节点3 (新终端)
cockroach start --insecure \
    --store=cockroach-data/node3 \
    --listen-addr=localhost:26259 \
    --http-addr=localhost:8082 \
    --join=localhost:26257,localhost:26258,localhost:26259

3.2 初始化集群 #

bash
# 初始化集群 (只需执行一次)
cockroach init --insecure --host=localhost:26257

# 检查集群状态
cockroach node status --insecure --host=localhost:26257

3.3 集群架构 #

text
┌─────────────────────────────────────────────────────────────┐
│                    本地多节点集群                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐                 │
│   │  Node 1  │  │  Node 2  │  │  Node 3  │                 │
│   │ :26257   │  │ :26258   │  │ :26259   │                 │
│   │ :8080    │  │ :8081    │  │ :8082    │                 │
│   └──────────┘  └──────────┘  └──────────┘                 │
│        │              │              │                      │
│        └──────────────┼──────────────┘                      │
│                       │                                     │
│              Gossip 协议通信                                 │
│              Raft 共识协议                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

四、Docker部署 #

4.1 单节点Docker #

bash
# 拉取镜像
docker pull cockroachdb/cockroach:v23.1.0

# 启动单节点
docker run -d \
    --name cockroach-single \
    -p 26257:26257 \
    -p 8080:8080 \
    cockroachdb/cockroach:v23.1.0 start-single-node --insecure

# 连接数据库
docker exec -it cockroach-single cockroach sql --insecure

4.2 多节点Docker Compose #

yaml
# docker-compose.yml
version: '3.8'

services:
  cockroach1:
    image: cockroachdb/cockroach:v23.1.0
    container_name: cockroach1
    hostname: cockroach1
    command: start --insecure --join=cockroach1,cockroach2,cockroach3
    ports:
      - "26257:26257"
      - "8080:8080"
    volumes:
      - cockroach1-data:/cockroach/cockroach-data

  cockroach2:
    image: cockroachdb/cockroach:v23.1.0
    container_name: cockroach2
    hostname: cockroach2
    command: start --insecure --join=cockroach1,cockroach2,cockroach3
    ports:
      - "26258:26257"
      - "8081:8080"
    volumes:
      - cockroach2-data:/cockroach/cockroach-data

  cockroach3:
    image: cockroachdb/cockroach:v23.1.0
    container_name: cockroach3
    hostname: cockroach3
    command: start --insecure --join=cockroach1,cockroach2,cockroach3
    ports:
      - "26259:26257"
      - "8082:8080"
    volumes:
      - cockroach3-data:/cockroach/cockroach-data

volumes:
  cockroach1-data:
  cockroach2-data:
  cockroach3-data:
bash
# 启动集群
docker-compose up -d

# 初始化集群
docker exec -it cockroach1 cockroach init --insecure

# 查看状态
docker exec -it cockroach1 cockroach node status --insecure

五、Kubernetes部署 #

5.1 使用Operator部署 #

yaml
# cockroach-operator.yaml
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
  name: cockroach
spec:
  dataStore:
    pvc:
      source:
        persistentVolumeClaimSpec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: "10Gi"
          storageClassName: standard
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "2"
      memory: "4Gi"
  tlsEnabled: true
  nodes: 3
  image:
    name: cockroachdb/cockroach:v23.1.0
bash
# 安装 Operator
kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/master/install/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/master/install/operator.yaml

# 部署集群
kubectl apply -f cockroach-operator.yaml

# 查看状态
kubectl get crdbcluster
kubectl get pods

5.2 使用StatefulSet部署 #

yaml
# cockroach-statefulset.yaml
apiVersion: v1
kind: Service
metadata:
  name: cockroach
  labels:
    app: cockroach
spec:
  ports:
    - port: 26257
      name: sql
    - port: 8080
      name: http
  clusterIP: None
  selector:
    app: cockroach
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cockroach
spec:
  serviceName: cockroach
  replicas: 3
  selector:
    matchLabels:
      app: cockroach
  template:
    metadata:
      labels:
        app: cockroach
    spec:
      containers:
        - name: cockroach
          image: cockroachdb/cockroach:v23.1.0
          ports:
            - containerPort: 26257
              name: sql
            - containerPort: 8080
              name: http
          command:
            - /bin/bash
            - -ecx
            - exec /cockroach/cockroach start --insecure --join=cockroach-0.cockroach,cockroach-1.cockroach,cockroach-2.cockroach
          volumeMounts:
            - name: data
              mountPath: /cockroach/cockroach-data
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 10Gi
bash
# 部署
kubectl apply -f cockroach-statefulset.yaml

# 初始化集群
kubectl exec -it cockroach-0 -- cockroach init --insecure

# 连接数据库
kubectl exec -it cockroach-0 -- cockroach sql --insecure

六、生产环境部署 #

6.1 安全配置 #

bash
# 创建证书目录
mkdir -p certs

# 创建CA证书
cockroach cert create-ca \
    --certs-dir=certs \
    --ca-key=certs/ca.key

# 创建节点证书
cockroach cert create-node \
    node1.example.com node2.example.com node3.example.com \
    localhost \
    --certs-dir=certs \
    --ca-key=certs/ca.key

# 创建客户端证书
cockroach cert create-client root \
    --certs-dir=certs \
    --ca-key=certs/ca.key

# 启动安全集群
cockroach start \
    --certs-dir=certs \
    --listen-addr=node1.example.com:26257 \
    --http-addr=node1.example.com:8080 \
    --join=node1.example.com,node2.example.com,node3.example.com

6.2 配置文件 #

yaml
# cockroach.yaml
cluster:
  name: production-cluster

server:
  listen_addr: 0.0.0.0:26257
  http_addr: 0.0.0.0:8080
  join:
    - node1.example.com:26257
    - node2.example.com:26257
    - node3.example.com:26257

security:
  cert_dir: /etc/cockroach/certs

storage:
  store:
    - path: /data/cockroach

log:
  dir: /var/log/cockroach
  level: info

6.3 系统要求 #

text
┌─────────────────────────────────────────────────────────────┐
│                    生产环境要求                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   硬件要求:                                                 │
│   ├── CPU: 4核以上                                         │
│   ├── 内存: 16GB以上                                       │
│   ├── 存储: SSD (推荐 NVMe)                                │
│   └── 网络: 低延迟网络                                     │
│                                                             │
│   软件要求:                                                 │
│   ├── 操作系统: Linux (推荐)                               │
│   ├── 文件系统: ext4 或 xfs                                │
│   └── 时间同步: NTP                                        │
│                                                             │
│   集群规模:                                                 │
│   ├── 最小: 3节点                                          │
│   ├── 推荐: 5节点或更多                                    │
│   └── 奇数节点 (Raft选举)                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

七、常用命令 #

7.1 集群管理 #

bash
# 启动集群
cockroach start [flags]

# 停止节点
cockroach quit --insecure --host=localhost:26257

# 查看节点状态
cockroach node status --insecure

# 查看集群设置
cockroach sql --insecure -e "SHOW ALL CLUSTER SETTINGS"

# 初始化集群
cockroach init --insecure --host=localhost:26257

7.2 数据库操作 #

bash
# 执行SQL
cockroach sql --insecure -e "CREATE DATABASE test;"

# 执行SQL文件
cockroach sql --insecure < schema.sql

# 导出数据
cockroach dump test --insecure > backup.sql

# 用户管理
cockroach sql --insecure -e "CREATE USER test WITH PASSWORD 'password';"

7.3 备份恢复 #

bash
# 备份数据库
cockroach sql --insecure -e "
BACKUP DATABASE test 
INTO 'nodelocal://1/backup/test'
AS OF SYSTEM TIME '-10s';
"

# 恢复数据库
cockroach sql --insecure -e "
RESTORE DATABASE test 
FROM 'nodelocal://1/backup/test';
"

八、验证部署 #

8.1 健康检查 #

sql
-- 连接数据库
cockroach sql --insecure

-- 检查节点状态
SELECT * FROM crdb_internal.cluster_nodes;

-- 检查数据库列表
SHOW DATABASES;

-- 创建测试表
CREATE TABLE test (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100)
);

-- 插入测试数据
INSERT INTO test (name) VALUES ('test1'), ('test2');

-- 查询数据
SELECT * FROM test;

8.2 性能测试 #

bash
# 运行TPC-C基准测试
cockroach workload init tpcc 'postgresql://root@localhost:26257?sslmode=disable'
cockroach workload run tpcc --duration=5m 'postgresql://root@localhost:26257?sslmode=disable'

九、总结 #

部署要点:

方式 场景 复杂度
单节点 开发测试
多节点 测试集群
Docker 容器化环境
Kubernetes 云原生生产
CockroachDB Cloud 托管服务

下一步,让我们深入了解CockroachDB的架构设计!

最后更新:2026-03-27