第 6 章 在 Google Cloud Platform 上配置红帽高可用性集群

本章包含使用 Google Compute Engine(GCE)虚拟机(VM)实例在 Google Cloud Platform(GCP)上配置红帽高可用性(HA)集群的信息和步骤。

本章包含为 GCP 设置环境的先决条件步骤。设置环境后,您可以创建并配置 GCP VM 实例。

本章还包含与创建 HA 集群相关的流程,该集群将单个节点转换为 GCP 上的 HA 节点集群。这包括在每个集群节点上安装高可用性软件包和代理、配置隔离以及安装 GCP 网络资源代理的步骤。

本章在很多位置使用了 GCP 文档。如需更多信息,请参阅引用的 GCP 文档。

先决条件

如果您或项目管理员创建自定义服务帐户,则应该为以下角色配置服务帐户。

  • Cloud Trace Agent
  • Compute Admin
  • Compute Network Admin
  • Cloud Datastore User
  • Logging Admin
  • Monitoring Editor
  • Monitoring Metric Writer
  • Service Account Administrator
  • Storage Admin

6.1. GCP 上的 Red Hat Enterprise Linux 镜像选项

下表列出了镜像选择和镜像选项的不同。

表 6.1. 镜像选项

镜像选项订阅示例情境注意事项

选择部署移至 GCP 的自定义镜像。

利用您现有的红帽订阅。

通过 Red Hat Cloud Access 程序启用订阅,上传您的自定义镜像并附加您的订阅。

订阅只包括红帽产品的成本;您还需要支付其他成本。

移至 GCP 的自定义镜像名为 "Cloud Access" 镜像,因为您利用了您现有的红帽订阅。红帽直接为 Cloud Access 镜像提供支持。

选择部署包含 RHEL 的现有 GCP 镜像。

GCP 镜像包括一个红帽产品。

GCP Compute Engine 上启动实例时选择 RHEL 镜像,或者从 Google Cloud Platform Marketplace 中选择镜像。

根据 pay-as-you-go 模式每小时向 GCP 支付。这样的镜像称为 "on-demand" 镜像。GCP 通过支持协议支持 on-demand 镜像。

重要

您无法将 on-demand 实例转换为 Red Hat Cloud Access 实例。要从 on-demand 镜像改为 Red Hat Cloud Access bring-your-own subscription(BYOS)镜像,创建一个新的 Red Hat Cloud Access 实例,并从您的 on-demand 实例迁移数据。在迁移数据后取消您的 on-demand 实例以避免出现重复账单。

本章的剩余部分包含与自定义镜像相关的信息和流程。

6.2. 所需的系统软件包

本章的步骤假设您使用运行 Red Hat Enterprise Linux 的主机系统。要成功完成这些操作,主机系统必须安装以下软件包。

表 6.2. 系统软件包

软件包描述命令

qemu-kvm

这个软件包提供用户级别的 KVM 模拟器,并可方便主机和客户机虚拟机间的通信。

# yum install qemu-kvm libvirt

qemu-img

这个软件包为客户机虚拟机提供磁盘管理。qemu-img 软件包作为 qemu-kvm 软件包的依赖项安装。

libvirt

这个软件包为服务器和主机端提供与虚拟机监控程序、主机系统和主机系统以及处理库调用、管理虚拟机和控制虚拟机监控程序的 libvirtd 守护进程交互的服务器和主机库。

表 6.3. 其他虚拟化软件包

软件包描述命令

virt-install

这个软件包提供从命令行创建虚拟机的 virt-install 命令。

# yum install virt-install libvirt-python virt-manager virt-install libvirt-client

libvirt-python

这个软件包包含一个模块,它允许使用 Python 编程语言编写的应用程序使用 libvirt API 提供的接口。

virt-manager

这个软件包提供 virt-manager 工具,也称为 Virtual Machine Manager(VMM)。VMM 是一个图形化工具用于管理虚拟机。它使用 libvirt-client 库作为管理 API。

libvirt-client

这个软件包为访问 libvirt 服务器提供客户端 API 和库。libvirt-client 软件包包含 virsh 命令行工具,用于从命令行或特殊虚拟化 shell 管理和控制虚拟机和虚拟机监控程序。

6.3. 安装 HA 软件包和代理

在所有节点上完成以下步骤,安装高可用性软件包和代理。

流程

  1. 禁用所有软件仓库。

    # subscription-manager repos --disable=*
  2. 启用 RHEL 7 服务器和 RHEL 7 服务器 HA 软件仓库。

    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
  3. 更新所有软件包。

    # yum update -y
  4. 安装 pcs pacemaker 隔离代理和资源代理。

    # yum install -y pcs pacemaker fence-agents-gce resource-agents-gcp
  5. 如果内核已更新,重启机器。

    # reboot

6.4. 配置 HA 服务

在所有节点上完成以下步骤以配置高可用性服务。

流程

  1. 用户 hacluster 在上一步中的 pcspacemaker 安装中创建。在所有集群节点上为用户 hacluster 创建密码。所有节点都使用相同的密码。

    # passwd hacluster
  2. 如果启用了 firewalld 服务,在 RHEL 中添加高可用性服务。

    # firewall-cmd --permanent --add-service=high-availability
    
    # firewall-cmd --reload
  3. 启动 pcs 服务并在引导时启用它。

    # systemctl enable pcsd.service --now

验证步骤

  1. 确定 pcs 服务正在运行。

    # systemctl is-active pcsd.service

6.5. 创建集群

完成以下步骤以创建节点集群。

