- 产品简介
- 快速开始
- 表设计
- 数据导入
- 数据提取
- 使用StarRocks
- 管理手册
- 参考手册
- SQL参考
- 用户账户管理
- 集群管理
- ADMIN CANCEL REPAIR
- ADMIN CHECK TABLET
- ADMIN REPAIR
- ADMIN SET CONFIG
- ADMIN SET REPLICA STATUS
- ADMIN SHOW CONFIG
- ADMIN SHOW REPLICA DISTRIBUTION
- ADMIN SHOW REPLICA STATUS
- ALTER CLUSTER
- ALTER SYSTEM
- CANCEL DECOMMISSION
- CREATE CLUSTER
- CREATE FILE
- CREATE RESOURCE GROUP
- DROP CLUSTER
- DROP FILE
- ENTER
- INSTALL PLUGIN
- LINK DATABASE
- MIGRATE DATABASE
- SHOW BACKENDS
- SHOW BROKER
- SHOW FILE
- SHOW FRONTENDS
- SHOW FULL COLUMNS
- SHOW INDEX
- SHOW MIGRATIONS
- SHOW PLUGINS
- SHOW TABLE STATUS
- UNINSTALL PLUGIN
- DDL
- ALTER DATABASE
- ALTER TABLE
- ALTER VIEW
- BACKUP
- CANCEL ALTER
- CANCEL BACKUP
- CANCEL RESTORE
- CREATE DATABASE
- CREATE INDEX
- CREATE MATERIALIZED VIEW
- CREATE REPOSITORY
- CREATE RESOURCE
- CREATE TABLE AS SELECT
- CREATE TABLE LIKE
- CREATE TABLE
- CREATE VIEW
- CREATE FUNCTION
- DROP DATABASE
- DROP INDEX
- DROP MATERIALIZED VIEW
- DROP REPOSITORY
- DROP RESOURCE
- DROP TABLE
- DROP VIEW
- DROP FUNCTION
- HLL
- RECOVER
- RESTORE
- SHOW RESOURCES
- SHOW FUNCTION
- TRUNCATE TABLE
- DML
- ALTER ROUTINE LOAD
- BROKER LOAD
- CANCEL LOAD
- DELETE
- EXPORT
- GROUP BY
- INSERT
- PAUSE ROUTINE LOAD
- RESUME ROUTINE LOAD
- CREATE ROUTINE LOAD
- SELECT
- SHOW ALTER
- SHOW BACKUP
- SHOW DATA
- SHOW DATABASES
- SHOW DELETE
- SHOW DYNAMIC PARTITION TABLES
- SHOW EXPORT
- SHOW LOAD
- SHOW PARTITIONS
- SHOW PROPERTY
- SHOW REPOSITORIES
- SHOW RESTORE
- SHOW ROUTINE LOAD
- SHOW ROUTINE LOAD TASK
- SHOW SNAPSHOT
- SHOW TABLES
- SHOW TABLET
- SHOW TRANSACTION
- SPARK LOAD
- STOP ROUTINE LOAD
- STREAM LOAD
- 数据类型
- 辅助命令
- 函数参考
- 日期函数
- convert_tz
- curdate
- current_timestamp
- curtime
- datediff
- date_add
- date_format
- date_sub
- date_trunc
- day
- dayname
- dayofmonth
- dayofweek
- dayofyear
- from_days
- from_unixtime
- hour
- minute
- month
- monthname
- now
- second
- str_to_date
- timediff
- timestampadd
- timestampdiff
- to_date
- to_days
- unix_timestamp
- utc_timestamp
- weekofyear
- year
- hours_diff
- minutes_diff
- months_diff
- seconds_diff
- weeks_diff
- years_diff
- year
- quarter
- timestamp
- time_to_sec
- str2date
- microseconds_add
- microseconds_sub
- 加密函数
- 地理位置函数
- 字符串函数
- append_trailing_char_if_absent
- ascii
- char_length
- concat
- concat_ws
- ends_with
- find_in_set
- get_json_double
- get_json_int
- get_json_string
- group_concat
- instr
- lcase
- left
- length
- locate
- lower
- lpad
- ltrim
- rtrim
- money_format
- null_or_empty
- regexp_extract
- regexp_replace
- repeat
- reverse
- right
- rpad
- split
- split_part
- starts_with
- strleft
- strright
- hex
- unhex
- substr
- space
- parse_url
- JSON 函数
- JSON 函数和运算符
- JSON 构造函数
- JSON 查询和处理函数
- JSON 运算符
- 模糊/正则匹配函数
- 工具函数
- 聚合函数
- Bitmap函数
- 数组函数
- bit函数
- cast函数
- hash函数
- 条件函数
- 百分位函数
- 数学函数
- 日期函数
- 系统变量
- 错误码
- 系统限制
- SQL参考
- 常见问题解答
- 性能测试
- Release Notes
从 ApacheDoris 升级为 Starrocks 标准版操作手册
升级环境
注意:当前只支持从 apache doris 的 0.13.15(不包括)之前的版本升级。0.13.15 版本在升级 fe 时需要修改源码处理,该版本可以联系官方人员协助升级。0.14 及以后的版本暂时不支持升级。
获取原有集群信息
如果原有集群 FE/BE/broker 信息未给出,可以通过 MySQL 连接到 FE 的方式,并使用以下 SQL 命令查看并确认清楚:
show frontends; show backends; show broker;
重点关注:
a. FE、BE 的 数量/IP/版本 等信息;
b. FE 的 Leader、Follower、Observer 情况;
假设
这里假设原 Apache Doris 目录为
/home/doris/doris/
, 手工安装的 Starrocks 新目录为/home/starrocks/starrocks/
,为了减少操作失误,后续步骤采用全路径方式。如有具体升级中个,存在路径差异,建议统一修改文档中对应路径,然后严格按照操作步骤执行。有些
/home/doris
是软链接,可能会使用/disk1/doris
等,具体情况下得注意检查 BE 配置文件
# 检查BE 配置文件的一些字段 vim /home/doris/doris/be/conf/be.conf
重点是,检查 default_rowset_type = BETA 配置项,确认是否是 BETA 类型:
a. 如果为 BETA,说明已经开始使用 segmentV2 格式,但还有可能有部分 tablet 或 rowset 还是 segmentV1 格式,也需要检查和转换。
b. 如果是 ALPHA,说明全部数据都是 segmentV1 格式,则需要修改配置为 BETA,并做后续检查和转换。
测试 SQL 可以测试下,看看当前数据的情况。
show databases; use {one_db}; show tables; show data; select count(*) from {one_table};
升级准备
检查文件格式
a. 下载文件格式检测工具
# git clone 或直接从其他地方下载包 http://Starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/show_segment_status.tar.gz
b. 解压
show_segment_status.tar.gz
包tar -zxvf show_segment_status.tar.gz
c. 修改
conf
文件vim conf 进行修改文件 [cluster] fe_host =10.0.2.170 query_port =9030 user = root query_pwd = **** # Following confs are optional # select one database db_names = 数据库名 # select one table table_names = 表名 # select one be. when value is 0 means all bes be_id = 0
d. 设置完成后,运行检测脚本,检测是否已经转换为了 segmentV2。
python show_segment_status.py
e. 检查工具输出信息:rowset_count 的两个值是否相等,数目不相等时,就说明存在这种 segmentv1 的表,需要进行转换。
寻找 segmentv1 的表,进行转换 针对每一个有 segmentV1 格式数据的表,进行格式转换:
-- 修改格式 ALTER TABLE table_name SET ("storage_format" = "v2"); -- 等待任务完成。 status 字段值为 FINISHED 即可 SHOW ALTER TABLE column;
并再次重复运行 python
show_segment_status.py
语句来检查:如果已经显示成功设置 storage_format 为 V2 了,但还是有数据是 v1 格式的,则可以通过以下方式进一步检查:
a. 逐个寻找所有表,通过
show tablet from table_name
获取表的元数据链接;b. 通过 MetaUrl,类似
wget http://172.26.92.139:8640/api/meta/header/11010/691984191获取tablet
的元数据;c. 这时候本地会出现一个
691984191
的 JSON 文件,查看其中的rowset_type
看看内容是不是ALPHA_ROWSET/BETA_ROWSET
;d. 如果是 ALPHA_ROWSET,就表明是 segmentV1 的数据,需要进行转换到 segmentV2。
如果直接修改 storage_format 为 v2 的方法执行后,还是有数据为 v1 版本,则需要再使用如下方法处理(但一般不会有问题,这个方法也比较麻烦):
-- 方法2:参考SQL 通过重新导入数据到临时分区,然后分区替换的方式来处理SegmentV2的转化 alter table dwd_user_tradetype_d ADD TEMPORARY PARTITION p09 VALUES [('2020-09-01'), ('2020-10-01')) ("replication_num" = "3") DISTRIBUTED BY HASH(`dt`, `c`, `city`, `trade_hour`) BUCKETS 16; insert into dwd_user_tradetype_d TEMPORARY partition(p09) select * from dwd_user_tradetype_d partition(p202009); ALTER TABLE dwd_user_tradetype_d REPLACE PARTITION (p202009) WITH TEMPORARY PARTITION (p09);
升级 BE
注意:BE 升级采用逐台升级的方式,确保机器升级无误后,隔点时间/隔一天再升级其他机器
准备工作:解压缩 Starrocks,并重命名为 Starrocks;
cd ~
tar xzf Starrocks-EE-1.19.6/file/Starrocks-1.19.6.tar.gz
mv Starrocks-1.19.6/ Starrocks
- 比较并拷贝原有 conf/be.conf 的内容到新的 BE 中的 conf/be.conf 中;
# 比较并修改和拷贝
vimdiff /home/doris/Starrocks/be/conf/be.conf /home/doris/doris/be/conf/be.conf
# 重要关注下面(拷贝此行配置到新 BE 中,一般建议继续使用原数据目录)
storage_root_path = {data_path}
- 检查是否是用 supervisor 启动的 BE: 如果是 supervisor 启动的,就需要通过 supervisor 发送命令重启 BE 如果没有部署 supervisor, 则需要手动重启 BE
# check 原有进程(原来的是 palo_be)
ps aux | grep palo_be
# 检查是否有 supervisor(只需要看 doris 账户下的进程)
ps aux | grep supervisor
## 下面 a/b 是二选一
# a、如果没有supervisor,则直接关闭原有be 进程
sh /home/doris/doris/be/bin/stop_be.sh
# b、如果有 supervisor,用 control.sh脚本关闭 be
cd /home/doris/doris/be && ./control.sh stop && cd -
# !!!检查: mysql中确保 Alive 为 false,以及 LastStartTime 为最新时间(见下图)
mysql> show backends;
# !!! 并且进程不在了(palo_be)
ps aux | grep be
ps aux | grep supervisor
# 启动新 BE
sh /home/doris/Starrocks/be/bin/start_be.sh --daemon
# 检查:以及进程存在(新进程名为 Starrocks_be)
ps aux | grep starrocks_be
# 检查:mysql 中 alive 为 true(见下图)
mysql> show backends;
- 观察升级结果: 观察 be.out,查看是否有异常日志。 观察 be.INFO,查看 heartbeat 是否正常。 观察 be.WARN, 查看有什么异常。 登录集群,发送 show backends, 查看是否 Alive 这一栏是否为 true。
- 升级 2 个 BE 后,show frontends 下,看 ReplayedJournalId 是否在增长,以说明导入是否没问题。
升级 FE
注意:FE 升级采用先升级 Observer,再升级 Follower,最后升级 Master 的逻辑。 如果是从 apache doris 0.13.15 版本升级,先要修改 starrocks 的 fe 模块的源码,并重新编译 fe 模块。如果没有编译过 fe 模块,可以找官方技术支持提供帮助。
修改 fe 源码(如果不是从 apache doris 0.13.15 版本升级,跳过此步骤) *下载源码 patch
wget "http://starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/upgrade_from_apache_0.13.15.patch"
*git 命令合入 patch
git apply --reject upgrade_from_apache_0.13.15.patch
*如果本地代码没有在 git 环境中,也可以根据 patch 的内容手动合入。
*编译 fe 模块
./build.sh --fe --clean
登录集群,确定 Master 和 Follower,如果 IsMaster 为 true,代表是 Master。其他的都是 Follower/Observer。
升级 Follower 或者 Master 之前确保备份元数据,这一步非常重要,因为要确保没有问题。 *cp doris-meta doris-meta.20210313 用升级的日期做备份时间即可。
比较并拷贝原有 conf/fe.conf 的内容到新的 FE 中的 conf/fe.conf 中;
# 比较并修改和拷贝
vimdiff /home/doris/Starrocks/fe/conf/fe.conf /home/doris/doris/fe/conf/fe.conf
# 重要关注下面(修改此行配置到新 FE 中,在原 doris 目录,新的 meta 文件(后面会拷贝))
meta_dir = /home/doris/doris/fe/doris-meta
# 维持原有java堆大小等信息
JAVA_OPTS="-Xmx8192m
# check 原有进程
ps aux | grep fe
# 检查是否有 supervisor(只需要看 doris 账户下的进程)
ps aux | grep supervisor
## 下面 a/b 是二选一
# a、如果没有supervisor,则直接关闭原有fe 进程
sh /home/doris/doris/fe/bin/stop_fe.sh
# b、如果有 supervisor,用 control.sh脚本关闭 fe
cd /home/doris/doris/fe && ./control.sh stop && cd -
# !!!并检查: mysql中确保 Alive 为 false
mysql> show frontends;
# !!! 并且进程不在了
ps aux | grep fe
ps aux | grep supervisor
# !!! 如果更改 meta 目录,则需要先停止后,再复制 meta
cp -r /home/doris/doris/fe/palo-meta /home/doris/doris/fe/doris-meta
# 启动新 FE
sh /home/doris/Starrocks/fe/bin/start_fe.sh --daemon
# 检查:进程是否已经存在
ps aux | grep StarRocksFE
# 检查:用当前 FE 登录 mysql,并且其中alive 为 true
# ,ReplayedJournalId 在同步甚至增长,以及进程存在
mysql> show frontends;
观察升级结果: 观察 fe.out/fe.log 查看是否有错误信息。 如果 fe.log 始终是 UNKNOWN 状态, 没有变成 Follower、Observer,说明有问题。 *fe.out 报各种 Exception,也有问题。 (注意要先升级 Observer ,再升级 Follower )
如果是修改源码升级的,需要等元数据产生新 image 之后(meta/image 目录下有 image.xxx 的新文件产生),将 fe 的 lib 包替换回发布包。
回滚方案
注意:从 ApacheDoris 升级为 Starrocks,暂时不支持回滚,建议先在测试环境验证测试没问题后再升级线上。如有遇到问题无法解决,可以添加下面企业微信寻求帮助。
注意事项
segmentV1 转 segmentV2 需要费时间来完成,这个可能需要一定时间,如果存在大量表数据格式为 V1 的话,建议用户平时就可以进行这个操作转换数据格式。
需要先升级 BE、再升级 FE,因为 Starrocks 的标准版中 BE 是兼容 FE 的。升级 BE 的过程中,需要进行灰度升级,先升级一台 BE,过一天观察无误,再升级其他 FE。
跨版本升级时需要谨慎,测试环境验证后再操作,且升级 Starrocks-2.x 版本时需要前置开启 CBO,需要升级至 2.x 版本的用户需先升级 1.19.x 版本。可在官网获取最新版本的 1.19.x 安装包(1.19.7)。