#离线升级

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

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

# 升级注意事项

  1. 离线升级要求当前数据库无新业务数据产生,请通过应用手段停止用户业务。
  2. 由于升级中不会备份用户表空间,请在升级前执行一次全量备份。
  3. 请完成升级前准备要求的各项工作后再运行升级。
  4. 升级成功后,检查数据库正常再开放用户业务。
  5. 升级未成功,请运行升级回退。如果回退仍不成功,请联系YashanDB技术支持解决。
  6. 升级过程须使用YashanDB内置的yasboot工具,该工具各命令选项含义及说明请参考yasboot章节。
  7. 对于未通过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进程为YashanDB相关产品用户下的进程。

$ ps -ef | grep monit | grep yashan

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-23.1.0.100-linux-x86_64.tar.gz
    

# 3.升级yasom/yasagent

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

$ cd ~/tmp_upgrade
  • 查看yasom/yasagent版本

    可通过执行如下命令查看升级前的yasom/yasagent版本:

    # 版本是22.2.3.11
    $ ps -ef | grep -E "yasom|yasagent" | grep -v grep
    yashan 102280      1  0 16:24 ?        00:00:00 /home/yashan/yashandb_home/yashandb/22.2.3.11/bin/yasagent --init -c yashandb -l 192.168.0.2:1676 --host-id host0001 -k 4c2f20b34e9c0c2d -d
    yashan 102323      1  0 16:24 ?        00:00:00 /home/yashan/yashandb_home/yashandb/22.2.3.11/bin/yasom --init -c yashandb -l 192.168.0.2:1675 -k 4c2f20b34e9c0c2d -d
    
  • 升级yasom/yasagent

    可通过执行如下命令对yasom/yasagent进行升级:

    $ ./bin/yasboot package upgrade -t /home/yashan/install/hosts.toml -p yashandb-23.1.0.100.tar.gz
    upgrade package...
    install version: yashandb 23.1.0.100
    host0001 100% [====================================================================]    3s
    upgrade host to yasom...
    

    简单参数介绍:

    -t, --toml  需要主机配置文件如hosts.toml,这里是指部署旧版本时生成的hosts.toml文件
    -p, --package  升级软件包的绝对路径
    
  • 查看yasom/yasagent版本

    可通过执行如下命令查看升级后的yasom/yasagent版本:

    # 版本是23.1.0.100
    $ ps -ef | grep -E "yasom|yasagent" | grep -v grep
    yashan 103607      1  0 16:32 ?        00:00:00 /home/yashan/yashandb_home/yashandb/23.1.0.100/bin/yasagent -c yashandb -d
    yashan 103650      1  0 16:32 ?        00:00:00 /home/yashan/yashandb_home/yashandb/23.1.0.100/bin/yasom -c yashandb -d
    

# 4.升级数据库

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

$ cd ~/tmp_upgrade

Caution:

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

  • 查看数据库版本

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

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

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

    $ ./bin/yasboot cluster upgrade --cluster yashandb
     type | uuid             | name                | hostid | index    | status  | return_code | progress | cost 
    -------------------------------------------------------------------------------------------------------------
     task | 9d0041edd55f7d4f | UpgradeYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | 23   
    ------+------------------+---------------------+--------+----------+---------+-------------+----------+------
    task completed, status: SUCCESS
    

    Note

    升级过程中将对旧版本进行备份,位于各个主机的安装目录下upgrade_tmp/backup下。

  • 查看数据库版本

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

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

# 5.升级后注意事项

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

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

Caution:

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

# 升级回退

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

Warn:

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

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

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

# 1.回退数据库

升级失败时执行升级回退预期结果:

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

其中:

-c, --cluster 集群名称

# 2.回退yasom/yasagent

$ ./bin/yasboot package rollback -c yashandb -t /home/yashan/install/hosts.toml 
rollback package...
host0001 100% [====================================================================]    2s

其中:

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