#离线升级

YashanDB支持通过yasboot工具离线升级已经部署的数据库,将数据库二进制文件升级到新版本。

离线升级即通过yasboot工具在停机状态下升级数据库,离线升级适用于将22.2.X版本的单机及分布式数据库升级至更高版本。

本文将以22.2.4.0版本升级到22.2.7.0版本为例介绍数据库的离线升级方式。

# 升级注意事项

  1. 离线升级要求当前数据库无新业务数据产生,请通过应用手段停止用户业务。

  2. 由于升级中不会备份用户表空间,请在升级前执行一次全量备份。

  3. 请完成升级前准备要求的各项工作后再运行升级。

  4. 升级成功后,检查数据库正常再开放用户业务。

  5. 升级未成功,请运行升级回退。如果回退仍不成功,请联系YashanDB技术支持解决。

  6. 升级过程须使用YashanDB内置的yasboot工具,该工具各命令选项含义及说明请参考yasboot章节。

# 升级前准备

1.获得新版本安装包

请与YashanDB技术支持确认当前在用数据库版本是否可直接升级到该新版本。

2.确认临时目录的权限及空间足够

离线升级中会创建一个临时目录(${旧版本的安装目录}/upgrade_tmp/backup)作为备份目录,该目录包含解压软件包文件,和当前数据库ctrl/system/undo/redo等文件的备份(主备环境中各节点分别备份至本机),请确保升级操作用户拥有创建该目录的权限,且拥有足够的存储空间。

3.检查SSH服务

升级需用到SSH和sftp服务,请检查各节点SSH服务是否已开启并允许升级操作用户远程登录。

  • 可通过如下命令检查SSH服务是否已开启:

    $ systemctl status sshd.service
    ● sshd.service - OpenSSH server daemon
       Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2023-04-26 14:32:52 CST; 3 months 6 days ago
         Docs: man:sshd(8)
               man:sshd_config(5)
     Main PID: 6372 (sshd)
       CGroup: /system.slice/sshd.service
               └─6372 /usr/sbin/sshd -D
    
  • 可通过如下命令检查升级中是否能操作用户远程登录:

    使用当前用户SSH连接到当前主机,SSH可以使用密码或者密钥免密:

    $ ssh 用户名@ip -p ssh端口
    

    按照命令提示输入密码,查看是否能够成功连接上SSH主机。

4.检查数据库实例状态

升级前请确保数据库实例(包括主备环境中的所有节点)为OPEN状态,可通过如下命令检查数据库实例状态:

#请将password@ip:port修改成设置的sys密码及对应ip地址:端口号
$ yasboot sql -d sys/password@ip:port -s 'select status from v$instance;'

STATUS            
----------------- 
OPEN             

其中:

-d, --dsn  提供以一串字符串执行账号密码输入的方式,例如 'username/password@127.0.0.1:1688'
-s, --sql  执行行单条sql命令并且退出

5.检查monitor进程

检查各节点机器是否有monitor进程在运行,如有则执行kill -9 monit命令终止该进程。

Note:

此步骤需要停止的monitor进程是安装YCM或者yasboot携带的,而非主机上本身存在的。

$ ps -ef | grep monit

6.全量checkpoint

等待主机redo全部同步到备机,然后在各节点执行全量checkpoint,以加快升级速度。

ALTER SYSTEM CHECKPOINT;

# 升级步骤

除特殊说明,以下步骤均在yasboot工具所在的环境(已存在hosts.toml文件的机器)上操作,且命令中的路径、用户、密码等需更换为实际值。

# 1.执行全量备份

