1. Engine 升级

Hengshi Sense 3.0以及以上版本内置引擎默认安装GP6。GP6相对于GP5具有查询性能高、不停机扩容、支持jsonb类型等特点。

在版本升级时,引擎不会跟随升级。所以当从低版本升级到3.0及以上版本时,引擎不会自动升级,而是保留以前的版本GP5。这种情况下如果要升级到GP6,需要按照下面手工操作流程。

1.1. 升级前环境准备

升级前请确保环境满足以下要求:

  • 升级过程中引擎所有机器,包含 Master和Segment。每台机器都要预留当前节点所占数据容量的2倍空闲空间,备份原有数据需要1倍空间,另1倍空间用于GP6存储。使用下面命令查看当前节点数据大小。
     HENGSHI_HOME=/opt/hengshi
     du ${HENGSHI_HOME}/engine-cluster -sch
    
  • 升级时Segment的数量需要与升级前的节点数相同。
  • 由于升级过程会依赖SSH,所以最好配置SSH免密登录。

1.2. 引擎升级流程

以下操作在引擎的Master机器执行,在gpbackup阶段,所有Segment会并行将数据写入其所在机器的backup-dir参数指定的本机目录。在gprestore也会使所有Segment在其所在机器上找备份的数据文件进行加载。

1.2.1. 备份GP5数据

  1. 停掉所有服务,只启动引擎。
     HENGSHI_HOME=/opt/hengshi
     ${HENGSHI_HOME}/bin/hengshi-sense-bin stop all
     ${HENGSHI_HOME}/bin/hengshi-sense-bin start engine
    
  2. 创建安装包解压目录,如hengshi-[version]。
  3. 下载迁移工具。
     cd hengshi-[version]
     wget http://download.hengshi.io/3rd/pivotal_greenplum_backup_restore-1.15.0-1.tar.gz
    
  4. 更新引擎相关配置。
     HENGSHI_HOME=/opt/hengshi
     cd ${HENGSHI_HOME}
     test -f conf/hengshi-sense-env.sh || cp conf/hengshi-sense-env.sh.sample conf/hengshi-sense-env.sh
     set_kv_config() {
         local config_file="$1"
         local param="$2"
         local val="$3"
         # edit param=val if exist or insert new param=val
         grep -E "^\s*${param}\s*=" "${config_file}" > /dev/null \
                     || sed -i "$ a ${param}=${val}" "${config_file}"
     }
     set_kv_config conf/hengshi-sense-env.sh HS_PG_DB postgres
     set_kv_config conf/hengshi-sense-env.sh HS_PG_USR postgres
     set_kv_config conf/hengshi-sense-env.sh HS_PG_PWD postgres
     set_kv_config conf/hengshi-sense-env.sh HS_ENGINE_DB postgres
     set_kv_config conf/hengshi-sense-env.sh HS_ENGINE_USR postgres
     set_kv_config conf/hengshi-sense-env.sh HS_ENGINE_PWD postgres
    
  5. 导出GP5数据,选定存放导出数据目录如: ${HENGSHI_HOME}/gpbackup, 该目录下的空闲空间大小必须大于当前数据大小。

     export HENGSHI_HOME=/opt/hengshi
     cd hengshi-[version]
     tar -xf pivotal_greenplum_backup_restore-1.15.0-1.tar.gz -C ${HENGSHI_HOME}/lib/gpdb/gpdb/ #必须执行,解压到当前的GP5软链接目录
     bash #launch a new bash
     source ${HENGSHI_HOME}/engine-cluster/export-cluster.sh
     psql postgres -A -t -c "select 'drop view '|| viewname || ' cascade;' from pg_catalog.pg_views where schemaname NOT IN ('pg_catalog', 'information_schema', 'gp_toolkit') order by schemaname, viewname" > drop_views.sql
     cat drop_views.sql
     psql postgres -f drop_views.sql
     psql postgres -c "drop function if exists public.safe_to_number(text)"
     # backup
     gpbackup --dbname postgres --backup-dir ${HENGSHI_HOME}/gpbackup --compression-level 9
     exit #exit new bash
    

说明:
示例中库名为postgres,操作时根据实际情况指定。如果有多个库,每个库都需要单独备份,并指定不同的--backup-dir
--compression-level 的值是1-9。 值越大, 压缩比例越高, 耗时也越长。自测时发现当level为6时,100G耗时约1h,备份数据的大小将近 30G,该结果仅供参考。
命令gpbackup的其他参数可以参考gpbackup

