管理和监控 AlloyDB Omni

选择文档版本:

本页面介绍了如何管理 AlloyDB Omni 用户角色、监控 AlloyDB Omni 服务器的活动以及更新或移除 AlloyDB Omni 安装。

管理用户角色

AlloyDB Omni 使用 AlloyDB 所包含的同一组预定义 PostgreSQL 用户角色,但存在以下差异:

  • AlloyDB Omni 没有 alloydbiamuser 角色。

  • AlloyDB Omni 包含一个名为 alloydbadmin 的超级用户角色。

与 AlloyDB 一样,在设置数据库时,最佳实践是遵循以下步骤:

  1. 使用 postgres 用户角色定义或导入数据库。在新安装中,此角色具有数据库创建和角色创建权限,并且不需要密码。

  2. 再次使用 postgres 用户角色,创建对应用的表具有正确访问权限级别的新用户角色。

  3. 将应用配置为使用这些访问权限受限的新角色连接到数据库。

您可以根据需要创建和定义任意数量的新用户角色。请勿修改或删除 AlloyDB Omni 随附的任何用户角色。

如需了解详情,请参阅管理 AlloyDB 用户角色

监控 AlloyDB Omni

监控 AlloyDB Omni 安装需要读取和分析其日志文件。

在 Kubernetes 上运行的 AlloyDB Omni 还提供了一组可用作 Prometheus 端点的基本指标。如需查看可用指标的列表,请参阅 AlloyDB Omni 指标

单个服务器

AlloyDB Omni 会在以下两个位置记录其活动:

  • AlloyDB Omni 会在 data/log/postgres 中记录数据库活动,该位置是相对于您在 dataplane.conf 配置文件中定义的目录的相对路径。

    您可以通过 /var/alloydb/config/postgresql.conf 中定义的各种 log_* 指令来自定义此日志文件的名称和格式。如需了解详情,请参阅 Error Reporting 和 Logging

  • AlloyDB Omni 会在 /var/alloydb/logs/alloydb.log 中记录其安装、启动和关停活动。

如需检查服务器的即时运行状态,请参阅检查 AlloyDB Omni 的状态

Kubernetes

查找数据库集群日志文件

您可以在数据库 Pod 的文件系统中找到 postgresql.auditpostgresql.log 文件。如需访问这些文件,请按照以下步骤操作:

  1. 定义一个包含数据库 Pod 名称的环境变量。

    export DB_POD=`kubectl get pod -l alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`

    DB_CLUSTER_NAME 替换为您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。

  2. 以 root 身份在数据库 Pod 上运行 shell。

    kubectl exec ${DB_POD} -it -- /bin/bash
  3. /obs/diagnostic/ 目录中查找日志文件:

    • /obs/diagnostic/postgresql.audit
    • /obs/diagnostic/postgresql.log

列出监控服务

v1.0

创建数据库集群时,AlloyDB Omni 会在同一命名空间中为数据库集群的每个实例 CR 创建以下监控服务:

al-INSTANCE_NAME-monitoring-system

如需列出监控服务,请运行以下命令。

kubectl get svc -n NAMESPACE | grep monitoring

NAMESPACE 替换为您的集群所属的命名空间。

以下示例响应显示了 al-1060-dbc-monitoring-systemal-3de6-dbc-monitoring-systemal-4bc0-dbc-monitoring-system 服务。每个服务都对应一个实例。

al-1060-dbc-monitoring-system   ClusterIP   10.0.15.227   <none>        9187/TCP   7d20h
al-3de6-dbc-monitoring-system   ClusterIP   10.0.5.205    <none>        9187/TCP   7d19h
al-4bc0-dbc-monitoring-system   ClusterIP   10.0.15.92    <none>        9187/TCP   7d19h

低于 1.0 的版本

创建数据库集群时,AlloyDB Omni 会在与数据库集群相同的命名空间中创建以下监控服务:

  • DB_CLUSTER-monitoring-db

  • DB_CLUSTER-monitoring-system

如需列出监控服务,请运行以下命令。

kubectl get svc -n NAMESPACE | grep monitoring

NAMESPACE 替换为您的集群所属的命名空间。

以下示例响应显示了 al-2953-dbcluster-foo7-monitoring-systemal-2953-dbcluster-foo7-monitoring-db 服务。