流程

  1. 在其中一个节点上,输入以下命令验证 pcs 用户 ha cluster。指定集群中的每个节点的名称。

    # pcs cluster auth  _hostname1_ _hostname2_ _hostname3_ -u hacluster

    例如:

    [root@node01 ~]# pcs cluster auth node01 node02 node03 -u hacluster
    node01: Authorized
    node02: Authorized
    node03: Authorized
  2. 创建集群。

    # pcs cluster setup --name cluster-name _hostname1_ _hostname2_  _hostname3_

验证步骤

  1. 启用集群。

    # pcs cluster enable --all
  2. 启动集群。

    # pcs cluster start --all

6.6. 创建隔离设备

对于大多数默认配置,GCP 实例名称和 RHEL 主机名是相同的。

完成以下步骤,从集群中的任何节点配置隔离。

流程

  1. 从集群中的任何节点获取 GCP 实例名称。请注意,输出还显示实例的内部 ID。

    # fence_gce --zone _gcp_ _region_ --project= _gcp_ _project_ -o list

    例如:

    [root@rhel71-node-01 ~]# fence_gce --zone us-west1-b --project=rhel-ha-testing-on-gcp -o list
    44358**********3181,InstanceName-3
    40819**********6811,InstanceName-1
    71736**********3341,InstanceName-2
  2. 创建隔离设备。使用 pcmk_host-name 命令将 RHEL 主机名与实例 ID 映射。

    # pcs stonith create _clusterfence_ fence_gce pcmk_host_map=_pcmk-hpst-map_ fence_gce zone=_gcp-zone_ project=_gcpproject_

    例如:

    [root@node01 ~]# pcs stonith create fencegce fence_gce pcmk_host_map="node01:node01-vm;node02:node02-vm;node03:node03-vm" project=hacluster zone=us-east1-b

验证步骤

  1. 测试其他其中一个节点的隔离代理。

    # pcs stonith fence gcp nodename
  2. 检查状态以验证该节点是否已隔离。

    # watch pcs status

例如:

[root@node01 ~]# watch pcs status
Cluster name: gcp-cluster
Stack: corosync
Current DC: rhel71-node-02 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum
Last updated: Fri Jul 27 12:53:25 2018
Last change: Fri Jul 27 12:51:43 2018 by root via cibadmin on rhel71-node-01

3 nodes configured
3 resources configured

Online: [ rhel71-node-01 rhel71-node-02 rhel71-node-03 ]

Full list of resources:

us-east1-b-fence    (stonith:fence_gce):    Started rhel71-node-01

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

6.7. 配置 GCP 节点授权

配置 cloud SDK 工具,使用您的帐户凭证访问 GCP。

流程

在每个节点上输入以下命令,使用项目 ID 和帐户凭证初始化每个节点。

# gcloud-ra init

6.8. 配置 GCP 网络资源代理

集群使用附加到二级 IP 地址(从 IP)的 GCP 网络资源代理到正在运行的实例。这是一个浮动 IP 地址,可在集群中的不同节点间传递。

流程

输入以下命令查看 GCP 虚拟 IP 地址资源代理(gcp-vpc-move-vip)描述。这显示了这个代理的选项和默认操作。

# pcs resource describe gcp-vpc-move-vip

您可以将资源代理配置为使用主子网地址范围或二级子网地址范围。本节包含了这两者的步骤。

主子网地址范围

流程

完成以下步骤,为主 VPC 子网配置资源。

  1. 创建 aliasip 资源。包括一个未使用的内部 IP 地址。在命令中包含 CIDR 块。

    # pcs resource create aliasip gcp-vpc-move-vip  alias_ip=_UnusedIPaddress/CIDRblock_ --group _group-name_ --group _networking-group_
  2. 创建用于管理节点上 IP 的 IPaddr2 资源。

    # pcs resource create vip IPaddr2 nic=_interface_ ip=_AliasIPaddress_ cidr_netmask=32 --group _group-name_ --group _networking-group_
  3. vipgrp 下的网络资源进行分组。

    # pcs resource group add vipgrp aliasip vip

验证步骤

  1. 验证资源是否已启动,并分组到 vipgrp 下。

    # pcs status
  2. 验证资源是否可以移到另一个节点。

    # pcs resource move vip _Node_

    例如:

    # pcs resource move vip rhel71-node-03
  3. 验证 vip 是否在不同节点上成功启动。

    # pcs status

二级子网地址范围

完成以下步骤,为二级子网地址范围配置资源。

流程

  1. 创建二级子网地址范围。

    # gcloud-ra compute networks subnets update _SubnetName_ --region _RegionName_ --add-secondary-ranges _SecondarySubnetName_=_SecondarySubnetRange_

    例如:

    # gcloud-ra compute networks subnets update range0 --region us-west1 --add-secondary-ranges range1=10.10.20.0/24
  2. 创建 aliasip 资源。在二级子网地址范围内创建一个未使用的内部 IP 地址。在命令中包含 CIDR 块。

    # pcs resource create aliasip gcp-vpc-move-vip alias_ip=_UnusedIPaddress/CIDRblock_ --group _group-name_ --group _networking-group_
  3. 创建用于管理节点上 IP 的 IPaddr2 资源。

    # pcs resource create vip IPaddr2 nic=_interface_ ip=_AliasIPaddress_ cidr_netmask=32 --group _group-name_ --group _networking-group_

验证步骤

  1. 验证资源是否已启动,并分组到 vipgrp 下。

    # pcs status
  2. 验证资源是否可以移到另一个节点。

    # pcs resource move vip _Node_

    例如:

    [root@rhel71-node-01 ~]# pcs resource move vip rhel71-node-03
  3. 验证 vip 是否在不同节点上成功启动。

    # pcs status