创建集群

选择文档版本:

创建数据库集群,开始使用 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.3.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"
      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 参考文档

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

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

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

创建您的集群

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

Ansible

如需创建集群,请完成以下说明:

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

    - name: Create DBCluster
      hosts: localhost
      become: true
      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
      become: true
      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

附录:SELinux 政策规范

下表列出了为在相应节点上运行的每个组件配置的 SELinux 政策规则和访问权限。这些政策定义了在 SELinux 强制模式下运行主机时,进程隔离、网络套接字绑定和存储访问所需的强制性边界。

AlloyDB Omni

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
init_t (systemd) postgresql_exec_t file getattropenreadexecute 允许 systemd 服务管理器执行 PostgreSQL 二进制文件。
init_t postgresql_t process transition 强制从 systemd 过渡到受限的 postgresql_t 网域。
postgresql_t postgresql_exec_t file entrypointexecutereadmap 严格将网域条目限制为官方 PostgreSQL 可执行文件。
postgresql_t lib_t file/dir readopengetattrmap 授权动态链接器访问共享数据库库。
postgresql_t postgresql_db_t dir openreadwritecreatermdirsearchgetattrsetattradd_nameremove_name 管理数据目录和表空间的完整存储目录生命周期。
postgresql_t postgresql_db_t file openreadwritecreateunlinklockappendgetattrsetattrmap 授权对堆表、WAL 段、目录和索引执行读/写操作。
postgresql_t postgresql_var_run_t dir/sock_file openreadwritecreateunlinksearchgetattr 管理 /var/run/postgresql 中的运行时 PID 文件和 Unix 网域套接字。
postgresql_t postgresql_port_t tcp_socket name_bind 将 TCP 网络绑定严格限制为分配的 PostgreSQL 端口(默认 TCP 5432)。
alloydbomni_nm_t postgresql_exec_t file executeexecute_no_transgetattropenreadmap 授权 Node Manager 运行健康状况探测和控制工具,例如 pg_isreadypg_ctl
alloydbomni_nm_t postgresql_db_t dir/file openreadwritecreateunlinkrelabeltorelabelfrom 授予节点管理器初始化目录和应用 SELinux 标签的权限。

AlloyDB Omni 监控器

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
postgresql_t unreserved_port_t tcp_socket name_bind 授权绑定到高未预留端口以导出 Prometheus 指标和健康状况。
postgresql_t net_conf_t file openreadgetattr /etc/resolv.conf 拥有只读权限,用于 DNS 和主机名解析。
postgresql_t sysfs_t file/dir openreadgetattrsearch 在不授予 root 权限或管理员权限的情况下检查主机指标。

Keepalived

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
keepalived_t keepalived_script_exec_t file executeexecute_no_transgetattropenreadmapsetattrioctl 将 VIP 跟踪脚本的执行限制在专用受限脚本上下文中。
keepalived_t hostname_exec_t file executeexecute_no_transgetattropenreadmap 在故障切换期间调用标准系统 hostname 来验证节点身份。
keepalived_t ifconfig_exec_t file executeexecute_no_transgetattropenreadmap 在物理网络接口上分配和释放虚拟 IP。
keepalived_t systemd_systemctl_exec_t file executeexecute_no_transgetattropenreadmap 使用 systemctl 查询服务依赖状态,而不修改服务配置。
keepalived_t system_dbusd_t unix_stream_socket connectto 连接到系统 DBus 守护程序以进行进程间通知。
keepalived_t system_dbusd_t/init_t dbus send_msg init_t systemd 网域广播 DBus 状态转换事件。
keepalived_t haproxy_unit_file_t/systemd_unit_file_t service status 检查 HAProxy 和相关服务的运行状态。
keepalived_t haproxy_var_lib_t dir / file / sock_file openreadwritesearchgetattr 部署时,检查 /var/lib/haproxy 中的同位 HAProxy 统计信息套接字。
keepalived_t keepalived_var_run_t dir/file openreadwritecreateunlinksearchgetattr /var/run/keepalived 中维护运行时状态和 PID 跟踪文件。
alloydbomni_nm_t keepalived_t process signalsignull 使 Node Manager 能够使用 POSIX 信号管理守护程序生命周期。