al-2953-dbcluster-foo7-monitoring-db           ClusterIP   10.36.3.243    <none>        9187/TCP   44m
al-2953-dbcluster-foo7-monitoring-system       ClusterIP   10.36.7.72     <none>        9187/TCP   44m

通过命令行查看 Prometheus 指标

对于所有监控服务,端口 9187 都会命名为 metricsalloydbomni

  1. 设置从本地环境到监控服务的端口转发。

    kubectl port-forward service/MONITORING_SERVICE -n NAMESPACE MONITORING_METRICS_PORT:metricsalloydbomni
    

    替换以下内容:

    • MONITORING_SERVICE:要转发的监控服务的名称,例如 al-1060-dbc-monitoring-system

    • NAMESPACE:集群所属的命名空间。

    • MONITORING_METRICS_PORT:本地可用的 TCP 端口。

    以下响应显示正在转发服务。

    Forwarding from 127.0.0.1:9187 -> 9187
    Forwarding from [::1]:9187 -> 9187
    
  2. 在运行上述命令期间,您可以在您指定的端口上通过 HTTP 访问监控指标。例如,您可以使用 curl 以纯文本形式查看所有指标:

    curl http://localhost:MONITORING_METRICS_PORT/metrics
    

使用 Prometheus API 查看指标

alloydbomni.internal.dbadmin.goog/task-type 标签键和 metricsalloydbomni 端口用作 AlloyDB Omni 中所有监控服务的默认值。您可以将它们与单个 ServiceMonitor 自定义资源结合使用,以便选择数据库集群中的所有命名空间的所有服务。

如需详细了解如何使用 Prometheus API,请参阅 Prometheus Operator 文档

以下是 ServiceMonitor 自定义资源的 spec 字段示例,其中包含 alloydbomni.internal.dbadmin.gdc.goog/task-type 标签键和 metricsalloydbomni 端口。ServiceMonitor 自定义资源会监控和收集所有命名空间中的所有 Kubernetes 服务

如需详细了解完整的 ServiceMonitor 定义,请参阅 ServiceMonitor 自定义资源定义

v1.0

    spec:
      selector:
        matchLabels:
          alloydbomni.internal.dbadmin.goog/task-type: monitoring
      namespaceSelector:
        any: true
      endpoints:
        - port: metricsalloydbomni

低于 1.0 的版本

    spec:
      selector:
        matchExpressions:
        - key: alloydbomni.internal.dbadmin.gdc.goog/task-type
          operator: Exists
          values: []
      namespaceSelector:
        any: true
      endpoints:
      - port: metricsalloydbomni

升级 AlloyDB Omni

单个服务器

相关说明仅适用于 AlloyDB Omni 15.2.0 版及更高版本。

准备工作

您的机器必须安装了 AlloyDB Omni CLI 1.2 版或更高版本。

执行升级

如需升级 AlloyDB Omni 安装,请运行以下命令:

sudo alloydb database-server upgrade

Kubernetes

在 Kubernetes 中升级 AlloyDB Omni 所需执行的步骤取决于您在运行的 AlloyDB Omni 版本以及您要升级到的版本。

确定当前版本号

如需检查您的数据库集群使用的 AlloyDB Omni 版本,请运行以下命令:

kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.currentDatabaseVersion}'

替换以下内容:

  • DB_CLUSTER_NAME:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。

  • NAMESPACE:数据库集群的 Kubernetes 命名空间。

如果您运行的是 AlloyDB Omni 操作器 1.0.0 版或更高版本,则此命令会输出您的数据库集群所使用的 AlloyDB Omni 版本。

如需检查在 Kubernetes 集群上安装的 AlloyDB Omni 操作器版本,请运行以下命令:

kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.currentControlPlaneAgentsVersion}'

如果您运行的是 AlloyDB Omni 操作器 1.0.0 版或更高版本,则此命令会输出在您的 Kubernetes 集群上运行的 AlloyDB Omni 操作器的版本号。

如果您运行的 AlloyDB Omni 操作器版本低于 1.0.0,则无法对数据库集群或 AlloyDB Omni 操作器执行就地升级。您必须改为按照从 AlloyDB Omni 操作器 1.0.0 版之前进行升级中的说明操作。

否则,请继续下一部分。

确定目标版本号

