#22.1.X版本升级
YashanDB22.1.X版本数据库的升级操作与22.2.X及以后的版本存在差异,即将22.1.X版本数据库称为特殊版本数据库,特殊版本数据库须通过yasboot工具进行离线升级。
本文将以22.1.5.3版本升级到23.1.1.0版本为例介绍特殊数据库的升级方式。
# 升级注意事项
离线升级要求当前数据库无新业务数据产生,请通过应用手段停止用户业务。
由于升级中不会备份用户表空间,请在升级前执行一次全量备份。
请完成升级前准备要求的各项工作后再运行升级。
升级成功后,请先检查数据库正常再开放用户业务。
升级未成功,且暂时无法解决时,请运行升级回退,检查数据库正常后开放用户业务。
升级过程须使用YashanDB内置的yasboot工具,该工具各命令选项含义及说明请参考yasboot章节。
如果进程是以yasdb open(不带-D参数)方式启动,请关闭yasdb进程,使用yasdb open -D YASDB_DATA启动(不带-D,托管时候会查不到进程)。
如果是主备部署,请检查备节点的
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.升级后注意事项
- 整个升级流程并不会修改主机的环境变量,如
YASDB_HOME
YASDB_DATA
LD_LIBRARY_PATH
PATH
,如果之前配置过环境变量,请先清除之前的环境变量信息并自行修改新版本数据库的环境变量。 - 如果升级前配置了开机自启动,升级完成后也需要修改/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 集群名称