使用 PgBouncer 连接池程序

选择文档版本:

本页面介绍了如何使用 RPM 编排器为 AlloyDB Omni 集群配置和启动 PgBouncer 连接池程序。

准备工作

确保您已部署正常运行的 AlloyDB Omni 集群,并且 编排器已安装 在控制节点上。您还必须确保负载均衡器或数据库节点上的端口 6432 已打开,以允许传入 PgBouncer 的流量。

准备资源规范

创建一个资源规范文件(例如 pgbouncer_spec.yaml),用于定义 PgBouncer 资源。此文件介绍了连接池程序及其与数据库集群的关联。

PgBouncer:
  metadata:
    name: PGBOUNCER_RESOURCE_NAME
  spec:
    dbclusterRef: CLUSTER_NAME
    allowSuperUserAccess: ALLOW_SUPERUSER_ACCESS
    parameters:
      pool_mode: POOL_MODE
      ignore_startup_parameters: IGNORE_STARTUP_PARAMETERS
      default_pool_size: "DEFAULT_POOL_SIZE"
      max_client_conn: "MAX_CLIENT_CONN"
      max_db_connections: "MAX_DB_CONNECTIONS"

替换以下内容:

  • PGBOUNCER_RESOURCE_NAME:PgBouncer 资源的名称。
  • CLUSTER_NAME:AlloyDB Omni 数据库集群的名称。使用您在启动集群时声明的名称。
  • ALLOW_SUPERUSER_ACCESS:指定是否允许超级用户访问数据库。将其设置为 true 或 false。
  • POOL_MODE:指定其他客户端可以重复使用数据库连接的时间。如需了解详情,请参阅配置 PgBouncer 设置。
  • IGNORE_STARTUP_PARAMETERS:指定 PgBouncer 不允许的参数,以便在启动期间忽略这些参数。
  • DEFAULT_POOL_SIZE:每对用户-数据库允许的数据库连接数上限。
  • MAX_CLIENT_CONN:客户端连接数上限。
  • MAX_DB_CONNECTIONS:每个数据库允许的服务器连接数上限。

配置 PgBouncer 设置

使用以下参数配置 PgBouncer 设置:

参数 说明 默认值
pool_mode 指定其他客户端可以重复使用数据库连接的时间。
允许的值如下所示:
  • session:客户端断开连接后,数据库连接会释放回池。
  • transaction:事务完成后,数据库连接会释放回池。
  • statement:查询完成后,数据库连接会释放回池。
    在此模式下,不允许跨多个语句进行事务处理。
session
ignore_startup_parameters 指定 PgBouncer 不允许的参数,以便在启动期间忽略这些参数。
default_pool_size 每对用户-数据库允许的数据库连接数上限。 20
max_client_conn 客户端连接数上限。 100
max_db_connections 每个数据库允许的服务器连接数上限,与用户无关。设置为 0 表示无限制。 0

启动 PgBouncer

如需启动 PgBouncer 连接池程序,请使用 Ansible 或 AlloyDB Omni 编排器 CLI (alloydbctl):

Ansible

如需使用 Ansible 启动 PgBouncer,请使用一个使用 google.alloydbomni_orchestrator.bootstrap 角色的 playbook:

  1. 创建一个 Ansible playbook(例如 bootstrap_pgbouncer.yaml),指向您的 部署规范 和资源规范:
    - name: Bootstrap PgBouncer
      hosts: localhost
      vars:
        ansible_user: SSH_USER
        ansible_ssh_private_key_file: SSH_KEY_PATH
      roles:
       - role: google.alloydbomni_orchestrator.bootstrap

    替换以下内容:

    • SSH_USER:您用于通过 SSH 连接到集群中节点的用户名。
    • SSH_KEY_PATH:用于连接到节点的 SSH 私钥文件的本地路径。
  2. 从控制节点运行 playbook,并将资源规范作为额外变量传递:
    ansible-playbook PGBOUNCER_BOOTSTRAP_PLAYBOOK -i "DEPLOYMENT_SPECIFICATION" \
        -e resource_spec="PGBOUNCER_SPECIFICATION"

    执行以下变量替换操作:

    • PGBOUNCER_BOOTSTRAP_PLAYBOOK:您为启动 PgBouncer 而创建的 playbook 的路径。
    • DEPLOYMENT_SPECIFICATION:您在安装 AlloyDB Omni 组件中创建的部署规范的路径。
    • PGBOUNCER_SPECIFICATION:您在准备资源规范中创建的资源规范的路径。

alloydbctl

您可以使用 alloydbctl 命令行实用程序直接应用 PgBouncer 配置。