1.2.2. 启动GP6

  1. 停掉GP5,启动GP6。

     HENGSHI_HOME=/opt/hengshi
     cd hengshi-[version]
     cp -r lib/gpdb-6* ${HENGSHI_HOME}/lib
     cd ${HENGSHI_HOME}
     bin/hengshi-sense-bin stop engine
     mv engine-cluster engine-cluster.gp5.bak
     gpdb_name=$(ls ${HENGSHI_HOME}/lib/gpdb-* -dvr --color=never| head -n 1)
     gpdb_name=${gpdb_name##*/}
     cd ${HENGSHI_HOME}/lib
     rm -f gpdb
     ln -s ${gpdb_name} gpdb
     cd ${HENGSHI_HOME}
     bin/hengshi-sense-bin init engine
     bin/hengshi-sense-bin start engine
    
  2. GP6启动后,导入引擎数据。

     export HENGSHI_HOME=/opt/hengshi
     cd hengshi-[version]
     tar -xf pivotal_greenplum_backup_restore-1.15.0-1.tar.gz -C ${HENGSHI_HOME}/lib/gpdb/gpdb/ #必须执行,解压到当前的GP6软链接目录
     bash #launch a new bash
     source ${HENGSHI_HOME}/engine-cluster/export-cluster.sh
     psql postgres -c 'create role dwguest'
     # find all timestamp (14chars)
     find ${HENGSHI_HOME}/gpbackup/SegDataDir-1/backups/ -maxdepth 2 | sort
     # restore with a timestamp
     gprestore --backup-dir ${HENGSHI_HOME}/gpbackup --timestamp xxxxxxxxxxxxxx
     exit #exit new bash
    

    说明:

    • 如果导入出现问题,需要重新导入,则可以执行下面的步骤,重新初始化并启动。
        cd ${HENGSHI_HOME}
        bin/hengshi-sense-bin stop engine
        rm -rf engine-cluster
        bin/hengshi-sense-bin init engine
        bin/hengshi-sense-bin start engine
      
    • 使用该方式导入引擎数据时不会导入全局对象,包括Tablespaces、Databases、Database-wide configuration parameter settings (GUCs)、Resource group definitions、Resource queue definitions、Roles、GRANT assignments of roles to databases,参考Parallel Backup with gpbackup and gprestore。因此可能会出现角色或者队列不存在的情况,参考下面的方法进行解决。
      • 指定--with-globals选项, 但可能会提示角色或者队列等已经存在等问题, 需要导入前检查并删除或者通过指定--on-error-continue的方式忽略, 但选项会忽略所有的错误, 请谨慎使用。
      • 手动创建, 打开 ${HENGSHI_HOME}/gpbackup/SegDataDir-1/backups/YYYYMMDD/YYYYMMDDHHMMSS/gpbackup_YYYYMMDDHHMMSS_metadata.sql 文件, 查看创建了哪些角色、队列等, 然后手动执行, 存在的角色、队列可以忽略创建。如果有角色、队列等有授权操作, 也需执行相应的授权。请仔细检查不要遗漏。
    • 如果提示safe_to_number不存在,则手动创建一个。
      CREATE OR REPLACE FUNCTION SAFE_TO_NUMBER(text)
      RETURNS numeric IMMUTABLE STRICT AS
      $$
      BEGIN
       RETURN $1::numeric;
      EXCEPTION WHEN OTHERS THEN
       RETURN NULL;
      END
      $$ LANGUAGE plpgsql;
      
    • 如果数据库名不存在, 可以指定--create-db 选项自动创建数据库。如果已经存在,则不要指定,否则会报错。
    • 可以指定 --metadata-only只导入meta数据, 包括建表, 但不包含数据。
    • 可以指定 --data-only只导入数据, 不包括建表。
    • 根据自测结果, 在compression-level 为 6 的情况下, 耗时基本上是备份的 1.5 倍。
    • 命令gprestore的相关说明请参考链接
  3. 升级成功后清理数据。

     HENGSHI_HOME=/opt/hengshi
     cd ${HENGSHI_HOME}
     rm -rf engine-cluster.gp5.bak
     rm -rf lib/gpdb-5*
    

1.3. 升级失败回滚

当升级过程出现问题时,请按下面指导进行回滚。

  1. 停掉所有HENGSHI SENSE服务。

     HENGSHI_HOME=/opt/hengshi
     ${HENGSHI_HOME}/bin/hengshi-sense-bin stop all
    
  2. 删除GP6数据目录。

     HENGSHI_HOME=/opt/hengshi
     cd ${HENGSHI_HOME}
     test -d engine-cluster.gp5.bak && rm -rf engine-cluster
    
  3. 恢复GP5相关引擎数据。

     HENGSHI_HOME=/opt/hengshi
     cd ${HENGSHI_HOME}
     mv engine-cluster.gp5.bak engine-cluster
     gpdb_name=$(ls ${HENGSHI_HOME}/lib/gpdb-5* -dvr --color=never| head -n 1)
     gpdb_name=${gpdb_name##*/}
     rm -f ${HENGSHI_HOME}/lib/gpdb
     cd ${HENGSHI_HOME}/lib
     ln -sf ${gpdb_name} ${HENGSHI_HOME}/lib/gpdb
    

results matching ""

    No results matching ""

    引擎高可用