HAProxy

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
haproxy_t postgresql_port_t tcp_socket name_bindname_connect 侦听端口 5432,并将数据库连接转发到后端数据库节点。
haproxy_t unreserved_port_t tcp_socket name_bindname_connect 在自定义负载平衡器端口上监听,并连接到上游读/写端点。
haproxy_t haproxy_conf_t file/dir openreadsearchgetattr 针对 /etc/haproxy/haproxy.cfg 的只读配置访问权限。
haproxy_t haproxy_var_lib_t dir / file / sock_file openreadwritecreateunlinksearchgetattr 管理 /var/lib/haproxy 中的运行时套接字和统计信息表。
haproxy_t haproxy_var_run_t dir/file openreadwritecreateunlinksearchgetattr 管理 /var/run/haproxy 中的 PID 和控制套接字。
alloydbomni_nm_t haproxy_unit_file_t service startstopstatusreloadenabledisable 授权 Node Manager 控制 HAProxy systemd 服务生命周期。
alloydbomni_nm_t haproxy_t process signalsignull 授权 Node Manager 在配置更改时发送重新加载信号。

PgBouncer

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
init_t pgbouncer_exec_t file getattropenreadexecute 允许 systemd 调用 PgBouncer 可执行文件 (/usr/bin/pgbouncer)。
init_t pgbouncer_t process transition 自动执行从 systemd 到隔离的 pgbouncer_t 的网域过渡。
pgbouncer_t pgbouncer_exec_t file entrypointexecutereadmap 将可执行入口点限制为 /usr/bin/pgbouncer
pgbouncer_t unreserved_port_t tcp_socket name_bind 监听传入的客户端数据库连接,例如 TCP 端口 6432。
pgbouncer_t node_t tcp_socket node_bind 将网络套接字绑定到节点网络接口。
pgbouncer_t postgresql_port_t/unreserved_port_t tcp_socket name_connect 与后端 AlloyDB Omni 数据库实例建立 TCP 连接。
pgbouncer_t self unix_stream_socket createbindlistenacceptreadwriteconnectto 通过 Unix 网域套接字提供本地客户端连接。
pgbouncer_t pgbouncer_conf_t file/dir openreadgetattrsearch /etc/pgbouncer/pgbouncer.ini 和用户身份验证文件的只读配置访问权限。
pgbouncer_t pgbouncer_var_run_t/tmp_t dir/sock_file openreadwritecreateunlinksearchgetattr /var/run/pgbouncer/tmp 中创建和管理运行时套接字文件。
pgbouncer_t self netlink_route_socket createbindreadwritenlmsg_readgetattr 发现用于解析数据库和客户端端点的网络路由。
pgbouncer_t self udp_socket createconnectreadwritegetattrsetoptgetopt 执行 DNS 名称解析。
pgbouncer_t init_t/kernel_t unix_dgram_socket sendto 向 systemd 发送 sd_notify 检测信号和就绪信号。
pgbouncer_t sysfs_t file/dir openreadgetattrsearch 读取 CPU 拓扑以优化工作器线程。

pgBackRest

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
postgresql_t/alloydbomni_nm_t pgbackrest_exec_t file executegetattropenreadmap 允许 Postgres 和节点管理器分别执行 /usr/bin/pgbackrest 以进行 WAL 归档和备份。
postgresql_t/alloydbomni_nm_t pgbackrest_t process transitionsignalsigkillsignull 受控进程转换到受限的 pgbackrest_t 网域。
pgbackrest_t pgbackrest_exec_t file entrypointexecuteexecute_no_transreadmapgetattropen 限制 pgBackRest 二进制入口点。
pgbackrest_t postgresql_db_t dir / file / lnk_file openreadwritecreateunlinklockappendsearchgetattrsetattrmap 在物理备份和时间点恢复 (PITR) 期间读取/写入数据库文件。
pgbackrest_t postgresql_t unix_stream_socket connectto 使用本地套接字连接到正在运行的 PostgreSQL 引擎,以触发备份检查点。
pgbackrest_t postgresql_var_run_t dir / sock_file / file openreadwritesearchgetattr 访问 /var/run/postgresql 中的 PostgreSQL 连接套接字。
pgbackrest_t http_port_t tcp_socket name_connect 严格的出站流量:出站 TCP 连接严格限制为仅限 HTTPS (443) 用于云对象存储 (GCS/S3)。禁止使用入站监听器。
pgbackrest_t cert_t dir / file / lnk_file openreadsearchgetattrmap 读取系统受信任证书存储区证书 (/etc/pki/tls),以验证与对象存储区 的 TLS 连接。
pgbackrest_t pgbackrest_conf_t file/dir openreadgetattrsearchmap 针对 /etc/pgbackrest/pgbackrest.conf 的只读配置访问权限。
pgbackrest_t pgbackrest_log_t file/dir openreadwritecreateunlinkappendlockgetattrsetattr 管理 /var/log/pgbackrest 中的审核日志。
pgbackrest_t pgbackrest_tmp_t dir / file / sock_file openreadwritecreateunlinkappendlockgetattrsetattrrelabeltorelabelfrom /tmp/pgbackrest 中专用的隔离临时存储空间和线程间通信套接字。
pgbackrest_t shadow_t / sysfs_t / sssd_var_lib_t file/dir dontaudit(已抑制) 静默丢弃并忽略无关的主机凭据探测,防止审核日志污染。

