创建集群

选择文档版本:

创建数据库集群,开始使用 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。如需了解详情,请参阅 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_become: true
        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. 运行策略方案。

    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 的剧本:

    - name: Tear down AlloyDB Omni cluster
      hosts: localhost
      vars:
        ansible_become: true
        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