限制
存在以下限制:
AlloyDB Omni 在端口
5432上运行。不支持配置自定义端口。在创建集群之前,请确保所有数据库参数配置均正确无误。创建集群后,您将无法修改任何数据库参数。
准备工作
在创建集群之前,请完成以下操作:
将外部卷 (
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.getcompute.instances.listcompute.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:要分配给数据库容器的内存量。例如:32Gi、500Mi。PG_DATA_DIR:用于存储数据库数据的主机目录路径。(可选)
MAX_CONNECTIONS:与 PostgreSQL 数据库的并发连接数上限。默认值为50。支持的最小值也是50。如需了解详情,请参阅 PostgreSQLmax_connections参考文档。(可选)
MAX_WAL_SIZE:在自动检查点期间,允许预写式日志 (WAL) 增长到的大小上限。默认值为1GB。如需了解详情,请参阅 PostgreSQLmax_wal_size参考文档。(可选)
ENVIRONMENT_TYPE:确定集群设置的环境 -onprem或gcp。(可选)
VIRTUAL_IP:负载均衡器使用的虚拟 IP 地址。如果您定义了dbLoadBalancerOptions,则此属性为必需属性。如需了解详情,请参阅管理高可用性。(可选)
VIRTUAL_IP_INTERFACE:配置了VIRTUAL_IP的网络接口。 默认值为eth0。
创建您的集群
如需创建集群,请选择与您的环境相符的标签页,然后按照说明操作。
Ansible
如需创建集群,请完成以下说明:
为数据库集群规范创建 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 节点的私钥。
运行 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 删除集群,请完成以下操作:
创建名为
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使用
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 |
getattr、open、read、execute |
允许 systemd 服务管理器执行 PostgreSQL 二进制文件。 |
init_t |
postgresql_t |
process |
transition |
强制从 systemd 过渡到受限的 postgresql_t 网域。 |
postgresql_t |
postgresql_exec_t |
file |
entrypoint、execute、read、map |
严格将网域条目限制为官方 PostgreSQL 可执行文件。 |
postgresql_t |
lib_t |
file/dir |
read、open、getattr、map |
授权动态链接器访问共享数据库库。 |
postgresql_t |
postgresql_db_t |
dir |
open、read、write、create、rmdir、search、getattr、setattr、add_name、remove_name |
管理数据目录和表空间的完整存储目录生命周期。 |
postgresql_t |
postgresql_db_t |
file |
open、read、write、create、unlink、lock、append、getattr、setattr、map |
授权对堆表、WAL 段、目录和索引执行读/写操作。 |
postgresql_t |
postgresql_var_run_t |
dir/sock_file |
open、read、write、create、unlink、search、getattr |
管理 /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 |
execute、execute_no_trans、getattr、open、read、map |
授权 Node Manager 运行健康状况探测和控制工具,例如 pg_isready 或 pg_ctl。 |
alloydbomni_nm_t |
postgresql_db_t |
dir/file |
open、read、write、create、unlink、relabelto、relabelfrom |
授予节点管理器初始化目录和应用 SELinux 标签的权限。 |
AlloyDB Omni 监控器
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
postgresql_t |
unreserved_port_t |
tcp_socket |
name_bind |
授权绑定到高未预留端口以导出 Prometheus 指标和健康状况。 |
postgresql_t |
net_conf_t |
file |
open、read、getattr |
对 /etc/resolv.conf 拥有只读权限,用于 DNS 和主机名解析。 |
postgresql_t |
sysfs_t |
file/dir |
open、read、getattr、search |
在不授予 root 权限或管理员权限的情况下检查主机指标。 |
Keepalived
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
keepalived_t |
keepalived_script_exec_t |
file |
execute、execute_no_trans、getattr、open、read、map、setattr、ioctl |
将 VIP 跟踪脚本的执行限制在专用受限脚本上下文中。 |
keepalived_t |
hostname_exec_t |
file |
execute、execute_no_trans、getattr、open、read、map |
在故障切换期间调用标准系统 hostname 来验证节点身份。 |
keepalived_t |
ifconfig_exec_t |
file |
execute、execute_no_trans、getattr、open、read、map |
在物理网络接口上分配和释放虚拟 IP。 |
keepalived_t |
systemd_systemctl_exec_t |
file |
execute、execute_no_trans、getattr、open、read、map |
使用 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 |
open、read、write、search、getattr |
部署时,检查 /var/lib/haproxy 中的同位 HAProxy 统计信息套接字。 |
keepalived_t |
keepalived_var_run_t |
dir/file |
open、read、write、create、unlink、search、getattr |
在 /var/run/keepalived 中维护运行时状态和 PID 跟踪文件。 |
alloydbomni_nm_t |
keepalived_t |
process |
signal,signull |
使 Node Manager 能够使用 POSIX 信号管理守护程序生命周期。 |
HAProxy
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
haproxy_t |
postgresql_port_t |
tcp_socket |
name_bind,name_connect |
侦听端口 5432,并将数据库连接转发到后端数据库节点。 |
haproxy_t |
unreserved_port_t |
tcp_socket |
name_bind,name_connect |
在自定义负载平衡器端口上监听,并连接到上游读/写端点。 |
haproxy_t |
haproxy_conf_t |
file/dir |
open、read、search、getattr |
针对 /etc/haproxy/haproxy.cfg 的只读配置访问权限。 |
haproxy_t |
haproxy_var_lib_t |
dir / file / sock_file |
open、read、write、create、unlink、search、getattr |
管理 /var/lib/haproxy 中的运行时套接字和统计信息表。 |
haproxy_t |
haproxy_var_run_t |
dir/file |
open、read、write、create、unlink、search、getattr |
管理 /var/run/haproxy 中的 PID 和控制套接字。 |
alloydbomni_nm_t |
haproxy_unit_file_t |
service |
start、stop、status、reload、enable、disable |
授权 Node Manager 控制 HAProxy systemd 服务生命周期。 |
alloydbomni_nm_t |
haproxy_t |
process |
signal,signull |
授权 Node Manager 在配置更改时发送重新加载信号。 |
PgBouncer
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
init_t |
pgbouncer_exec_t |
file |
getattr、open、read、execute |
允许 systemd 调用 PgBouncer 可执行文件 (/usr/bin/pgbouncer)。 |
init_t |
pgbouncer_t |
process |
transition |
自动执行从 systemd 到隔离的 pgbouncer_t 的网域过渡。 |
pgbouncer_t |
pgbouncer_exec_t |
file |
entrypoint、execute、read、map |
将可执行入口点限制为 /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 |
create、bind、listen、accept、read、write、connectto |
通过 Unix 网域套接字提供本地客户端连接。 |
pgbouncer_t |
pgbouncer_conf_t |
file/dir |
open、read、getattr、search |
对 /etc/pgbouncer/pgbouncer.ini 和用户身份验证文件的只读配置访问权限。 |
pgbouncer_t |
pgbouncer_var_run_t/tmp_t |
dir/sock_file |
open、read、write、create、unlink、search、getattr |
在 /var/run/pgbouncer 和 /tmp 中创建和管理运行时套接字文件。 |
pgbouncer_t |
self |
netlink_route_socket |
create、bind、read、write、nlmsg_read、getattr |
发现用于解析数据库和客户端端点的网络路由。 |
pgbouncer_t |
self |
udp_socket |
create、connect、read、write、getattr、setopt、getopt |
执行 DNS 名称解析。 |
pgbouncer_t |
init_t/kernel_t |
unix_dgram_socket |
sendto |
向 systemd 发送 sd_notify 检测信号和就绪信号。 |
pgbouncer_t |
sysfs_t |
file/dir |
open、read、getattr、search |
读取 CPU 拓扑以优化工作器线程。 |
pgBackRest
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
postgresql_t/alloydbomni_nm_t |
pgbackrest_exec_t |
file |
execute、getattr、open、read、map |
允许 Postgres 和节点管理器分别执行 /usr/bin/pgbackrest 以进行 WAL 归档和备份。 |
postgresql_t/alloydbomni_nm_t |
pgbackrest_t |
process |
transition、signal、sigkill、signull |
受控进程转换到受限的 pgbackrest_t 网域。 |
pgbackrest_t |
pgbackrest_exec_t |
file |
entrypoint、execute、execute_no_trans、read、map、getattr、open |
限制 pgBackRest 二进制入口点。 |
pgbackrest_t |
postgresql_db_t |
dir / file / lnk_file |
open、read、write、create、unlink、lock、append、search、getattr、setattr、map |
在物理备份和时间点恢复 (PITR) 期间读取/写入数据库文件。 |
pgbackrest_t |
postgresql_t |
unix_stream_socket |
connectto |
使用本地套接字连接到正在运行的 PostgreSQL 引擎,以触发备份检查点。 |
pgbackrest_t |
postgresql_var_run_t |
dir / sock_file / file |
open、read、write、search、getattr |
访问 /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 |
open、read、search、getattr、map |
读取系统受信任证书存储区证书 (/etc/pki/tls),以验证与对象存储区 的 TLS 连接。 |
pgbackrest_t |
pgbackrest_conf_t |
file/dir |
open、read、getattr、search、map |
针对 /etc/pgbackrest/pgbackrest.conf 的只读配置访问权限。 |
pgbackrest_t |
pgbackrest_log_t |
file/dir |
open、read、write、create、unlink、append、lock、getattr、setattr |
管理 /var/log/pgbackrest 中的审核日志。 |
pgbackrest_t |
pgbackrest_tmp_t |
dir / file / sock_file |
open、read、write、create、unlink、append、lock、getattr、setattr、relabelto、relabelfrom |
/tmp/pgbackrest 中专用的隔离临时存储空间和线程间通信套接字。 |
pgbackrest_t |
shadow_t / sysfs_t / sssd_var_lib_t |
file/dir |
dontaudit(已抑制) |
静默丢弃并忽略无关的主机凭据探测,防止审核日志污染。 |
Node Manager
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
init_t |
alloydbomni_nm_exec_t |
file |
getattr、open、read、execute |
允许 systemd 启动节点管理器守护程序。 |
alloydbomni_nm_t |
self |
capability |
audit_write、chown、dac_override、dac_read_search、fowner、fsetid、setgid、setuid、net_admin |
主机生命周期管理和卷配置所需的严格限定的 Linux 功能。 |
alloydbomni_nm_t |
unreserved_port_t |
tcp_socket |
name_bind,name_connect |
向集群管理器提供 gRPC / HTTP API,并向 HAProxy 提供健康检查探测。 |
alloydbomni_nm_t |
http_port_t |
tcp_socket |
name_connect |
与云 API 或监控端点的出站通信。 |
alloydbomni_nm_t |
semanage_exec_t、setfiles_exec_t、setsebool_exec_t、load_policy_exec_t |
file |
execute、execute_no_trans、getattr、open、read、map |
执行核心 SELinux 管理二进制文件,以编译和强制执行 CIL 政策。 |
alloydbomni_nm_t |
security_t |
security |
load_policy |
将已编译的 SELinux 政策模块直接加载到 Linux 内核中。 |
alloydbomni_nm_t |
semanage_store_t,selinux_config_t |
dir/file |
open、read、write、create、unlink、lock、getattr |
维护 SELinux 持久性政策配置存储区。 |
alloydbomni_nm_t |
unlabeled_t(磁盘/装载) |
filesystem / dir / file |
getattr、open、read、write、create、unlink、setattr、relabelto、relabelfrom |
动态磁盘重新标记:发现新近挂接的原始磁盘(例如 /data1 或 /obs),并将其重新标记为 postgresql_db_t。 |
alloydbomni_nm_t |
rpm_exec_t |
file |
execute、execute_no_trans、getattr、open、read、ioctl、map |
执行 RPM/DNF 软件包管理器命令,以实现自动化软件安装和更新。 |
alloydbomni_nm_t |
rpm_var_cache_t、rpm_var_lib_t、rpm_log_t |
dir/file |
open、read、write、create、unlink、lock、getattr |
在软件包安装期间管理 RPM 数据库和缓存文件。 |
alloydbomni_nm_t |
systemd_unit_file_t、syslogd_unit_file_t、haproxy_unit_file_t、keepalived_unit_file_t |
service |
start、stop、status、reload、enable、disable |
协调所有受管理的数据库和辅助组件的 systemd 服务生命周期。 |
alloydbomni_nm_t |
system_dbusd_t、systemd_logind_t、systemd_hostnamed_t |
dbus/unix_stream_socket |
send_msg,connectto |
通过系统 DBus 协调主机状态、时间和系统日志记录。 |
Cluster Manager
| 来源网域 | 目标资源 / 类型 | 安全类 | 已授予的权限 | 安全原理和限制 |
|---|---|---|---|---|
init_t |
alloydbcontrol_exec_t |
file |
getattr、open、read、execute |
允许 systemd 启动集群管理器可执行文件。 |
alloydbcontrol_t |
alloydbcontrol_exec_t |
file |
entrypoint、execute、read、map、getattr、open |
将控制平面执行限制为授权二进制文件。 |
alloydbcontrol_t |
unreserved_port_t |
tcp_socket |
name_bind,name_connect |
绑定 API 端点并连接到分布式共识存储区 (DCS / etcd) 和节点管理器。 |
alloydbcontrol_t |
node_t |
tcp_socket |
node_bind |
将网络监听器绑定到网络接口。 |
alloydbcontrol_t |
alloydbcontrol_conf_t |
file/dir |
open、read、search、getattr |
针对 /etc/alloydbomni/cluster_manager 的只读配置访问权限。 |
alloydbcontrol_t |
net_conf_t、passwd_file_t、sssd_public_t、sssd_var_lib_t |
file/dir |
open、read、search、getattr |
管理界面的主机解析和用户身份验证。 |
alloydbcontrol_t |
cgroup_t、sysctl_net_t、sysfs_t |
file/dir |
open、read、search、getattr |
只读 Go 运行时性能优化和遥测。 |
alloydbcontrol_t |
init_t |
unix_stream_socket |
dontaudit (ioctl) |
抑制非严重的 systemd 文件描述符 ioctl 警告。 |