YashanDB提供两种备份的方式,分别是通过SQL命令和使用yasrman工具,如需了解更多有关备份的语法及说明请参考备份恢复章节。

  • SQL命令方式:

    SQL命令执行全量备份须在实例节点上,可通过执行如下语句执行全量备份:

    --SQL命令方式(需在实例节点上操作)
    BACKUP DATABASE FULL FORMAT '/home/yashan/full_20221123' TAG 'full' PARALLELISM 3;
    
  • yasrman工具方式:

    使用yasrman工具进行全量备份须确保在yasrman工具所在环境操作,可通过执行如下命令执行全量备份:

    #请将password@ip:port修改成设置的sys密码及对应ip地址:端口号
    $ yasrman sys/password@ip:port -c "backup cluster tag 'full_1' format 'full_bak_1'" -D /home/yashan/catalog
    

# 2.上传新版本安装包

  • 创建一个空目录,该目录将作为升级安装包的临时存放路径。

    $ mkdir ~/tmp_upgrade
    
  • 将新版安装包上传至该目录中。

  • 解压安装包。

    $ cd ~/tmp_upgrade
    $ tar zxf yashandb-22.2.7.0-linux-x86_64.tar.gz
    

# 3.用新版OM托管数据库

  • 终止yasom和yasagent进程

    本步骤仅适用于使用OM安装的数据库,如升级前的数据库使用非OM方式进行安装请执行生成主机配置文件步骤。

    本步骤须在升级前数据库的安装包存放路径中(即存放hosts.toml文件的目录)执行,可通过如下命令进入该目录:

    $ cd /home/yashan/install
    

    可通过执行如下语句终止yasom和yasgant进程:

    $ ./bin/yasboot process yasom stop -c yashandb -t hosts.toml && yasboot process yasagent stop -c yashandb -t hosts.toml
    stop yasom successfully
    stop agent host0002 successfully
    stop agent host0001 successfully
    

    其中:

    -c, --cluster 集群名称
    -t, --toml  需要主机配置文件如hosts.toml,这里是指部署旧版本时生成的hosts.toml文件
    

  • 生成主机配置文件

    本步骤仅适用于使用非OM安装方式的数据库,使用OM安装的数据库无须执行此步骤。

    本步骤须在升级安装包的临时存放路径中执行,可通过如下命令进入该目录:

    $ cd ~/tmp_upgrade
    

    可通过执行如下命令生成主机配置文件:

    $ ./bin/yasboot package config gen --cluster yashandb -u 主机用户名 -p 主机密码 --ip 主机的ip1,ip2 --install-path 安装目录 --yas-type SE --db 2
    

    其中:

    -c,--cluster	生成的集群名称,这里可以任意取一个名称
    -u,--username	主机ssh用户名
    -p,--password	主机ssh登录密码
    -N,--no-password   如果用户配置了免密,请使用这个参数替代-p参数
    --ip			部署的ip地址,如果涉及到多个主机,格式为:ip1,ip2,ip3
    --port			主机ssh连接端口
    -i, --install-path	数据库安装路径(YASDB_HOME目录),这里指定的路径是新版本的YASDB_HOME目录,必须要是空目录
    -t, --yas-type		数据库部署的架构类型:
    * SE:单机
    * DE:分布式
    --db             单机db组及节点部署的节点规模,请根据实际主备情况调整此参数
    

    Note:

    如果涉及到多个主机,多个主机的用户名及密码必须一致。

    命令执行结果如下所示:

    #出现192.168.1.2:1688/192.168.1.3:1688 is already used这个信息可以忽略。
    192.168.1.2
      192.168.1.2:1688 is already used
      192.168.1.2:1689 is already used
    192.168.1.3
      192.168.1.3:1688 is already used
      192.168.1.3:1689 is already used
     hostid   | group | node_type | node_name | listen_addr        | replication_addr   | data_path                                              
    ---------------------------------------------------------------------------------------------------------------------------------------------
     host0001 | dbg1  | db        | 1-1       | 192.168.1.2:1688     | 192.168.1.2:1689     | /home/yashan/yasdb_home/yashandb/data/yashan 
    ----------+-------+-----------+-----------+--------------------+--------------------+--------------------------------------------------------
     host0002 | dbg1  | db        | 1-2       | 192.168.1.3:1688 | 192.168.1.3:1689       | /home/yashan/yasdb_home/yashandb/data/yashan
    ----------+-------+-----------+-----------+--------------------+--------------------+--------------------------------------------------------
    
  • 拉起新版本的OM

    本步骤须在升级安装包的临时存放路径中执行,可通过如下命令进入该目录:

    $ cd ~/tmp_upgrade
    

    可通过执行如下命令安装新版本数据库并拉起新OM:

    $ ./bin/yasboot package install -i ~/tmp_upgrade/yashandb-22.2.7.0-linux-x86_64.tar.gz -t ~/install/hosts.toml -f
    checking install package...
    install version: yashandb 22.2.7.0
    host0001 100% [====================================================================]    3s
    host0002 100% [====================================================================]    3s
    update host to yasom...
    

    其中:

    -i, --install-pkg  软件包文件本地路径,这里指的是新版数据库软件包的存放路径
    -t, --toml 需要主机配置文件如hosts.toml。如旧版数据库使用OM安装,这里须指定旧版数据库的hosts.toml路径;如旧版数据库使用非OM安装,这里须指定新生成的hosts.toml路径。
    -f, --force 忽略错误并强制安装。如果旧版本是使用OM安装的,会报错'yashandb.env is already exist',所以需要加-f跳过错误
    
  • 生成托管模板文件

    可通过如下命令于目录中生成托管模板文件:

    $ ./bin/yasboot package config join-demo -t SE
    

    其中:

    -t, --type 托管集群的类型,SE表示单机,DE表示分布式
    
  • 修改托管模板文件

    如下为托管模板文件各参数描述,请根据实际情况修改模板文件中的参数值:

    cluster = "yashandb"  			--集群名称
    sys_password = "yasdb_123"  --数据库sys用户的密码
    yas_type = "SE"  			--不修改
    
    [primary_config]
      manage_ip = "127.0.0.1"  								--主节点ip
      yasdb_home = "/opt/yasom/yashandb/yashandb"					--主节点的YASDB_HOME目录(旧版本)
      node_path = "/opt/yasom/yashandb/data/yashandb/db-1-1"		--主节点的YASDB_DATA目录(旧版本)
      node_id = "1-1:1"										--主节点的nodeid
    
    [[standby_config]]										--备节点按照主节点的示例修改
      manage_ip = "127.0.0.1"
      yasdb_home = "/opt/yasom/yashandb/yashandb"
      node_path = "/opt/yasom/yashandb/data/yashandb/db-1-2"
      node_id = "1-2:1"
    
    [[standby_config]]                    --备节点按照主节点的示例修改,没有就删除
      manage_ip = "127.0.0.1"
      yasdb_home = "/opt/yasom/yashandb/yashandb"
      node_path = "/opt/yasom/yashandb/data/yashandb/db-1-3"
      node_id = "1-3:1"
    
  • 执行托管命令

    可以通过执行如下命令进行托管操作:

    $ ./bin/yasboot cluster join -t SE --config join_demo.toml
    

    其中:

    -t, --type 托管集群的类型,SE表示单机,DE表示分布式
    -c, --config 托管配置文件
    

    命令执行结果如下所示:

    the cluster status is as follow:
    |key         |value
    |------------+------
    |clusterName |yashandb
    |version     |22.2.4.0
    
    the cluster status is as follow:
     hostid   | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address     | data_path                                                   
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     host0001 | db        | 1-1:1  | 74172 | open            | normal          | primary       | 192.168.1.2:1688   | /home/yashan/yashandb_home/yashandb/data/yashandb/db-1-1 
    ----------+-----------+--------+-------+-----------------+-----------------+---------------+--------------------+-------------------------------------------------------------
     host0002 | db        | 1-2:2  | 71563 | open            | normal          | standby       | 192.168.1.3:1688   | /home/yashan/yashandb_home/yashandb/data/yashandb/db-1-2 
    ----------+-----------+--------+-------+-----------------+-----------------+---------------+--------------------+-------------------------------------------------------------
    Check success
    Are you sure you to add yasdb yashandb to yasom[yes/no]: yes
     type | uuid             | name             | hostid | index    | status  | return_code | progress | cost 
    ----------------------------------------------------------------------------------------------------------
     task | 344cf11df1508ace | JoinYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | -    
    ------+------------------+------------------+--------+----------+---------+-------------+----------+------
    task completed, status: SUCCESS
    

# 4.数据库升级

本步骤须在升级安装包的临时存放路径中执行,可通过如下命令进入该目录:

$ cd ~/tmp_upgrade

Caution:

数据库升级过程中出现任何错误,请运行升级回退恢复环境,升级成功则无法回退。

  • 查看当前数据库版本

    可通过执行如下命令查看当前数据库版本:

    # 版本是22.2.4.0
    $ ./bin/yasboot sql -d sys/password@192.168.1.2:1688 -s 'select version from v$instance;'
    
    VERSION                                                          
    ---------------------------------------------------------------- 
    Release 22.2.4.0 x86_64      
    
  • 数据库升级

    可通过执行如下命令升级数据库:

    $ ./bin/yasboot cluster upgrade -c yashandb --package /home/yashan/tmp_upgrade/yashandb-22.2.7.0-linux-x86_64.tar.gz 
     type | uuid             | name                | hostid | index    | status  | return_code | progress | cost 
    -------------------------------------------------------------------------------------------------------------
     task | 34a23c4487c9bc21 | UpgradeYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | -    
    ------+------------------+---------------------+--------+----------+---------+-------------+----------+------
    task completed, status: SUCCESS
    

    其中:

    -c, --cluster 集群名称
    --package 升级软件包的绝对路径
    --keep-primary 让升级前的主节点在升级之后依旧是主节点,这个参数会增加一次主节点切换,可以根据需求选择是否使用
    
  • 查看当前数据库版本

    可通过执行如下命令查看当前数据库版本:

    # 版本是22.2.7.0
    $ ./bin/yasboot sql -d sys/password@192.168.1.2:1688 -s 'select version from v$instance;'
    
    VERSION                                                          
    ---------------------------------------------------------------- 
    Release 22.2.7.0 x86_64                                                    
    

