第 3 章 将数据库迁移到 control plane


要开始创建 control plane,启用后端服务并从原始 Red Hat OpenStack Platform 17.1 部署中导入数据库。

3.1. 检索特定于拓扑的服务配置

在将数据库迁移到 OpenShift (RHOSO) control plane 上的 Red Hat OpenStack Services 之前,请先从 Red Hat OpenStack Platform (RHOSP)环境中检索特定于拓扑的服务配置。您需要此配置,理由如下:

  • 检查您当前的数据库是否有不准确
  • 要确保在迁移前具有您需要的数据
  • 将您的 RHOSP 数据库与采用的 RHOSO 数据库进行比较

先决条件

  1. 定义以下 shell 变量:将示例值替换为您的环境正确的值:

    注意

    如果您使用 IPv6,请定义没有方括号的 SOURCE_MARIADB_IP 值。例如,SOURCE_MARIADB_IP=fd00:bbbb::2

    $ PASSWORD_FILE="$HOME/overcloud-passwords.yaml"
    $ MARIADB_IMAGE=registry.redhat.io/rhoso/openstack-mariadb-rhel9:18.0
    $ declare -A TRIPLEO_PASSWORDS
    $ CELLS="default cell1 cell2"
    $ for CELL in $(echo $CELLS); do
    >    TRIPLEO_PASSWORDS[$CELL]="$PASSWORD_FILE"
    > done
    $ declare -A SOURCE_DB_ROOT_PASSWORD
    $ for CELL in $(echo $CELLS); do
    >     SOURCE_DB_ROOT_PASSWORD[$CELL]=$(cat ${TRIPLEO_PASSWORDS[$CELL]} | grep ' MysqlRootPassword:' | awk -F ': ' '{ print $2; }')
    > done
    Copy to Clipboard Toggle word wrap
  2. 定义以下 shell 变量:将示例值替换为您的环境正确的值:

    $ MARIADB_CLIENT_ANNOTATIONS='--annotations=k8s.v1.cni.cncf.io/networks=internalapi'
    $ MARIADB_RUN_OVERRIDES="$MARIADB_CLIENT_ANNOTATIONS"
    
    $ CONTROLLER1_SSH="ssh -i *<path to SSH key>* root@*<node IP>*"
    
    
    $ declare -A SOURCE_MARIADB_IP
    $ SOURCE_MARIADB_IP[default]=*<galera cluster VIP>*
    $ SOURCE_MARIADB_IP[cell1]=*<galera cell1 cluster VIP>*
    $ SOURCE_MARIADB_IP[cell2]=*<galera cell2 cluster VIP>*
    # ...
    Copy to Clipboard Toggle word wrap
    • 为源 director 云的任何非单元控制器提供 CONTROLLER1_SSH 设置。
    • 对于 CELLS 中定义的每个单元,将 SOURCE_MARIADB_IP[*]= ... 替换为源 director 云的单元名称和 VIP 地址的记录列表,包括源 director 云的单元格。
    • 要获取 SOURCE_MARIADB_IP 的值,请查询 Controller 和 CellController 节点上的 puppet 生成的配置:

      $ sudo grep -rI 'listen mysql' -A10 /var/lib/config-data/puppet-generated/ | grep bind
      Copy to Clipboard Toggle word wrap
      注意

      源云始终对单元数据库使用相同的密码。因此,相同的密码文件用于所有单元堆栈。但是,split-stack 拓扑允许为每个堆栈使用不同的密码文件。

