使用 Compute Engine 和 Cloud SQL 部署 Pega Platform

本教程介绍如何在 Google Cloud 上部署 Pega Platform。如果您是一位对部署过程详情感兴趣的系统管理员、开发人员或工程师,此教程将有很高的参考价值。

Pega Platform 是一个业务流程管理 (BPM) 和客户关系管理 (CRM) 平台。Pega 可帮助企业和机构快速构建企业应用,交付其成果和所需的端到端客户体验。

本指南假定您已初步了解 Cloud Shell、Cloud SQL、Compute Engine 和 Linux 命令行。

概览

Pega Platform 是一款遵循 Java EE 规范的企业应用,由两层组成:

  • 应用服务器,用于托管 Pega Platform 应用,并提供与其他系统的互连。
  • 数据库服务器,用于存储 Pega Platform 使用和生成的规则、数据和工作对象。

应用用户和开发者通常使用 Web 浏览器访问 Pega Platform。

应用也可以公开基于 HTTP 的服务(如 SOAP 或 REST),进行管理或在无头环境中处理自动化。

本教程提供以下内容:

  • 用于在 Google Cloud 上实现面向开发环境的可伸缩 Pega 应用的参考架构。根据您的具体基础架构和安全需求,您可以相应地调整本教程中描述的配置。
  • GitHub 代码库,包含您在本教程中用于安装 Pega 的脚本,及其他必要组件。
  • 有关如何暂存 Pega Platform 7.4 安装媒体、如何部署脚本以及如何部署参考架构的说明。
  • 有关如何配置 Pega 以支持 Cloud Load Balancing 的说明。

在本教程结束时,您将拥有一个包含单个 Cloud SQL for PostgreSQL 实例的 Pega 集群,以及三个集群化 Compute Engine 应用虚拟机 (VM),其 Web 流量由前端的 Cloud Load Balancing 负责处理。其中,所有 SQL 连接都是使用 Cloud SQL 代理建立的。本教程使用 us-central1 区域进行 Pega 部署。

本教程使用以下产品。如果您使用的是这些产品的不同版本,则可能需要调整本教程和代码库中引用的脚本和命令。

  • Pega Platform 7.4
  • PostgreSQL 9.6
  • Red Hat Enterprise Linux 7
  • Apache Tomcat 8.5

下图显示了本教程中讨论的 Pega 部署的架构。

Pega 部署的架构

目标

  • 使用 Cloud SQL 部署 PostgreSQL。
  • 配置 Pega。
  • 安装 Pega Rulebase。
  • 安装 Pega 应用服务器。
  • 使用 Cloud Logging 和 Cloud Monitoring 在安装期间进行错误报告和监控。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Compute Engine
  • 永久性磁盘
  • Cloud SQL
  • Cloud Storage
  • 网络

请使用价格计算器根据您的预计使用情况来估算费用。

准备工作

  1. 确保您拥有 Pega 7.4 安装媒体文件。如果没有,请联系 Pega 支持团队
  2. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  3. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  4. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  5. 启用 Compute Engine, Cloud SQL Admin, Logging, and Monitoring API。

    启用 API

  6. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  7. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  8. 启用 Compute Engine, Cloud SQL Admin, Logging, and Monitoring API。

    启用 API

您使用 Cloud Shell 执行本教程中的所有终端命令。完成本教程后,您可以通过删除您创建的资源来避免继续计费。如需了解详情,请参阅清理

准备环境

在本部分中,您将为整个教程中所用的值(如区域和地区)配置默认设置。本教程使用 us-central1 作为默认区域,使用 us-central1-b 作为默认地区。

此外,您还可以创建一个包含所有设置的文件,以便在需要再次打开 Cloud Shell 并重新初始化设置的情况下能够自动加载相应变量。

  1. 打开 Cloud Shell:

    打开 Cloud Shell

  2. 设置默认区域和地区:

    gcloud compute project-info add-metadata \
        --metadata google-compute-default-region=us-central1,google-compute-default-zone=us-central1-b
  3. 重新初始化 shell:

    gcloud init --console-only

    对屏幕显示的前三个问题请按 1,对最后一个问题请输入项目 ID。

  4. 设置一个环境变量,以保存您将在本教程后面部分创建的 Cloud Storage 存储分区的名称。请将 [BUCKET_NAME] 替换成您自行选择的名称,并注意遵循 Cloud Storage 存储分区的命名规则。如需了解详情,请参阅存储分区命名准则

    GCS_BUCKET=[BUCKET_NAME]
  5. 设置一个环境变量,以保存 Pega 7.4 安装文件的名称。您从 Pega 中获取的安装文件是一个名称中包含唯一编号的 zip 文件。在以下示例中,请将 [NNNNN] 替换成您的唯一编号。

    PEGA_INSTALL_FILENAME=[NNNNN]_Pega7.4.zip
  6. 设置一个环境变量,以保存您的 Cloud SQL 实例名称。注意遵循实例的命名规则,即只能包含小写字母,数字和连字符,并且必须以字母开头。

    CLOUD_SQL_INSTANCE_NAME=[INSTANCE_NAME]
  7. 设置一个环境变量,以保存您的数据库 Pega 管理员用户密码:

    ADMIN_USER_PW=[ADMIN_PASSWORD]
  8. 设置一个环境变量,以保存您的数据库 Pega 基础用户密码:

    BASE_USER_PW=[PEGA_DATABASE_PASSWORD]
  9. 设置一个环境变量,以保存您的 Pega 管理员 (administrator@pega.com) 密码的初始值:

    PEGA_ADMIN_PW=[PEGA_ADMIN_PASSWORD]
  10. 设置一个环境变量,以保存您的默认区域:

    REGION=$(gcloud compute project-info describe \
        --format 'value(commonInstanceMetadata.google-compute-default-region)')
  11. 创建一个包含环境变量的文件:

    cat <<EOF > ~/.pegarc
    GCS_BUCKET=${GCS_BUCKET}
    PEGA_INSTALL_FILENAME=${PEGA_INSTALL_FILENAME}
    CLOUD_SQL_INSTANCE_NAME=${CLOUD_SQL_INSTANCE_NAME}
    ADMIN_USER_PW=${ADMIN_USER_PW}
    BASE_USER_PW=${BASE_USER_PW}
    PEGA_ADMIN_PW=${PEGA_ADMIN_PW}
    REGION=${REGION}
    EOF
  12. 在当前会话中加载环境变量,并将 Cloud Shell 设置为日后登录时自动加载变量:

    grep -q -F "source ~/.pegarc" ~/.bashrc || echo "source ~/.pegarc" >> ~/.bashrc

设置服务帐号

若要允许 Pega 访问本教程的资源,您必须创建一个 Google Cloud 服务帐号。该服务帐号需要具有以下角色:

  • cloudsql.client。用于通过 Cloud SQL 代理连接到 Cloud SQL 数据库。
  • storage.objectViewer。用于从 Cloud Storage 下载文件。
  • logging.logWriter。用于将日志写入 Cloud Logging。
  • monitoring.metricWriter。用于将监控数据写入 Cloud Monitoring。
  • errorreporting.writer。用于将错误信息写入 Cloud Logging。

如需创建服务帐号,请执行以下操作:

  1. 在 Cloud Shell 中,创建一个名为 pega-app 的服务帐号:

    gcloud iam service-accounts create pega-app --display-name "pega-app"
  2. 将角色添加到服务帐号:

    gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \
        --member=serviceAccount:pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/cloudsql.client
    gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \
        --member=serviceAccount:pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/storage.objectViewer
    gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \
        --member=serviceAccount:pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \
        --member=serviceAccount:pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \
        --member=serviceAccount:pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/errorreporting.writer

设置 Cloud SQL

接下来是创建数据库。在本教程中,您将在 Cloud SQL 上使用 PostgreSQL 数据库。

  1. 在 Cloud Shell 中,创建 Cloud SQL 实例:

    gcloud sql instances create ${CLOUD_SQL_INSTANCE_NAME} \
        --database-version=POSTGRES_9_6 --cpu=2 --region=${REGION} \
        --memory=8GB --storage-auto-increase --backup-start-time=00:00 \
        --availability-type=regional

    在本教程中,请使用具有两个 vCPU 和 8 GB RAM 的实例。此步骤可能需要几分钟时间才能完成。

  2. 使用双用户配置为您的安装创建 Pega 运行时用户。在双用户配置中,管理员用户会获得访问数据库的完整权限,而基础用户只会获得部分权限。

    gcloud sql users create PegaADMIN \
        --instance=${CLOUD_SQL_INSTANCE_NAME}  \
        --password=${ADMIN_USER_PW}
    gcloud sql users create PegaBASE \
        --instance=${CLOUD_SQL_INSTANCE_NAME}  \
        --password=${BASE_USER_PW}

设置 Cloud Storage 存储分区

您需要创建一个云存储存储分区,其中包含 Pega 安装媒体和本教程中使用的其他脚本。

  1. 在 Cloud Shell 中,创建存储分区:

    gsutil mb -c regional -l ${REGION} gs://${GCS_BUCKET}
  2. 使用 Cloud Console 将 Pega 7.4 安装 zip 文件上传到新的存储分区。请将该文件上传到新存储分区的根目录中。

将安装脚本上传到 Cloud Storage 存储分区

现在,请下载属于 Cloud Shell 实例解决方案组成部分的 GitHub 源代码库。然后,您可以将该代码库上传到 Cloud Storage 存储分区。

  1. 在 Cloud Shell 中,从 GitHub 代码库中下载包含安装脚本的 zip 文件:

    wget https://github.com/GoogleCloudPlatform/solutions-compute-cloudsql-pega7/archive/master.zip
  2. 解压缩文件的内容:

    unzip master.zip
  3. 将脚本上传到您的存储分区:

    gsutil cp -rP solutions-compute-cloudsql-pega7-master/ gs://${GCS_BUCKET}/scripts

安装 Pega Rulebase

Pega Rulebase 存储 Pega 用于操作的规则、工作项和其他数据。为安装 Pega Rulebase,您需要设置临时 Compute Engine 虚拟机来运行 Pega 安装脚本。您可以使用已预配置设置的启动脚本,这样您就不需要手动执行安装命令。在此步骤中,您将使用启动脚本,但您也可以选择手动执行安装。

Pega Rulebase 安装脚本执行以下操作:

  • 运行系统更新。
  • 安装 Cloud Logging 和 Cloud Monitoring 代理。
  • 安装所需的软件包,如 PostgreSQL 客户端和 Java 开发工具包 (JDK)。
  • 安装和配置 Cloud SQL 代理,以连接到 Cloud SQL 实例。
  • 从 Cloud Storage 存储分区下载和解压缩 Pega 安装文件。
  • 填充包含所需环境变量的 setupDatabase.properties 文件。
  • 下载 PostgreSQL JDBC 驱动程序。
  • 在数据库中创建 Pega 架构。
  • 运行 Pega Rulebase 安装脚本。

如需安装 Pega Rulebase,请执行以下操作:

  1. 在 Cloud Shell 中,创建带有 Pega Rulebase 安装启动脚本的虚拟机:

    gcloud compute instances create pega-db-installer \
        --machine-type=n1-standard-4 \
        --service-account=pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --scopes=https://www.googleapis.com/auth/cloud-platform \
        --image-family rhel-7  \
        --image-project=rhel-cloud \
        --boot-disk-size=35GB \
        --metadata=startup-script-url=gs://${GCS_BUCKET}/scripts/pega/db-startup.sh,SQL_INSTANCE_ID=${CLOUD_SQL_INSTANCE_NAME},GCS_BUCKET=${GCS_BUCKET},PEGA_INSTALL_FILENAME=${PEGA_INSTALL_FILENAME},ADMIN_USER_PW=${ADMIN_USER_PW},BASE_USER_PW=${BASE_USER_PW},PEGA_ADMIN_PW=${PEGA_ADMIN_PW}

    该过程最多可能需要运行 1 个小时。

    提示:在 Pega 安装运行时,您可以创建以下两节中的防火墙规则和实例模板。

  2. 查看启动脚本日志,以检查安装状态。

    1. 转到 Cloud Logging 控制台:

      Cloud Logging 控制台

    2. 从下拉列表中,选择名为 pega-db-installer 的 Compute Engine 实例。

    3. 搜索 startup-script-url 以仅过滤来自启动脚本的日志消息。

      当日志行显示您的 Pega 安装完成!时,您可以转到下一步。

  3. 删除安装虚拟机实例:

    gcloud compute instances delete pega-db-installer

创建防火墙规则

您必须创建一些防火墙规则,以控制进出您所创建的应用服务器的流量。在本教程后面部分,您需要将 pega-app 网络标记附加到自己的虚拟机,然后相应地配置防火墙规则。

对于 Pega 部署,您必须允许 Pega 安装指南中所定义的以下类型的流量:

  • Pega Hazelcast 集群通信。此类通信在集群中各个 Pega 应用服务器之间使用 TCP 端口 5701 到 5800。
  • Pega ElasticSearch 节点到节点的通信。此类通信在集群中各个 Pega 应用服务器之间使用 TCP 端口 9300 到 9399。
  • 面向用户流量或 Cloud Load Balancing IP 地址范围的端口 8080 或 8443 。这将允许 Web 流量到达您的 Pega 安装。全局负载平衡器的源 IP 地址范围如下

    130.211.0.0/22
    35.191.0.0/16

如需创建防火墙规则,请执行以下操作:

  1. 允许流量从带有 pega-app 网络标记的虚拟机进入任何带有 pega-app 网络标记的其他虚拟机:

    gcloud compute firewall-rules create pega-internal \
        --description="Pega node to node communication requirements" \
        --action=ALLOW \
        --rules=tcp:9300-9399,tcp:5701-5800 \
        --source-tags=pega-app \
        --target-tags=pega-app
  2. 允许流量从全局负载平衡器进入任何带有 pega-app 网络标记的虚拟机:

    gcloud compute firewall-rules create pega-web-external \
        --description="Pega external web ports" \
        --action=ALLOW \
        --rules=tcp:8080,tcp:8443 \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=pega-app

为应用服务器创建实例模板

为了创建高可用性 Pega 集群,使用实例组定义 Pega 集群的位置、容量和弹性,并使用实例模板确保各个虚拟机运行相同的配置。

在本教程中,您将使用配备了 2 个 vCPU 和 7.5 GB RAM 的 n1-standard-2 机器类型。如需了解详情,请参阅有关 Google Cloud 机器类型的文档。根据环境要求,相应地调整设置。

  • 创建实例模板:

    gcloud compute instance-templates create pega-app \
        --machine-type=n1-standard-2 \
        --service-account=pega-app@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --scopes=https://www.googleapis.com/auth/cloud-platform \
        --tags=pega-app --image-family rhel-7 --image-project=rhel-cloud \
        --boot-disk-size=20GB \
        --metadata=startup-script-url=gs://${GCS_BUCKET}/scripts/pega/app-startup.sh,SQL_INSTANCE_ID=${CLOUD_SQL_INSTANCE_NAME},GCS_BUCKET=${GCS_BUCKET},PEGA_INSTALL_FILENAME=${PEGA_INSTALL_FILENAME},ADMIN_USER_PW=${ADMIN_USER_PW},BASE_USER_PW=${BASE_USER_PW},PEGA_ADMIN_PW=${PEGA_ADMIN_PW}

Pega 应用服务器安装脚本会执行以下任务:

  • 安装最新的系统更新。
  • 安装 Cloud Logging 和 Cloud Monitoring 代理。
  • 安装 JDK。
  • 安装和配置 Cloud SQL 代理,以连接到 Cloud SQL 实例,并将其作为服务来运行。
  • 安装 Tomcat。
  • 下载 PostgreSQL JDBC 驱动程序。
  • 使用 Pega 所需的设置配置 Tomcat。
  • 从 Cloud Storage 存储分区下载 Pega 安装媒体,并为 Tomcat 安装 Pega Web 应用归档。
  • 启动 Tomcat 和 Pega。

创建实例组

创建实例模板后,请创建一个使用先前所创建的虚拟机模板的实例组。

在本教程中,您将创建一个包含三个虚拟机的实例组。该实例组不能自动扩缩。但是,如果其中任何一个虚拟机关闭,它都会重新创建虚拟机。

  1. 创建一个托管式实例组:

    gcloud compute instance-groups managed create "pega-app" \
        --base-instance-name "pega-app" \
        --template "pega-app" \
        --size "3" \
        --region=${REGION}

    此命令可创建一个包含三个虚拟机且名为 pega-app 的实例组。

  2. 创建一个已命名的端口:

    gcloud compute instance-groups managed set-named-ports pega-app \
        --named-ports=pega-web:8080 \
        --region=${REGION}

接着,该实例组将开始自动创建虚拟机。

创建负载平衡器

如需授予用户访问 Pega 应用服务器的权限,您需要创建一个负载平衡器,在实例组中的虚拟机之间分配网络流量。负载平衡器是下面数种组件的结合

  • 全局转发规则(前端)。
  • 目标代理。
  • 网址映射。
  • 带有一个或多个后端的后端服务。
  • 用于确定后端服务是否正常的运行状况检查。

如需创建负载平衡器,请执行以下操作:

  1. 在 Cloud Shell 中,创建运行状况检查:

    gcloud compute health-checks create http pega-health \
        --request-path=/prweb/PRRestService/monitor/pingservice/ping \
        --port=8080

    这会配置运行状况检查来监控 Pega 提供的 ping 服务,并回复有关 Pega 实例是否已启动并运行的信息。如需了解详情,请参阅验证实例是否正在运行

  2. 创建后端服务:

    gcloud compute backend-services create pega-app \
        --health-checks=pega-health \
        --port-name=pega-web \
        --session-affinity=GENERATED_COOKIE \
        --protocol=HTTP --global

    后端服务定义了可用于测试实例是否正常的运行状况检查,还允许您设置负载平衡政策。

  3. 向后端服务中添加后端:

    gcloud compute backend-services add-backend pega-app \
        --instance-group=pega-app \
        --global \
        --instance-group-region=${REGION}

    后端定义了流量可以路由到的实例组。

  4. 创建网址映射:

    gcloud compute url-maps create pega-app --default-service=pega-app

    此命令会将默认网址映射设置为将所有流量路由到您创建的后端服务。在更复杂的架构中,您可以将带有不同网址格式的流量路由到不同的后端服务。

  5. 创建目标代理:

    gcloud compute target-http-proxies create pega-app --url-map=pega-app
  6. 创建静态 IP 地址:

    gcloud compute addresses create pega-app --global

    此命令会创建一个静态 IP 地址,您可用它来映射到域名系统 (DNS) 记录。如果您倾向于使用临时 IP 地址,请跳过此步骤,并在接下来的步骤中省略全局转发规则中的 --address 选项。

  7. 创建前端全局转发规则:

    gcloud compute forwarding-rules create pega-app \
        --global \
        --address=$(gcloud compute addresses describe pega-app --global --format 'value(address)') \
        --ip-protocol=TCP \
        --ports=80 \
        --target-http-proxy=pega-app

连接到您的 Pega 应用

首次使用实例组可能需要 5 到 10 分钟时间。在本部分,您需要检查部署是否联机,然后转到主登录页面。

  1. 如需检查负载平衡器的状态,请转到 Cloud Console 中的负载平衡页面。

    打开“负载平衡”页面

    部署准备就绪后,在后端列中,您会看到负载平衡器名称旁边有一个绿色状态图标。

  2. 找到您分配给负载平衡器的 IP 地址:

    gcloud compute forwarding-rules describe pega-app --global
  3. 使用以下语法将 IP 地址复制粘贴到浏览器中。对于 [IP_ADDRESS],请替换成您在上一步中获得的 IP 地址。

    http://[IP_ADDRESS]/prweb

配置 Pega 部署

若要完全支持负载平衡器,您需要创建动态系统设置。当管理员将某个 Pega 节点处于静默状态时,这会指示 Pega 需要查看哪些 cookie,并确保最终用户恰当地维持其网络会话。

您需要创建两个系统设置来启用此功能。在本教程中,您将使用动态系统设置,该设置让您仅需为整个集群创建一次设置。

提示:您还可以使用应用导入向导导入设置。如需了解详情,请参阅后续步骤

  1. 在浏览器窗口中,使用您在准备环境部分设置的 administrator@pega.com 用户名和密码 (PEGA_ADMIN_PW) 登录 Pega 控制台。

    首次登录时,系统会提示您更改密码。

  2. 在 Pega 控制台,点击创建 > 系统管理员 > 动态系统设置

  3. 创建动态系统设置页面,配置以下设置:

    • 简短说明prconfig/session/ha/quiesce/customSessionInvalidationMethod
    • 自用规则集Pega-Engine
    • 设置目的prconfig/session/ha/quiesce/customSessionInvalidationMethod
  4. 点击创建和打开

  5. 将值字段设置为 configurable-cookie-invalidator,然后点击保存

  6. 点击保存右边的向下箭头,然后点击另存为

    动态系统设置的“另存为”选项

  7. 使用以下值创建另一个设置:

    • 简短说明prconfig/session/ha/quiesce/cookieToInvalidate
    • 自用规则集Pega-Engine
    • 设置目的prconfig/session/ha/quiesce/cookieToInvalidate
  8. 点击创建和打开

  9. 将值字段设置为 GCLB,然后点击保存

  10. 在 Cloud Shell 中,为实例组执行滚动式重启:

    gcloud beta compute instance-groups managed rolling-action \
        restart pega-app \
        --region=${REGION}

    所有应用服务器重新联网后,即表示您的部署已完成。

如需了解如何配置 Pega 中的会话粘性,请参考关于 PDN 的 Pega 帮助文档

清除数据

为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