第 3 章 同时升级所有 OpenStack 服务

这个 OpenStack 升级的方法包括同时禁用所有 OpenStack 服务,进行升级操作,然后在升级完成后启用所有服务。这是所有升级到 Red Hat Enterprise Linux OpenStack Platform 7 的方法中最简单的一个方法。
因为所有服务都被停止,所以不需要进行编配(orchestration)。如果不需要改变 Red Hat Enterprise Linux 的版本(如从 v7.0 变为 v7.1),虚拟机负载仍然可以运行。
在一个大型环境中,这个升级过程可能会导致较长的停机时间(downtime)。您可以通过在实际升级前进行仔细的规划和测试,或在一个特定的停机时间段内进行升级来减少停机对您环境造成的影响。

注意

本章中所使用的命名规则与其它所有 Red Hat Enterprise Linux OpenStack Platform 文档中的规则相同。如果您还不熟悉它们,请在进行升级前参阅 Architecture Guide Red Hat Enterprise Linux OpenStack Platform Documentation Suite)。
在对 OpenStack 进行升级前,请订阅所需的频道。如需更多相关信息,请参阅 第 2 章 先决条件

3.1. 同时升级所有 OpenStack 服务

以下介绍了通过同时更新所有组件来把您的云环境从 Juno 升级到 Kilo 的方法。其中的一些步骤包括了高可用性(HA)环境和非高可用性(non-HA)环境的选项。如果您的云环境需要具有高可用性的功能,则需要使用 Pacemaker 命令来启动或停止您的云环境。
在所有主机上执行以下操作:

过程 3.1. 在一个主机上升级 OpenStack 组件

  1. 为 Red Hat Enterprise Linux OpenStack Platform 7 (Kilo) 安装 yum 仓库。
  2. 确定 openstack-utils 软件包已被安装:
    # yum install openstack-utils
  3. 在所有节点上停止所有 OpenStack 服务。这一步取决于您的环境类型。
    • 在一个非高可用性(non-HA)环境中:
      登录到节点并运行以下命令来在一个节点上停止所有 OpenStack 服务:
      # openstack-service stop
    • 在一个高可用性(HA)环境中:
      1. 登录到节点并运行以下命令来在一个节点上停止所有 OpenStack 服务:
        # openstack-service stop
      2. 在集群中设置 stop_all_services 属性来禁用所有被 Pacemaker 管理的资源。在 Pacemaker 集群的一个成员上运行以下命令:
        # pcs property set stop_all_resources=true
        您需要等待,直到 pcs status 显示所有资源已停止。
  4. 对所有软件包进行一个完整的升级,然后在 Identity 服务上删除过期的令牌(这可以减少数据库同步所需的时间):
    # yum upgrade
  5. 对每个服务进行所需的配置更新。
    1. Identity 服务
      在 RHEL OpenStack Platform 7 (Kilo) 发行版本中,令牌持久化后端(token persistence backend)的位置已改变。您需要更新 keystone.conf 文件的 [token] 项中的 driver 选项。把所有 keystone.token.backends 替换为 keystone.token.persistence.backends
      # sed -i 's/keystone.token.backends/keystone.token.persistence.backends/g' \
      /etc/keystone/keystone.conf
      软件包更新可能会包括新的 systemd 单元文件,请确保 systemd 可以知道这些更新的文件。
      # service systemd restart
    2. OpenStack Networking 服务
      在升级完 OpenStack Networking 服务后,您需要编辑 rootwrap dhcp.filter 配置文件。
      替换 /usr/share/neutron/rootwrap/dhcp.filters 文件中的 dnsmasq 的值。例如,进行以下替换:
      dnsmasq: EnvFilter, env, root, CONFIG_FILE=, NETWORK_ID=, dnsmasq
      替换为:
      dnsmasq: CommandFilter, dnsmasq, root
  6. 为所有使用数据库的服务升级它们的数据库 schema。登录到提供服务的节点并运行:
    # openstack-db --service SERVICENAME --update
    使用服务的项目名替换其中的 SERVICENAME。例如,要升级 Identity 服务的数据库 schema,运行:
    # openstack-db --service keystone --update

    表 3.1. 使用数据库的 OpenStack 服务的项目名

    服务 项目名
    Identity keystone
    Block Storage cinder
    Image Service glance
    Compute nova
    Networking neutron
    Orchestration heat
    在把 Juno 升级到 Kilo 时,一些特定服务会需要进行额外的数据库操作,这些操作没有包括在 openstack-db 命令中:
    1. Identity 服务
      以前的安装程序可能没有被配置为需要删除过期的 Keystone 令牌,所以您的令牌表中可能包括大量已经过期的令牌。这可能会大大增加数据库 schema 升级的时间。
      在进行 Keystone 数据库升级前,您可以运行以下命令:
      # keystone-manage token_flush
      这会从数据库中删除过期的令牌。您可以使用 cron 来定期运行这个命令(如每天运行一次)。
    2. Compute
      在全部升级到 Kilo 后(所有节点都运行 Kilo),您需要启动一个 flavor 信息的后台迁移过程。Kilo conductor 节点会在需要的时候自动进行这个操作,但是其它空闲的数据需要在后台进行迁移。以 nova 用户身份运行以下命令:
      # runuser -u nova -- nova-manage db migrate_flavor_data
  7. 检查生成的配置文件。更新的软件包会创建与 Red Hat Enterprise Linux OpenStack Platform 7 版本的服务相对应的 .rpmnew 文件。
    新版本的 OpenStack 服务可能不再支持特定的配置选项,您需要查看 OpenStack 日志中的不再支持的警告信息,并解决它们。否则,在今后进行的升级中可能会出现问题。如需了解更多与配置选项相关的信息,请参阅 Configuration ReferenceRed Hat Enterprise Linux OpenStack Platform Documentation Suite)。
  8. 如果您升级的软件包需要系统重启(例如,一个新内核作为升级的一部分被安装),请在还没有启动相应 OpenStack 服务时重启相关的主机。
    • 在一个非高可用性(non-HA)环境中:
      在每个节点上运行以下命令重启 OpenStack 服务:
      # openstack-service start
    • 在一个 HA 环境中:
      1. 通过设置 stop_all_resources 属性来允许 Pacemaker 重启您的资源。在 Pacemaker 集群的一个成员上运行:
        # pcs property set stop_all_resources=false
        您需要等待,直到 pcs status 显示所有资源已启动(这可能会需要几分钟)。
      2. 在 Compute 节点上重启 OpenStack 服务。在每个 Compute 节点上运行:
        # openstack-service start