流程

  1. 导出以下输出的 shell 变量,并测试到 RHOSP 数据库的连接:

    $ unset PULL_OPENSTACK_CONFIGURATION_DATABASES
    $ declare -xA PULL_OPENSTACK_CONFIGURATION_DATABASES
    $ for CELL in $(echo $CELLS); do
    >     PULL_OPENSTACK_CONFIGURATION_DATABASES[$CELL]=$(oc run mariadb-client-1-$CELL ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >         mysql -rsh "${SOURCE_MARIADB_IP[$CELL]}" -uroot -p"${SOURCE_DB_ROOT_PASSWORD[$CELL]}" -e 'SHOW databases;')
    > done
    Copy to Clipboard Toggle word wrap

    如果连接成功,则预期的输出不会进行任何操作。

    注意

    novanova_apinova_cell0 数据库包含在主 overcloud Orchestration 服务(heat)堆栈的同一数据库主机上。其他单元使用其本地 Galera 集群的 nova 数据库。

  2. 在 RHOSP 数据库上运行 mysqlcheck 以检查是否存在不准确:

    $ unset PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK
    $ declare -xA PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK
    $ run_mysqlcheck() {
    >     PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK=$(oc run mariadb-client-2-$1 ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >         mysqlcheck --all-databases -h ${SOURCE_MARIADB_IP[$CELL]} -u root -p"${SOURCE_DB_ROOT_PASSWORD[$CELL]}" | grep -v OK)
    > }
    $ for CELL in $(echo $CELLS); do
    >     run_mysqlcheck $CELL
    > done
    $ if [ "$PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK" != "" ]; then
    >     for CELL in $(echo $CELLS); do
    >         MYSQL_UPGRADE=$(oc run mariadb-client-3 ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >             mysql_upgrade -v -h ${SOURCE_MARIADB_IP[$CELL]} -u root -p"${SOURCE_DB_ROOT_PASSWORD[$CELL]}")
    >         # rerun mysqlcheck to check if problem is resolved
    >         run_mysqlcheck
    >     done
    > fi
    Copy to Clipboard Toggle word wrap
  3. 获取 Compute 服务(nova)单元映射:

    export PULL_OPENSTACK_CONFIGURATION_NOVADB_MAPPED_CELLS=$(oc run mariadb-client-1 ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
        mysql -rsh "${SOURCE_MARIADB_IP['default']}" -uroot -p"${SOURCE_DB_ROOT_PASSWORD['default']}" nova_api -e \
        'select uuid,name,transport_url,database_connection,disabled from cell_mappings;')
    Copy to Clipboard Toggle word wrap
  4. 获取注册的 Compute 服务的主机名:

    $ unset PULL_OPENSTACK_CONFIGURATION_NOVA_COMPUTE_HOSTNAMES
    $ declare -xA PULL_OPENSTACK_CONFIGURATION_NOVA_COMPUTE_HOSTNAMES
    $ for CELL in $(echo $CELLS); do
    >     PULL_OPENSTACK_CONFIGURATION_NOVA_COMPUTE_HOSTNAMES[$CELL]=$(oc run mariadb-client-4-$CELL ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >         mysql -rsh "${SOURCE_MARIADB_IP[$CELL]}" -uroot -p"${SOURCE_DB_ROOT_PASSWORD[$CELL]}" -e \
    >             "select host from nova.services where services.binary='nova-compute' and deleted=0;")
    > done
    Copy to Clipboard Toggle word wrap
  5. 获取映射的 Compute 服务单元列表:

    export PULL_OPENSTACK_CONFIGURATION_NOVAMANAGE_CELL_MAPPINGS=$($CONTROLLER1_SSH sudo podman exec -it nova_conductor nova-manage cell_v2 list_cells)
    Copy to Clipboard Toggle word wrap
  6. 存储导出的变量以供以后使用:

    $ unset SRIOV_AGENTS
    $ declare -xA SRIOV_AGENTS 
    1
    
    $ for CELL in $(echo $CELLS); do
    >     RCELL=$CELL
    >     [ "$CELL" = "$DEFAULT_CELL_NAME" ] && RCELL=default
    >     cat > ~/.source_cloud_exported_variables_$CELL << EOF
    > unset PULL_OPENSTACK_CONFIGURATION_DATABASES
    > unset PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK
    > unset PULL_OPENSTACK_CONFIGURATION_NOVA_COMPUTE_HOSTNAMES
    > declare -xA PULL_OPENSTACK_CONFIGURATION_DATABASES
    > declare -xA PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK
    > declare -xA PULL_OPENSTACK_CONFIGURATION_NOVA_COMPUTE_HOSTNAMES
    > PULL_OPENSTACK_CONFIGURATION_DATABASES[$CELL]="$(oc run mariadb-client-5-$CELL ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >     mysql -rsh ${SOURCE_MARIADB_IP[$RCELL]} -uroot -p${SOURCE_DB_ROOT_PASSWORD[$RCELL]} -e 'SHOW databases;')"
    > PULL_OPENSTACK_CONFIGURATION_MYSQLCHECK_NOK[$CELL]="$(oc run mariadb-client-6-$CELL ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >     mysqlcheck --all-databases -h ${SOURCE_MARIADB_IP[$RCELL]} -u root -p${SOURCE_DB_ROOT_PASSWORD[$RCELL]} | grep -v OK)"
    > PULL_OPENSTACK_CONFIGURATION_NOVA_COMPUTE_HOSTNAMES[$CELL]="$(oc run mariadb-client-7-$CELL ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >     mysql -rsh ${SOURCE_MARIADB_IP[$RCELL]} -uroot -p${SOURCE_DB_ROOT_PASSWORD[$RCELL]} -e \
    >     "select host from nova.services where services.binary='nova-compute' and deleted=0;")"
    > if [ "$RCELL" = "default" ]; then
    >     PULL_OPENSTACK_CONFIGURATION_NOVADB_MAPPED_CELLS="$(oc run mariadb-client-2 ${MARIADB_RUN_OVERRIDES} -q --image ${MARIADB_IMAGE} -i --rm --restart=Never -- \
    >         mysql -rsh ${SOURCE_MARIADB_IP[$RCELL]} -uroot -p${SOURCE_DB_ROOT_PASSWORD[$RCELL]} nova_api -e \
    >             'select uuid,name,transport_url,database_connection,disabled from cell_mappings;')"
    >     PULL_OPENSTACK_CONFIGURATION_NOVAMANAGE_CELL_MAPPINGS="$($CONTROLLER1_SSH sudo podman exec -it nova_conductor nova-manage cell_v2 list_cells)"
    > fi
    > EOF
    > done
    $ chmod 0600 ~/.source_cloud_exported_variables*
    Copy to Clipboard Toggle word wrap
    1
    如果在 RHOSP 部署中运行 neutron-sriov-nic-agent 代理,获取用于数据平面的配置。

后续步骤

之后,在 data plane 采用后检查过程中,需要此配置和导出的值。关闭 RHOSP control plane 服务后,如果任何导出的值丢失,重新运行 export 命令会失败,因为 control plane 服务不再在源云上运行,且无法检索数据。为了避免数据丢失,请在关闭 control plane 服务前保留环境文件中的导出值。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat