升级
Contents
升级#
升级过程对服务的影响:
如果创建的表是单副本,用户可以选择:
通过
pre-upgrade
和post-upgrade
,升级前自动添加副本,升级结束会自动删除新添加的副本。这样行为和多副本保持一致如果允许单副本表在升级过程中不可用,可以在
pre-upgrade
的时候添加--allow_single_replica
选项,在内存紧张的环境下,可以避免添加副本可能造成的OOM
升级过程中,会把待升级的tablet上的leader分片迁移到其它tablets上,升级结束会迁移回来。迁移过程中,写请求会有少量的数据丢失,如果不能容忍少量写丢失,需要在升级过程中停掉写操作。
Note
下文均使用常规后台进程模式启动组件,如果想要使守护进程模式启动组件,请使用bash bin/start.sh start <component> mon
的方式启动。守护进程模式中,bin/<component>.pid
将是mon进程的pid,bin/<component>.pid.child
为组件真实的pid。mon进程并不是系统服务,如果mon进程意外退出,将无法继续守护。
升级nameserver#
停止nameserver
bash bin/start.sh stop nameserver
备份旧版本bin目录
替换新版本bin
启动新版本nameserver
bash bin/start.sh start nameserver
对剩余nameserver重复以上步骤
升级tablet#
Important
如果有多个 tablet,请务必对每一个 tablet 进行顺序操作,不要同时对多个 tablet 进行升级操作。即对一个 tablet 完成升级,结果确认以后,再进行下一个 tablet 的升级操作。否则会导致集群状态异常。如果误操作导致集群异常,可以尝试使用运维工具的 recoverdata
进行恢复。
升级前准备
pre-upgrade
:为了避免对线上服务的影响,需要在升级tablet前,进行pre-upgrade
操作,把该tablet上的leader分片迁移到其它tablets上(详细命令说明可以参考:OpenMLDB运维工具)python tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=172.24.4.40:30481 --zk_root_path=/openmldb --cmd=pre-upgrade --endpoints=127.0.0.1:10921
如果允许单副本表在升级过程中不可用,可以添加
--allow_single_replica
来避免添加新的副本。停止tablet
bash bin/start.sh stop tablet
备份旧版本bin目录
替换新版本bin
启动新版本tablet
bash bin/start.sh start tablet
如果auto_failover处于关闭状态,需要手动执行
recoverdata
来恢复数据python tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=172.24.4.40:30481 --zk_root_path=/openmldb --cmd=recoverdata
升级后处理
post-upgrade
:把pre-upgrade
迁移出的leader分片迁移回该tabletpython tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=172.24.4.40:30481 --zk_root_path=/openmldb --cmd=post-upgrade --endpoints=127.0.0.1:10921
升级结果确认#
showopstatus
命令查看是否有操作为kFailed, 如果有查看日志排查原因python tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=172.24.4.40:30481 --zk_root_path=/openmldb --cmd=showopstatus --filter=kFailed
showtablestatus
查看所有表状态是否正常python tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=172.24.4.40:30481 --zk_root_path=/openmldb --cmd=showtablestatus
一个tablet节点升级完成后,对其他tablet重复上述步骤。
所有节点升级完成后恢复写操作, 执行showtablestatus
命令查看Rows
是否增加。
升级 apiserver#
停止 apiserver
bash bin/start.sh stop apiserver
备份旧版本bin目录
替换新版本bin
启动apiserver
bash bin/start.sh start apiserver
升级 taskmanager#
下载新版的OpenMLDB Spark发行版,替换老的Spark目录(即
$SPARK_HOME
指向的目录)停止 taskmanager
bash bin/start.sh stop taskmanager
备份旧版本bin和taskmanager目录
替换新版本bin和taskmanager
启动taskmanager
bash bin/start.sh start taskmanager
Yarn模式下的升级#
Yarn模式下,第一步替换Spark时,还需要注意spark.yarn.jars
和batchjob.jar.path
的配置,如果指向HDFS路径,那么HDFS路径上的包也需要更新。这种情况下,更新TaskMananger的本地$SPARK_HOME
目录不会影响到Yarn模式下的Spark。
剩下的TaskManager升级步骤和上文的步骤一致。
升级SDK#
升级Java SDK#
更新pom文件中java sdk的版本号,包括
openmldb-jdbc
和openmldb-native
升级Python SDK#
安装新版本的python sdk
pip install openmldb=={NEW_VERSION}