创建集群

选择文档版本:

创建数据库集群,开始使用 AlloyDB Omni。

限制

存在以下限制:

  • AlloyDB Omni 在端口 5432 上运行。不支持配置自定义端口。

  • 请确保所有数据库参数配置均正确无误,然后再创建集群。创建集群后,您无法修改任何数据库参数。

准备工作

在创建集群之前,请完成以下操作:

  • 安装 AlloyDB Omni 编排器

  • 安装 AlloyDB Omni 组件

  • 配置 TLS 证书

  • 将外部卷 (DataDisk) 装载到 PG_DATA_DIR 到编排器内预配的所有数据库节点上。

  • 如果您计划使用 alloydbctl 而不是 Ansible,请确保所有虚拟机上都安装了所需的 policycoreutils-python-utils 软件包。如需安装此软件包,请运行以下命令:

    sudo dnf install policycoreutils-python-utils
  • 如果您使用的是 Google Cloud 环境,请将 ENVIRONMENT_TYPE 设置为 gcp。 然后,您必须以 root 用户身份运行 gcloud auth login 来对 gcloud CLI 账号进行身份验证。此外,经过身份验证的账号必须具有以下权限:

    • compute.instances.get
    • compute.instances.list
    • compute.instances.updateNetworkInterface

准备集群规范

如需创建集群,AlloyDB Omni 必须知道如何配置集群。如需创建必要的规范,请使用 DBCluster 格式创建 YAML 文件:

Secret:
  metadata:
    name: db-pw-DBCLUSTER_NAME
  spec:
    type: Opaque
    data:
      DBCLUSTER_NAME: BASE64_PASSWORD
---
DBCluster:
  metadata:
    name: DBCLUSTER_NAME
  spec:
    databaseVersion: 18.1.0
    mode: ""
    availability:
      numberOfStandbys: NUM_STANDBY_NODES
      enableAutoFailover: true
      enableAutoHeal: true
      autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
      autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
      healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
      replayReplicationSlotsOnStandbys: false
    primarySpec:
      adminUser:
        passwordRef:
          name: db-pw-DBCLUSTER_NAME
      resources:
        cpu: CPU_LIMIT
        memory: MEMORY_LIMIT
        disks:
        - name: DataDisk
          path: PG_DATA_DIR
      parameters:
        max_connections: "MAX_CONNECTIONS"
        max_wal_size: "MAX_WAL_SIZE"
        max_worker_processes: "MAX_WORKER_PROCESSES"
        log_connections: "LOG_CONNECTIONS"
        log_disconnections: "LOG_DISCONNECTS"
        log_hostname: "LOG_HOSTNAME"
        log_statement: "LOG_STATEMENT"
        huge_pages: "HUGE_PAGES"
        tcp_keepalives_idle: "TCP_KEEPALIVES_IDLE"
        tcp_keepalives_interval: "TCP_KEEPALIVES_INTERVAL"
        tcp_keepalives_count: "TCP_KEEPALIVES_COUNT"
      dbLoadBalancerOptions:
        DB_LOAD_BALANCER_TYPE:
          loadBalancerIP: "VIRTUAL_IP"
          loadBalancerType: "internal"
          loadBalancerInterface: "VIRTUAL_IP_INTERFACE"

