#22.1.X版本升级

YashanDB22.1.X版本数据库的升级操作与22.2.X及以后的版本存在差异,即将22.1.X版本数据库称为特殊版本数据库,特殊版本数据库须通过yasboot工具进行离线升级。

本文将以22.1.5.3版本升级到23.1.1.0版本为例介绍特殊数据库的升级方式。

# 升级注意事项

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

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

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

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

  5. 升级未成功,且暂时无法解决时,请运行升级回退,检查数据库正常后开放用户业务。

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

  7. 如果进程是以yasdb open(不带-D参数)方式启动,请关闭yasdb进程,使用yasdb open -D YASDB_DATA启动(不带-D,托管时候会查不到进程)。

  8. 如果是主备部署,请检查备节点的config/yasdb.ini文件中是否有CONTROL_FILES配置参数;如果主节点的配置文件中有,而备节点没有,请在备节点配置文件yasdb.ini中增加CONTROL_FILES配置参数。

    CONTROL_FILES = ('?/data/ctrl1', '?/data/ctrl2', '?/data/ctrl3')
    

# 升级前准备

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状态,可通过如下命令检查数据库实例状态:

export YASDB_HOME=旧版本yashandb的安装的目录
export LD_LIBRARY_PATH=${YASDB_HOME}/lib

${YASDB_HOME}/bin/yasql sys/yasdb_123@192.168.1.2:1688
YashanDB SQL Release 22.1.5.3 x86_64

Connected to:
YashanDB Server Release 22.1.5.3 x86_64 - X86 64bit Linux

SQL> SELECT * FROM V$INSTANCE;

STATUS            VERSION                                                          STARTUP_TIME                                                     
----------------- ---------------------------------------------------------------- ---------------------------------------------------------------- 
OPEN              Release 22.1.5.3 x86_64                                          2023-08-02 15:03:52.174680   

其中:

-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

# 升级步骤

# 1.上传新版本安装包

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

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

  • 解压安装包。

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

# 2.生成主机配置文件

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

$ cd ~/tmp_upgrade

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

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

其中:

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

Note:

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

命令执行结果如下所示:

#出现192.168.1.2:1688这个信息可以忽略。
192.168.1.2
  192.168.1.2:1688 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/yashandb 
----------+-------+-----------+-----------+--------------------+--------------------+---------------------------------------

# 3.部署主机

可通过执行如下命令部署新版本数据库:

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

其中:

-i, --install-pkg  软件包文件本地路径,这里指定的是新版数据库软件包的存放路径
-t, --toml 需要主机配置文件如hosts.toml,这里指定的是新生成的hosts.toml路径。

# 4.生成托管模板文件

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

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

其中:

-t, --type 托管集群的类型,SE表示单机,DE表示分布式

# 5.修改托管模板文件

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

cluster = "tt"  			--修改成步骤4中使用的name
sys_password = "yasdb_123"  --db的sys用户的密码
yas_type = "SE"  			--不修改

[primary_config]
  manage_ip = "127.0.0.1"  								--主节点ip
  yasdb_home = "/opt/yasom/yashandb/tt"					--主节点的yasdb_home目录
  node_path = "/opt/yasom/yashandb/data/tt/db-1-1"		--主节点的yasdb_data目录
  node_id = "1-1:1"										--主节点的nodeid

[[standby_config]]										--如果有备节点,按照主节点的示例修改,没有就删除掉
  manage_ip = "127.0.0.1"
  yasdb_home = "/opt/yasom/yashandb/tt"
  node_path = "/opt/yasom/yashandb/data/tt/db-1-2"
  node_id = "1-2:1"

[[standby_config]]
  manage_ip = "127.0.0.1"
  yasdb_home = "/opt/yasom/yashandb/tt"
  node_path = "/opt/yasom/yashandb/data/tt/db-1-3"
  node_id = "1-3:1"

# 6.执行托管命令

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

$ ./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.1.5.3

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  | 12620 | open            | normal          | primary       | 0.0.0.0:1688   | /home/yashan/yashandb/yasdb_data 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------+--------------------------------
Check success
Are you sure you to add yasdb yashandb to yasom[yes/no]: 

如果显示了被托管的db的版本号,pid等属性,则可以输入yes进行下一步操作,否则输入no去检查托管的配置文件修改是否正确:

Are you sure you to add yasdb yashandb to yasom[yes/no]: yes
 type | uuid             | name             | hostid | index    | status  | return_code | progress | cost 
----------------------------------------------------------------------------------------------------------
 task | 69712048f404e72e | JoinYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | -    
------+------------------+------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS

# 7.修改nodeid的格式

由于22.1.5.3版本中nodeid格式是1-1-1,而23.1.1.0版本nodeid格式是1-1:1

故在升级前需要手动修改一下所有节点的yasdb.ini中nodeid和ARCHIVE_DEST_1字段;将nodeid的格式为23.1.1.0的格式,即将最后一个-修改成:

# 8.数据库升级

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

$ cd ~/tmp_upgrade
  • 查看当前数据库版本

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

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

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

    $ ./bin/yasboot cluster upgrade --cluster yashandb
    

    其中:

    --cluster 集群名称
    --package 升级软件包的绝对路径
    

    执行结果:

     type  | uuid             | name                    | hostid   | index                     | status  | return_code | progress | cost 
    -------------------------------------------------------------------------------------------------------------------------------------
     task  | 06bb9ce85bfc3c5f | UpgradeYasdbCluster     | -        | yashandb                  | SUCCESS | 0           | 100      | -    
    task completed, status: SUCCESS
    
  • 查看当前数据库版本

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

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

# 9.升级后注意事项

  1. 整个升级流程并不会修改主机的环境变量,如YASDB_HOME YASDB_DATA LD_LIBRARY_PATH PATH,如果之前配置过环境变量,请先清除之前的环境变量信息并自行修改新版本数据库的环境变量。
  2. 如果升级前配置了开机自启动,升级完成后也需要修改/etc/rc.local文件,将路径更换为升级后的YASDB_HOME路径。

Caution:

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

# 升级回退

只有升级失败才允许回退,如升级成功执行回退会返回错误:

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

Note:

升级失败需要回退时,需要将nodeid格式改回22.1.5.3的1-1-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  集群名称