如果您运行的是 AlloyDB Omni 操作器 1.0.0 版或更高版本,则后续步骤取决于您要升级到的 AlloyDB Omni 版本。这进而需要了解 AlloyDB Omni 版本号。

AlloyDB Omni 版本号包含三个部分:

  • PostgreSQL 兼容性的主要版本号
  • PostgreSQL 兼容性的次要版本号
  • 此 AlloyDB Omni 发布版本的补丁版本号

例如,AlloyDB Omni 15.5.2 版是支持 PostgreSQL 15.5 版的 AlloyDB Omni 的第 2 个补丁版本。

如果您希望升级到支持较新版本 PostgreSQL 的 AlloyDB Omni 版本,则必须将 AlloyDB Omni 操作器本身与您的数据库集群一起升级。每组支持特定 PostgreSQL 次要版本的 AlloyDB Omni 发布版本都有自己关联的 AlloyDB Omni 操作器版本号,您可以在相应 AlloyDB Omni 版本的版本说明中找到该版本号。

如果您只想升级到较新的 AlloyDB Omni 补丁版本,则可以只升级数据库集群,而无需升级 AlloyDB Omni 操作器本身。您可以直接跳到升级数据库集群部分的相关说明。

否则,请继续下一部分。

升级 AlloyDB Omni 操作器

如需升级 AlloyDB Omni 操作器,请执行以下操作:

  1. 定义必要的环境变量:

    export GCS_BUCKET=alloydb-omni-operator
    export OPERATOR_VERSION=OPERATOR_VERSION
    export HELM_PATH=$OPERATOR_VERSION/alloydbomni-operator-$OPERATOR_VERSION.tgz

    OPERATOR_VERSION 替换为您要升级到的 AlloyDB Omni 操作器版本,例如 1.1.0

  2. 下载较新的 AlloyDB Omni 操作器:

    gcloud storage cp gs://$GCS_BUCKET/$HELM_PATH ./ --recursive
    tar -xvzf alloydbomni-operator-${OPERATOR_VERSION}.tgz
  3. 应用较新的 AlloyDB Omni 操作器自定义资源定义:

    kubectl apply -f alloydbomni-operator/crds
  4. 升级 AlloyDB Omni 操作器 Helm 图表:

    helm upgrade alloydbomni-operator alloydbomni-operator-${OPERATOR_VERSION}.tgz \
    --namespace alloydb-omni-system \
    --atomic \
    --timeout 5m

如需在升级 Kubernetes 清单和数据库集群后继续升级 AlloyDB Omni 操作器,请在完成上述步骤后立即按照下一部分中的说明操作。

升级数据库集群

如需升级数据库集群,请更新定义该集群的清单的 spec 部分中的以下字段:

  • databaseVersion 设置为您要将此数据库集群升级到的 AlloyDB Omni 的完整版本号。

  • 如果您还升级了 AlloyDB Omni 操作器,请将 controlPlaneAgentsVersion 设置为您升级到的 AlloyDB Omni 操作器的完整版本号。

如果您只是升级 AlloyDB Omni 的补丁版本(例如,将 databaseVersion15.5.1 更新到 15.5.2),则只需完成此步骤。

如果您要升级 PostgreSQL 兼容性的次要版本(例如,将 databaseVersion15.4.1 更新为 15.5.2),则还必须更新 controlPlaneAgentsVersion。在这种情况下,请确保您已按照升级 AlloyDB Omni 操作器中列出的额外步骤操作。

例如,以下清单摘录定义了一个运行 AlloyDB Omni 操作器版本 15.5.2 的数据库集群,其中 AlloyDB Omni 操作器版本为 1.0.0

apiVersion: alloydbomni.dbadmin.goog/v1 
kind: DBCluster
metadata:
  name: dbcluster-sample
spec:
  databaseVersion: 15.5.2
  controlPlaneAgentsVersion: 1.0.0

在此示例中,如需升级数据库集群以运行 AlloyDB Omni 版本 15.5.3,请将 databaseVersion: 15.5.2 更改为 databaseVersion: 15.5.3

从 AlloyDB Omni 操作器 1.0.0 版之前进行升级

