管理和监控 AlloyDB Omni

选择文档版本:

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

管理用户角色

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

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

  • 默认的 postgres 用户具有超级用户角色。

  • 所有其他预定义用户角色都没有权限。这些用户角色是为用于将来的可能用途而预留的。

设置 AlloyDB Omni 数据库

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

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

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

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

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

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

监控 AlloyDB Omni

监控 AlloyDB Omni 安装包括读取和分析 AlloyDB Omni 日志文件。

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

此外,在 Kubernetes 上运行的 AlloyDB Omni 会利用 kube-state-metrics (KSM) 从自定义资源公开指标。如需启用自定义资源指标,请参阅监控 AlloyDB Omni Kubernetes operator 自定义资源

单个服务器

默认情况下,如需检索 AlloyDB Omni 日志,请运行以下命令:

Docker

  docker logs CONTAINER_NAME

CONTAINER_NAME 替换为您的 AlloyDB Omni 容器的名称。

如需配置 AlloyDB Omni 的日志记录行为,请参阅自定义 AlloyDB Omni 安装

Podman

  podman logs CONTAINER_NAME

CONTAINER_NAME 替换为您的 AlloyDB Omni 容器的名称。

如需配置 AlloyDB Omni 的日志记录行为,请参阅自定义 AlloyDB Omni 安装

Kubernetes

查找数据库集群日志文件

postgresql.auditpostgresql.log 文件位于数据库 Pod 的文件系统中。仅当您启用了 pgaudit 时才会提供 postgresql.audit

如需访问这些文件,请按照以下步骤操作:

  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

使用 Grafana 查看指标

如需直观呈现 Kubernetes 上的 AlloyDB Omni 中的指标,请使用监控信息中心。监控信息中心依赖于由 Prometheus 和 Grafana 组成的基本可观测性堆栈。如需配置监控信息中心以从 AlloyDB Omni 收集指标,请按照以下步骤操作:

  1. 如需下载 Grafana 信息中心,请使用 wget 命令:

    wget https://raw.githubusercontent.com/GoogleCloudPlatform/alloydb-omni-samples/refs/heads/main/monitoring-dashboards/grafana/alloydbomni_dashboard.yaml
    
  2. 您必须先下载并安装 grafana-operator,然后才能在 Kubernetes 中部署 Grafana。如需详细说明,请参阅安装

  3. monitoring.dashboard/product=alloydb-omni 标签添加到您在其中安装信息中心的 Grafana 实例:

    kubectl label grafana/GRAFANA_INSTANCE_NAME monitoring.dashboard/product=alloydb-omni -n NAMESPACE
    

    替换以下内容:

    • GRAFANA_INSTANCE_NAME:您在其中放置信息中心的 Grafana 实例的名称。
    • NAMESPACE:您在其中部署 Grafana 操作器的命名空间。
  4. 如需将 Grafana 信息中心配置应用于 Kubernetes 上的 AlloyDB Omni 集群,请使用以下命令:

    kubectl apply -f alloydbomni_dashboard.yaml -n NAMESPACE
    

    如需了解如何使用 Grafana 操作器,请参阅 Grafana 操作器文档

  5. 如需将 Grafana 配置为使用 Prometheus 作为数据源,请参阅数据源

  6. 如需验证 Grafana 配置是否正确,请执行以下操作之一:

    • AlloyDB Omni 信息中心中查看 Grafana 面板集合。
    • 检索 Kubernetes 集群中 Grafana 信息中心的相关信息:

      kubectl get grafanadashboard alloydb-omni-dashboard -n NAMESPACE -o jsonpath='{.status.conditions[?(@.type=="DashboardSynchronized")].status}'
      

      如果该命令返回 True,则表示 alloydb-omni-dashboard 已成功部署到 Grafana 实例。

升级 AlloyDB Omni

如需从 AlloyDB Omni 15.5.2 或更低版本升级到 15.5.4 版,请按照从早期版本的 AlloyDB Omni 迁移到最新版本中的说明操作。

如需从 15.5.4 及更高版本升级,请执行以下操作:

  1. 使用新的映像版本重启 AlloyDB Omni。

  2. 请确保指定数据目录,使其与早期版本的 AlloyDB Omni 中使用的路径一致。

卸载 AlloyDB Omni

单个服务器

如需卸载 AlloyDB Omni,请使用以下命令停止并删除 AlloyDB Omni 容器:

Docker

 docker container stop CONTAINER_NAME
   docker container rm CONTAINER_NAME

CONTAINER_NAME 替换为您的 AlloyDB Omni 容器的名称。

Podman

 podman container stop CONTAINER_NAME
   podman container rm CONTAINER_NAME

CONTAINER_NAME 替换为您的 AlloyDB Omni 容器的名称。

Podman

 podman container stop CONTAINER_NAME
   podman container rm CONTAINER_NAME

CONTAINER_NAME 替换为您的 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 operator

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

  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 operator 删除您的所有数据库集群。使用以下命令可检查是否有任何数据库资源保留:

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

    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 operator:

    helm uninstall alloydbomni-operator --namespace alloydb-omni-system
  5. 清理与 AlloyDB Omni Kubernetes operator 相关的 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 operator 会立即将新规范应用于您的数据库 Pod。

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

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

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