Node Manager

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
init_t alloydbomni_nm_exec_t file getattropenreadexecute 允许 systemd 启动节点管理器守护程序。
alloydbomni_nm_t self capability audit_writechowndac_overridedac_read_searchfownerfsetidsetgidsetuidnet_admin 主机生命周期管理和卷配置所需的严格限定的 Linux 功能。
alloydbomni_nm_t unreserved_port_t tcp_socket name_bindname_connect 向集群管理器提供 gRPC / HTTP API,并向 HAProxy 提供健康检查探测。
alloydbomni_nm_t http_port_t tcp_socket name_connect 与云 API 或监控端点的出站通信。
alloydbomni_nm_t semanage_exec_tsetfiles_exec_tsetsebool_exec_tload_policy_exec_t file executeexecute_no_transgetattropenreadmap 执行核心 SELinux 管理二进制文件,以编译和强制执行 CIL 政策。
alloydbomni_nm_t security_t security load_policy 将已编译的 SELinux 政策模块直接加载到 Linux 内核中。
alloydbomni_nm_t semanage_store_tselinux_config_t dir/file openreadwritecreateunlinklockgetattr 维护 SELinux 持久性政策配置存储区。
alloydbomni_nm_t unlabeled_t(磁盘/装载) filesystem / dir / file getattropenreadwritecreateunlinksetattrrelabeltorelabelfrom 动态磁盘重新标记:发现新近挂接的原始磁盘(例如 /data1/obs),并将其重新标记为 postgresql_db_t
alloydbomni_nm_t rpm_exec_t file executeexecute_no_transgetattropenreadioctlmap 执行 RPM/DNF 软件包管理器命令,以实现自动化软件安装和更新。
alloydbomni_nm_t rpm_var_cache_trpm_var_lib_trpm_log_t dir/file openreadwritecreateunlinklockgetattr 在软件包安装期间管理 RPM 数据库和缓存文件。
alloydbomni_nm_t systemd_unit_file_tsyslogd_unit_file_thaproxy_unit_file_tkeepalived_unit_file_t service startstopstatusreloadenabledisable 协调所有受管理的数据库和辅助组件的 systemd 服务生命周期。
alloydbomni_nm_t system_dbusd_tsystemd_logind_tsystemd_hostnamed_t dbus/unix_stream_socket send_msgconnectto 通过系统 DBus 协调主机状态、时间和系统日志记录。

Cluster Manager

来源网域 目标资源 / 类型 安全类 已授予的权限 安全原理和限制
init_t alloydbcontrol_exec_t file getattropenreadexecute 允许 systemd 启动集群管理器可执行文件。
alloydbcontrol_t alloydbcontrol_exec_t file entrypointexecutereadmapgetattropen 将控制平面执行限制为授权二进制文件。
alloydbcontrol_t unreserved_port_t tcp_socket name_bindname_connect 绑定 API 端点并连接到分布式共识存储区 (DCS / etcd) 和节点管理器。
alloydbcontrol_t node_t tcp_socket node_bind 将网络监听器绑定到网络接口。
alloydbcontrol_t alloydbcontrol_conf_t file/dir openreadsearchgetattr 针对 /etc/alloydbomni/cluster_manager 的只读配置访问权限。
alloydbcontrol_t net_conf_tpasswd_file_tsssd_public_tsssd_var_lib_t file/dir openreadsearchgetattr 管理界面的主机解析和用户身份验证。
alloydbcontrol_t cgroup_tsysctl_net_tsysfs_t file/dir openreadsearchgetattr 只读 Go 运行时性能优化和遥测。
alloydbcontrol_t init_t unix_stream_socket dontaudit (ioctl) 抑制非严重的 systemd 文件描述符 ioctl 警告。