如果您运行的 AlloyDB Omni 操作器版本低于 1.0.0,则若要升级基于 Kubernetes 的 AlloyDB Omni 安装,您需要先备份数据,然后卸载并重新安装 AlloyDB Omni 操作器。请按照以下步骤操作:

  1. 列出所有数据库集群:

    kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespaces
  2. 对于每个数据库集群,请使用 pg_dumpall 命令导出其所有数据。

  3. 卸载 AlloyDB Omni 操作器。这包括删除您的所有数据库集群。

  4. 重新安装 AlloyDB Omni 操作器。您可以使用之前用于安装 AlloyDB Omni 操作器旧版本的相同命令,而无需指定新的版本号。

  5. 重新创建数据库集群。您可以沿用之前创建数据库集群时使用的相同清单文件。不过,您可能需要更新文件,以反映 AlloyDB Omni 操作器 1.0.0 版引入的 API 更改,例如 databaseVersion 属性取代了旧的 version 属性。

  6. 使用 pg_restorepsql 中的 \i 命令将之前导出的数据导入到重新创建的集群中。

回滚升级

相关说明仅适用于 AlloyDB Omni 15.2.1 至 15.5.2 版。不适用于基于 Kubernetes 的 AlloyDB Omni 部署。

如需将 AlloyDB Omni 回滚到之前安装的版本,请运行以下命令:

sudo alloydb database-server rollback

卸载 AlloyDB Omni

单个服务器

如需卸载 AlloyDB Omni,请运行以下命令:

sudo alloydb database-server uninstall

卸载 AlloyDB Omni 后,数据目录仍保留在文件系统中。您可以移动、归档或删除此目录,具体取决于您是否要在卸载 AlloyDB Omni 后保留数据以及如何保留数据。

Kubernetes

删除数据库集群

如需删除数据库集群,请在其清单中将 isDeleted 设置为 true。您可以使用以下命令完成此操作:

kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"isDeleted":true}}' --type=merge

DB_CLUSTER_NAME 替换为您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。

卸载 AlloyDB Omni 操作器

如需从 Kubernetes 集群中卸载 AlloyDB Omni Kubernetes 操作器,请执行以下步骤:

  1. 删除所有数据库集群:

    for ns in $(kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespaces -o=jsonpath='{range .items[*]}{.metadata.namespace}{"\n"}{end}'); do
    for cr in $(kubectl get dbclusters.alloydbomni.dbadmin.goog -n $ns -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'); do
    kubectl patch dbclusters.alloydbomni.dbadmin.goog $cr -n $ns --type=merge -p '{"spec":{"isDeleted":true}}'
    done
    done
  2. 等待 AlloyDB Omni Kubernetes 操作器删除您的所有数据库集群。使用以下命令可检查是否有任何数据库资源保留:

    kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespaces
  3. 删除 AlloyDB Omni Kubernetes 操作器创建的其他资源:

    kubectl delete failovers.alloydbomni.dbadmin.goog --all --all-namespaces
    kubectl delete restores.alloydbomni.dbadmin.goog --all --all-namespaces
    kubectl delete switchovers.alloydbomni.dbadmin.goog --all --all-namespaces
  4. 卸载 AlloyDB Omni Kubernetes 操作器:

    helm uninstall alloydbomni-operator --namespace alloydb-omni-system
  5. 清理与 AlloyDB Omni Kubernetes 操作器相关的 Secret、自定义资源说明和命名空间:

    kubectl delete certificate -n alloydb-omni-system --all
    kubectl get secrets --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,ANNOTATION:.metadata.annotations.cert-manager\.io/issuer-name | grep -E 'alloydbomni|dbs-al' | awk '{print $1 " " $2}' | xargs -n 2 kubectl delete secret -n
    kubectl delete crd -l alloydb-omni=true
    kubectl delete ns alloydb-omni-system

调整基于 Kubernetes 的数据库集群的大小

如需调整基于 Kubernetes 的数据库集群的 CPU、内存或存储空间大小,请更新定义其 Pod 的清单的 resources 字段。AlloyDB Omni 操作器会立即将新规范应用于您的数据库 Pod。

如需详细了解 AlloyDB Omni 操作器清单语法,请参阅创建数据库集群

修改正在运行的数据库集群的资源时,需要遵守以下限制:

  • 仅当指定的 storageClass 支持卷扩展时,您才能增加磁盘的大小。
  • 您无法减少磁盘的大小。