管理和监控 AlloyDB Omni

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

管理用户角色

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

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

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

  • 所有其他预定义用户角色都没有权限。这些字段预留以供将来可能的使用。

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

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

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

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

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

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

监控 AlloyDB Omni

监控 AlloyDB Omni 安装意味着读取和分析其日志文件。

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

单服务器

默认情况下,如需检索 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 安装

Podman

  podman logs CONTAINER_NAME

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

如需配置 AlloyDB Omni 的日志记录行为,请参阅自定义 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.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 支持卷扩展时,您才能增加磁盘的大小。
  • 您不能减少磁盘的大小。