如需应用配置,请执行 apply 命令,并同时指定您的 部署规范 和 PgBouncer 资源规范:

alloydbctl apply -d "DEPLOYMENT_SPECIFICATION" -r "PGBOUNCER_SPECIFICATION"

执行以下变量替换操作:

验证 Deployment

选择要用于验证 PgBouncer 资源的状态和配置的界面:

Ansible

如需使用 Ansible 验证 Deployment,请按以下步骤操作:

  1. 创建一个验证 playbook(例如 verify_pgbouncer.yaml),使用 google.alloydbomni_orchestrator.status 角色:

    - name: Verify PgBouncer
      hosts: localhost
      vars:
        ansible_user: SSH_USER
        ansible_ssh_private_key_file: SSH_KEY_PATH
      roles:
        - role: google.alloydbomni_orchestrator.status

    替换以下内容:

    • SSH_USER:您用于通过 SSH 连接到集群中节点的用户名。
    • SSH_KEY_PATH:用于连接到节点的 SSH 私钥文件的本地路径。
  2. 从控制节点运行 playbook,并传递清单文件:

    ansible-playbook PGBOUNCER_VERIFY_PLAYBOOK -i "DEPLOYMENT_SPECIFICATION" \
        -e resource_type=PgBouncer -e resource_name="PGBOUNCER_RESOURCE_NAME"

    执行以下变量替换操作:

    • PGBOUNCER_VERIFY_PLAYBOOK:您为验证 PgBouncer Deployment 而创建的 playbook 的路径。
    • DEPLOYMENT_SPECIFICATION:您在安装 AlloyDB Omni 组件中创建的部署规范的路径。
    • PGBOUNCER_RESOURCE_NAME:PgBouncer 资源的名称。

alloydbctl

您可以使用 get 命令检索 PgBouncer 资源的状态:

alloydbctl get -t PgBouncer -n PGBOUNCER_RESOURCE_NAME -d "DEPLOYMENT_SPECIFICATION"

执行以下变量替换操作:

  • PGBOUNCER_RESOURCE_NAME:PgBouncer 资源的名称。
  • DEPLOYMENT_SPECIFICATION:您在安装 AlloyDB Omni 组件中创建的部署规范的路径。

验证连接池程序

RPM 编排器完成设置后,验证您是否可以通过连接池程序连接到数据库集群:

psql -h VIRTUAL_IP -p 6432 -U postgres

将 VIRTUAL_IP 替换为您在创建集群时配置的虚拟 IP 地址。

PgBouncer 会将您的连接路由到相应的数据库节点。

删除 PgBouncer 连接池程序

您可以使用 Ansible 或 AlloyDB Omni 编排器命令行界面 (CLI) 删除 PgBouncer 连接池程序:

Ansible

如需使用 Ansible 删除 PgBouncer 连接池程序,请按以下步骤操作:

  1. 创建一个 Ansible playbook(例如 teardown.yaml),使用 google.alloydbomni_orchestrator.delete 角色:

    - name: Delete PgBouncer
      hosts: localhost
      vars:
        ansible_user: SSH_USER
        ansible_ssh_private_key_file: SSH_KEY_PATH
      roles:
        - role: google.alloydbomni_orchestrator.delete

    替换以下内容:

    • SSH_USER:您用于通过 SSH 连接到集群中节点的用户名。
    • SSH_KEY_PATH:用于连接到节点的 SSH 私钥文件的本地路径。
  2. 使用 ansible-playbook 命令运行 playbook。您必须传递以下 resource_name:

    ansible-playbook PGBOUNCER_DELETE_PLAYBOOK -i "DEPLOYMENT_SPECIFICATION" \
        -e resource_type=PgBouncer -e resource_name="PGBOUNCER_RESOURCE_NAME"

    执行以下变量替换操作:

    • PGBOUNCER_DELETE_PLAYBOOK:您为删除 PgBouncer 连接池程序而创建的 playbook 的路径。
    • DEPLOYMENT_SPECIFICATION:您在安装 AlloyDB Omni 组件中创建的部署规范的路径。
    • PGBOUNCER_RESOURCE_NAME:PgBouncer 资源的名称。

alloydbctl

如需删除 PgBouncer 资源,请运行 alloydbctl delete 命令:

alloydbctl delete -d "DEPLOYMENT_SPECIFICATION" -t PgBouncer -n "PGBOUNCER_RESOURCE_NAME"

执行以下变量替换操作:

  • DEPLOYMENT_SPECIFICATION:您在安装 AlloyDB Omni 组件中创建的部署规范的路径。
  • PGBOUNCER_RESOURCE_NAME:PgBouncer 资源的名称。