执行以下变量替换操作:

  • DBCLUSTER_NAME:数据库集群的名称。例如,my-dbcluster

  • BASE64_PASSWORD:用于 postgres 管理员用户的 base64 编码密码。

  • NUM_STANDBY_NODES:集群中的备用节点数。例如,2

  • (可选)AUTOFAILOVER_TRIGGER_THRESHOLD:在发生故障切换之前健康检查可以失败的次数。默认值为 3。最小值为 0,但如果该值设置为 0,AlloyDB Omni 会使用默认值。

    如果健康检查失败 AUTOFAILOVER_TRIGGER_THRESHOLD 次,或者健康检查的累计时长达到 HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD 秒,则会发生自动故障切换。

  • (可选)AUTOHEAL_TRIGGER_THRESHOLD:在开始自动修复之前健康检查可以失败的次数。默认值为 3。最小值为 0,但如果该值设置为 0,AlloyDB Omni 会使用默认值。

    如果健康检查失败 AUTOHEAL_TRIGGER_THRESHOLD 次,或者健康检查的累计时长达到 HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD 秒,则会发生自动恢复。

  • (可选)HEALTHCHECK_PERIOD:每次健康检查之间等待的秒数。默认值为 30。最小值为 1。最大值为 86400(一天)。

  • CPU_LIMIT:要分配给数据库容器的 CPU 数量。例如,4

  • MEMORY_LIMIT:要分配给数据库容器的内存量。例如,32Gi500Mi

  • PG_DATA_DIR:存储数据库数据的主机目录的路径。

  • (可选)MAX_CONNECTIONS:与 PostgreSQL 数据库的并发连接数上限。默认值为 50。支持的最小值也是 50。如需了解 详情,请参阅 PostgreSQL max_connections参考文档

  • (可选)MAX_WAL_SIZE:在自动检查点期间,允许预写式日志 (WAL) 增长到的大小上限。默认值为 1GB。如需了解详情,请参阅 PostgreSQL max_wal_size参考文档

  • (可选)MAX_WORKER_PROCESSES: 单个 GatherGather Merge 可以启动的工作器数量上限。默认值为 64。如需了解详情,请参阅 PostgreSQL max_worker_processes参考文档

  • (可选)LOG_CONNECTIONS:确定是否记录与 PostgreSQL 服务器的连接。 默认值为 on。如需了解详情,请参阅 PostgreSQL log_connections参考文档

  • (可选)LOG_DISCONNECTS:确定是否记录 PostgreSQL 会话终止。默认值为 on。如需了解详情,请参阅 PostgreSQL log_disconnections参考文档

  • (可选)LOG_HOSTNAME:确定是否记录主机名(除了连接主机的 IP 之外)。默认值为 on。如需了解详情,请参阅 the PostgreSQL log_hostname 参考文档

  • (可选)LOG_STATEMENT:确定要记录哪些 SQL 语句。默认值为 none。如需了解 详情,请参阅 PostgreSQL log_statement参考文档

  • (可选)HUGE_PAGES:确定是否为主要共享内存区域请求巨型页面。默认值为 off。如需了解详情,请参阅 PostgreSQL huge_pages参考文档

  • (可选)TCP_KEEPALIVES_IDLE:在操作系统尝试向客户端发送 TCP keepalive 消息之前,没有网络活动的时间量(以秒为单位)。默认值为 10。 如需了解详情,请参阅 PostgreSQL tcp_keepalives_idle参考文档

  • (可选)TCP_KEEPALIVES_INTERVAL:在重新传输客户端未确认的 TCP keepalive 消息之前的时间量(以秒为单位)。默认值为 10。如需了解详情,请参阅 PostgreSQL tcp_keepalives_interval参考文档

  • (可选)TCP_KEEPALIVES_COUNT:在服务器与客户端的连接被视为不活跃之前可以丢失的 TCP keepalive 消息数量。默认值为 10。 如需了解详情,请参阅 PostgreSQL tcp_keepalives_count参考文档

  • (可选)ENVIRONMENT_TYPE:确定集群的设置环境,即 onpremgcp

  • (可选)VIRTUAL_IP:负载均衡器使用的虚拟 IP 地址。如果您定义了 dbLoadBalancerOptions,则这是必需的。如需了解详情,请参阅 管理高可用性

  • (可选)VIRTUAL_IP_INTERFACE: 配置 VIRTUAL_IP的网络接口。 默认值为 eth0

创建您的集群

如需创建集群,请选择与您的环境匹配的标签页,然后按照说明操作。

Ansible

如需创建集群,请按照以下说明操作:

  1. 为数据库集群规范创建 playbook。

    - name: Create DBCluster
      hosts: localhost
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.bootstrap
    
    

    执行以下变量替换操作:

    • ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。

    • ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于通过 SSH 连接到 AlloyDB Omni 节点的私钥。

  2. 运行 playbook。

    ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
          -e resource_spec="DBCLUSTER_SPECIFICATIONS"

    执行以下变量替换操作:

    • DBCLUSTER_PLAYBOOK:为数据库集群创建的 playbook 的路径。

    • DEPLOYMENT_SPEC: 在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

    • DBCLUSTER_SPECIFICATIONS:集群规范的路径。

alloydbctl

如需创建集群,请运行以下命令:

alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATIONS"

执行以下变量替换操作:

  • DEPLOYMENT_SPEC: 在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

  • DBCLUSTER_SPECIFICATIONS:集群规范的路径。

删除集群

如需删除集群,请选择与您的环境匹配的标签页,然后按照说明操作。

Ansible

如需使用 Ansible 删除集群,请完成以下操作:

  1. 创建一个名为 teardown.yaml 的 playbook:

    - name: Tear down AlloyDB Omni cluster
      hosts: localhost
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.delete
    
  2. 使用 ansible-playbook 执行 playbook。您必须将 DBCluster 指定为 resource_type,并将要删除的集群的名称指定为 resource_name

    ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
      -e `resource_type`=`DBCluster` -e `resource_name`="DBCLUSTER_NAME"

如果拆除过程因集群状态不一致(例如,节点无法访问)而失败,您可以尝试通过向命令添加 -e force=true 来强制删除集群。这会指示编排器忽略拆除过程中的错误,并尝试尽可能多地移除资源。

  ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
    -e resource_type=DBCluster -e resource_name="DBCLUSTER_NAME" -e force=true

alloydbctl

如需使用 alloydbctl 删除集群,请运行以下命令:

alloydbctl delete -d "DEPLOYMENT_SPEC" \
      --resource_type DBCluster --resource_name "DBCLUSTER_NAME"

执行以下变量替换操作:

  • DEPLOYMENT_SPEC: 在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

  • DBCLUSTER_NAME:数据库集群的名称。例如,my-dbcluster