Skip to content

GaussDB 容器化部署

Docker 部署 GaussDB

环境准备

  • 安装 Docker:版本 18.09 或以上
  • 配置 Docker 镜像加速
  • 准备数据存储目录

部署步骤

  1. 拉取 GaussDB 镜像

    bash
    docker pull huaweicloud/gaussdb:latest
  2. 创建数据存储目录

    bash
    mkdir -p /data/gaussdb/data
    mkdir -p /data/gaussdb/log
    chmod 755 /data/gaussdb
  3. 运行 GaussDB 容器

    bash
    docker run -d \
      --name gaussdb \
      --privileged=true \
      -p 5432:5432 \
      -e GAUSSDB_PASSWORD=Gauss@123 \
      -v /data/gaussdb/data:/var/lib/gaussdb/data \
      -v /data/gaussdb/log:/var/lib/gaussdb/log \
      huaweicloud/gaussdb:latest
  4. 验证部署

    bash
    # 查看容器状态
    docker ps
    
    # 进入容器
    docker exec -it gaussdb bash
    
    # 连接数据库
    gsql -d postgres -U gaussdb -p 5432 -W Gauss@123

Docker 部署最佳实践

  • 使用固定端口映射:避免端口冲突
  • 挂载数据卷:确保数据持久化
  • 设置合理的资源限制:避免容器占用过多资源
  • 配置日志收集:便于监控和故障排查
  • 定期备份数据:确保数据安全

Kubernetes 部署 GaussDB

环境准备

  • Kubernetes 集群:版本 1.16 或以上
  • Helm:版本 3.0 或以上
  • 存储类:配置持久化存储

使用 Helm 部署

  1. 添加 Helm 仓库

    bash
    helm repo add huaweicloud https://helm-charts.huaweicloud.com
    helm repo update
  2. 创建命名空间

    bash
    kubectl create namespace gaussdb
  3. 配置部署参数

    yaml
    # gaussdb-values.yaml
    replicaCount: 3
    
    image:
      repository: huaweicloud/gaussdb
      tag: latest
      pullPolicy: IfNotPresent
    
    service:
      type: ClusterIP
      port: 5432
    
    persistence:
      enabled: true
      storageClass: "csi-disk"
      size: 100Gi
    
    resources:
      requests:
        cpu: "2"
        memory: "8Gi"
      limits:
        cpu: "4"
        memory: "16Gi"
    
    env:
      GAUSSDB_PASSWORD: Gauss@123
  4. 部署 GaussDB 集群

    bash
    helm install gaussdb huaweicloud/gaussdb \
      -f gaussdb-values.yaml \
      -n gaussdb
  5. 验证部署

    bash
    # 查看 Pod 状态
    kubectl get pods -n gaussdb
    
    # 查看服务状态
    kubectl get svc -n gaussdb
    
    # 连接数据库
    kubectl exec -it gaussdb-0 -n gaussdb -- gsql -d postgres -U gaussdb -p 5432 -W Gauss@123

自定义部署

  1. 创建配置文件

    yaml
    # gaussdb-configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gaussdb-config
      namespace: gaussdb
    data:
      postgresql.conf: |
        listen_addresses = '*'
        max_connections = 1000
        shared_buffers = 2GB
  2. 创建持久卷声明

    yaml
    # gaussdb-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: gaussdb-pvc
      namespace: gaussdb
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-disk
      resources:
        requests:
          storage: 100Gi
  3. 创建 Deployment

    yaml
    # gaussdb-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gaussdb
      namespace: gaussdb
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gaussdb
      template:
        metadata:
          labels:
            app: gaussdb
        spec:
          containers:
          - name: gaussdb
            image: huaweicloud/gaussdb:latest
            ports:
            - containerPort: 5432
            env:
            - name: GAUSSDB_PASSWORD
              value: Gauss@123
            volumeMounts:
            - name: gaussdb-data
              mountPath: /var/lib/gaussdb/data
            - name: gaussdb-config
              mountPath: /var/lib/gaussdb/config
          volumes:
          - name: gaussdb-data
            persistentVolumeClaim:
              claimName: gaussdb-pvc
          - name: gaussdb-config
            configMap:
              name: gaussdb-config
  4. 创建 Service

    yaml
    # gaussdb-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: gaussdb
      namespace: gaussdb
    spec:
      selector:
        app: gaussdb
      ports:
      - port: 5432
        targetPort: 5432
      type: ClusterIP
  5. 应用部署配置

    bash
    kubectl apply -f gaussdb-configmap.yaml
    kubectl apply -f gaussdb-pvc.yaml
    kubectl apply -f gaussdb-deployment.yaml
    kubectl apply -f gaussdb-service.yaml

容器化部署最佳实践

1. 存储配置

  • 使用持久化存储,确保数据不丢失
  • 选择高性能存储,满足数据库 I/O 需求
  • 配置存储快照,便于数据备份和恢复

2. 资源管理

  • 为容器设置合理的资源限制和请求
  • 监控容器资源使用情况,及时调整配置
  • 考虑使用节点亲和性,将容器调度到合适的节点

3. 高可用配置

  • 部署多个容器实例,实现负载均衡
  • 配置健康检查,自动重启故障容器
  • 考虑使用 StatefulSet 部署有状态应用

4. 安全配置

  • 使用私有镜像仓库,确保镜像安全
  • 配置容器网络策略,限制容器间通信
  • 定期更新容器镜像,修复安全漏洞
  • 配置数据库访问控制,限制访问权限

5. 监控和日志

  • 集成 Prometheus 和 Grafana,监控容器和数据库性能
  • 配置日志收集,便于故障排查和分析
  • 设置告警规则,及时发现和处理问题

常见问题(FAQ)

Q1: Docker 部署 GaussDB 时如何配置参数?

A1: 可以通过以下方式配置参数:

  1. 在启动容器时使用 -e 参数设置环境变量
  2. 挂载配置文件到容器内的配置目录
  3. 进入容器后直接修改配置文件

Q2: Kubernetes 部署 GaussDB 时如何实现高可用?

A2: 实现高可用的方法包括:

  1. 使用 StatefulSet 部署有状态应用
  2. 配置多个副本,实现负载均衡
  3. 配置健康检查和自动重启
  4. 使用持久化存储确保数据安全
  5. 配置主从复制,实现数据冗余

Q3: 如何备份和恢复容器化部署的 GaussDB 数据?

A3: 备份和恢复方法包括:

  1. 使用 Docker 卷备份:直接备份挂载的数据卷
  2. 使用 Kubernetes 快照:配置存储类支持快照,创建数据快照
  3. 使用数据库备份工具:进入容器执行数据库备份命令
  4. 恢复时将备份数据挂载到新的容器实例

Q4: 容器化部署 GaussDB 时如何优化性能?

A4: 性能优化方法包括:

  1. 为容器分配足够的资源(CPU、内存)
  2. 使用高性能存储设备
  3. 优化数据库配置参数
  4. 配置合理的容器网络
  5. 监控性能指标,及时调整配置

Q5: 如何升级容器化部署的 GaussDB 版本?

A5: 升级方法包括:

  1. 拉取新版本镜像
  2. 停止并删除旧容器
  3. 使用新版本镜像启动新容器,挂载原有数据卷
  4. 执行数据库升级操作
  5. 验证升级后的数据库状态

对于 Kubernetes 部署,可以使用 Helm 升级或滚动更新 Deployment