# 5.升级后注意事项

整个升级流程并不会修改主机的环境变量,如YASDB_HOME YASDB_DATA LD_LIBRARY_PATH PATH

非OM安装的旧版本数据库升级后会根据新生成的主机配置文件于指定目录中创建YASDB_HOME目录。

OM安装的旧版本数据库会于之前的YASDB_HOME目录中生成新版本文件目录。

如果之前配置过环境变量,请先清除之前的环境变量信息并自行修改新版本数据库的环境变量。

Caution:

假如之前配置过环境变量,升级后没有修改环境变量,直接使用yasdb/yasql等命令会仍然指向旧版本数据库。

# 升级回退

数据库升级过程中可能因为命令错误、配置文件错误及版本错误等原因导致数据库升级失败,此时请运行升级回退恢复升级前环境。

Warn

  1. 只有升级失败才允许回退。
  2. 离线升级回退的过程中会有数据库关闭的过程。
  3. 假如升级失败,且升级回退失败,请联系YashanDB技术支持解决。

离线升级成功时执行升级回退会报错:

$ ./bin/yasboot cluster rollback -c yashandb
yashandb can't rollback because upgrade result is success

请执行如下命令进行离线升级回退:

$ ./bin/yasboot cluster rollback -c yashandb
 type | uuid             | name                 | hostid | index    | status  | return_code | progress | cost 
--------------------------------------------------------------------------------------------------------------
 task | eea11e37355eb9e5 | RollbackYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | -    
------+------------------+----------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS