管理和监控 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_* 指令来自定义此日志文件的名称和格式。如需了解详情,请参阅错误报告和日志记录

  • 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 Operator 1.0.0 或更高版本,则此命令会输出数据库集群使用的 AlloyDB Omni 版本。

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

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

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

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

否则,请继续下一部分。

确定目标版本号

如果您运行的是 AlloyDB Omni Operator 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 Operator 本身和数据库集群。每组支持特定 PostgreSQL 次要版本的 AlloyDB Omni 版本都有自己的关联 AlloyDB Omni Operator 版本号,您可以在 AlloyDB Omni 版本的版本说明中找到该版本号。

如果您只想升级到较新版本的 AlloyDB Omni 补丁,则只需升级数据库集群,而无需升级 AlloyDB Omni Operator 本身。您可以跳至升级数据库集群中的说明。

否则,请继续下一部分。

升级 AlloyDB Omni Operator

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

  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 Operator 版本,例如 1.1.0

  2. 下载较新的 AlloyDB Omni Operator:

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

    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 Operator 升级,请在完成上述步骤后立即按照下一部分中的说明操作。

升级数据库集群

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

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

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

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

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

例如,以下清单摘录定义了一个运行 AlloyDB Omni Operator 版本 15.5.2 且具有 AlloyDB Omni Operator 版本 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

从 1.0.0 之前的 AlloyDB Omni Operator 升级

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

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

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

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

  4. 重新安装 AlloyDB Omni Operator。您可以使用安装旧版 AlloyDB Omni Operator 时所用的命令,而无需指定新的版本号。

  5. 重新创建数据库集群。您可以使用之前创建数据库集群时所用的清单文件。您可能需要更新这些文件,以反映 AlloyDB Omni 运算符 1.0.0 版引入的 API 更改,例如 databaseVersion 属性取代了旧版 version 属性。

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

回滚升级

以下说明仅适用于 AlloyDB Omni 版本 15.2.1 到 15.5.2。这些限制不适用于 AlloyDB Omni 的基于 Kubernetes 的部署。

如需将 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 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 支持卷扩展时,您才能增加磁盘的大小。
  • 您不能减少磁盘的大小。