第1.5章:StarRocks部署--集群部署

StarRocks集群部署 StarRocks集群部署指南 本文详细介绍了StarRocks高性能OLAP数据库的集群部署流程。首先说明了硬件要求,包括CPU需支持AVX2指令集,推荐使用万兆网络。部署步骤包括:1) 使用LVM方式挂载数据盘;2) 配置各节点主机名和hosts文件;3) 设置SSH免密登录;4) 配置chrony时间同步服务;5) 安装JDK并设置环境变量;6) 使用StarGo部署工具进行环境检测和参数调优;7) 修改部署配置文件,指定FE和BE节点参数,包括端口设置、目录配置和角色分配等。文章提供了完整的配置示例 阅读详情

StarRocks作为新一代MPP数据库,集群部署才能充分发挥其彪悍的查询性能。生产环境下我们也推荐进行集群化部署,本章内容我们就模拟生产环境下StarRocks集群部署。

在“1.1章 源码编译”中我们已经介绍了版本选择时的注意事项,这里我们以从StarRocks官网下载的1.19.3社区版为例进行部署,下载地址:

StarRocks - 新一代极速全场景MPP数据库
新一代极速全场景MPP数据库,速度提升100倍!
https://www.starrocks.com/zh-CN/download/community

1 集群部署注意事项

在部署StarRocks生产环境前,我们需要根据业务需求设计严谨的集群架构,一般来说,我们需要注意以下几项:

1.1 FE的数量及是否需要FE的高可用

FE的Follower要求为奇数个,且并不建议部署太多,通常我们推荐部署1个或3个Follower。在三个Follower时,即可实现高可用(HA)。此时,若Leader节点进程挂掉或与集群脱离通信,其他2个Follower节点会通过bdbje协议快速重新选主出一个Leader,保证集群的正常工作(FE Leader节点异常仅影响集群写入,不会对集群对外的查询功能有影响)。这里注意,集群中需要有半数以上的Follower节点存活,才可进行FE的重新选主。

一般情况下,相对更推荐部署1 Follower+多Observer的FE架构,通过增加Observer来扩展集群的高并发读服务能力。

通常,一个FE节点可以应对10-20台BE节点,我们建议总的FE节点数量在10个以下,而一般3个即可满足绝大部分业务需求。

1.2 BE实例数量

BE实例数量直接决定了集群整体查询延迟,生产环境BE数量建议至少为3个。StarRocks建表时默认为3副本,生产环境下我们也推荐使用3副本数据。由于StarRocks的副本策略,副本数不能大于BE实例数(不同Host),所以为保障数据安全,建议至少部署三个BE实例(不同Host)。

1.3 Broker实例数量

通常与BE混布,与BE数量保持相同,并建议所有的Broker使用相同的名称,这样在执行Broker任务时可以并行使用多个Broker实例。

如果我们的业务中不需要和Hadoop类的产品对接,那么也可以不部署Broker。

1.4 FE与BE是否混布

前面已经提到,单台机器下,同集群FE不能混布,BE虽然能混布但是没有价值。FE和BE是可以混部的,但生产环境下需要注意CPU、内存等资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。

2 集群架构设计

根据实际业务情况粗估集群规模后,我们就可以准备部署。StarRocks的扩容非常友好,若前期我们无法较为准确的判断出对应的集群规模,建议先部署一套最小架构的集群,后面逐步扩容。

例如,我们使用以下三台已进行完“第1.2章:部署环境准备”的服务器进行部署,服务器配置:

主机名

配置要求

192.168.110.101(node01)

16核 32GB 万兆网卡 CPU支持AVX2指令集

192.168.110.102(node02)

16核 32GB 万兆网卡 CPU支持AVX2指令集

192.168.110.103(node03)

16核 32GB 万兆网卡 CPU支持AVX2指令集

生产环境集群架构设计示例(也可以用3Follower架构):

机器节点

192.168.116.101

(node01)

192.168.110.102

(node02)

192.168.116.103

(node03)

部署服务

FE(Leader)

BE

Broker

mysql-client

FE(Observer)

BE

Broker

BE

Broker

生产环境各节点部署目录及数据目录设计如下(这里假定meta与storage分属不同的磁盘):

FE

部署目录:/opt/module/starrocks/fe

日志目录:/opt/module/starrocks/fe/log

元数据目录:/opt/module/meta

BE

部署目录:/opt/module/starrocks/be

日志目录:/opt/module/starrocks/be/log

数据存储目录:/opt/module/storage

Broker

部署目录:/opt/module/starrocks/apache_hdfs_broker

3 使用普通用户

实际生产中,运维管理员通常不会将root账号交给我们,或者个别场景下是使用用户名作为鉴权方式,为贴合实际业务,后续的部署操作我们分别新建starrocks用户进行(密码也暂设为starrocks):

[root@node01 ~]# useradd starrocks

[root@node01 ~]# passwd starrocks

Changing password for user starrocks.

New password: 这里输入starrocks

BAD PASSWORD: The password contains the user name in some form

Retype new password: 再次输入starrocks

passwd: all authentication tokens updated successfully.

再分别对node02及node03新建用户starrocks(操作同上,略)。

使用root用户分别在三个节点上新建/opt/module文件夹,并将文件夹所有者变更为starrocks用户:

[root@node01 ~]# mkdir /opt/module

[root@node01 ~]# chown starrocks /opt/module/

对node02及node03也分别进行该操作(操作同上,略)。

4 配置集群间SSH免密登录

为方便后续操作,我们为starrocks用户配置集群间SSH免密。SSH免密配置方法比较灵活,这里演示一种。我们切换至starrocks用户:

[root@node01 ~]# su starrocks

[starrocks@node01 root]$

生成公钥和私钥:

[starrocks@node01 root]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/starrocks/.ssh/id_rsa): 回车

Created directory '/home/starrocks/.ssh'.

Enter passphrase (empty for no passphrase): 回车

Enter same passphrase again: 回车

Your identification has been saved in /home/starrocks/.ssh/id_rsa.

Your public key has been saved in /home/starrocks/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:ZNAqiKrylI0FyuzSxhGHp6mzmaVaQHMt6dNzKmv5gHA starrocks@node01

The key's randomart image is:

+---[RSA 2048]----+

|      ..                     |

|   .o  ..                   |

| ++=o. .o              |

|=.=B+ .o               |

|=oEo.+ .S             |

|+*.*. +                   |

|=oXoo.                 |

|+@ o+                  |

|O.o...                    |

+----[SHA256]-----+

将公钥拷贝至本机:

[starrocks@node01 ~]$ ssh-copy-id 192.168.110.101

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/starrocks/.ssh/id_rsa.pub"

The authenticity of host '192.168.110.101 (192.168.110.101)' can't be established.

ECDSA key fingerprint is SHA256:SbXiLQFCWyTY547XciYFRgP07UE711rygMbmUQeP+LE.

ECDSA key fingerprint is MD5:b5:24:12:6a:7a:4f:2a:bf:2d:1a:ee:b5:b8:21:3c:06.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

starrocks@192.168.110.101's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.110.101'"

and check to make sure that only the key(s) you wanted were added.

拷贝node01 starrocks用户家目录下.ssh文件夹至集群其他所有节点:

拷贝至node02节点:

[starrocks@node01 ~]$ scp -r /home/starrocks/.ssh/ 192.168.110.102:/home/starrocks/

The authenticity of host '192.168.110.102 (192.168.110.102)' can't be established.

ECDSA key fingerprint is SHA256:SbXiLQFCWyTY547XciYFRgP07UE711rygMbmUQeP+LE.

ECDSA key fingerprint is MD5:b5:24:12:6a:7a:4f:2a:bf:2d:1a:ee:b5:b8:21:3c:06.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.110.102' (ECDSA) to the list of known hosts.

starrocks@192.168.110.102's password: 输入node02 starrocks用户的密码:starrocks

id_rsa           100%     1679     1.2MB/s   00:00

id_rsa.pub       100%      398    522.6KB/s   00:00

known_hosts     100%      354    634.6KB/s   00:00

authorized_keys   100%      398    614.5KB/s   00:00

拷贝至node03节点:

[starrocks@node01 ~]$ scp -r /home/starrocks/.ssh/ 192.168.110.103:/home/starrocks/

…………

免密配置完成。这种配置方式可以快捷的实现集群间任意节点的免密访问。

5 上传产品包

上传安装包至node01的/opt/module/目录下:

[starrocks@node01 ~]$ cd /opt/module/

[starrocks@node01 module]$ ll

total 987308

-rw-r--r-- 1 root root 1010999795 Dec  4 14:56 StarRocks-1.19.3.tar.gz

解压:

[starrocks@node01 module]$ tar xf StarRocks-1.19.3.tar.gz

[starrocks@node01 module]$ ll

total 987308

drwxrwxr-x 6 1007 1007        100 Nov 29 21:32 StarRocks-1.19.3

-rw-r--r-- 1 root root 1010999795 Dec  4 14:56 StarRocks-1.19.3.tar.gz

6 创建部署所需文件夹

依据集群设计对集群各节点创建部署文件夹及数据文件夹:

node01:

[starrocks@node01 module]$ mkdir /opt/module/starrocks

[starrocks@node01 module]$ mkdir /opt/module/meta

[starrocks@node01 module]$ mkdir /opt/module/storage

node02:

[starrocks@node02 ~]$ mkdir /opt/module/starrocks

[starrocks@node02 ~]$ mkdir /opt/module/meta

[starrocks@node02 ~]$ mkdir /opt/module/storage

node03:

[starrocks@node03 ~]$ mkdir /opt/module/starrocks

[starrocks@node03 ~]$ mkdir /opt/module/storage

7 分发部署文件

在node01节点向集群各节点分发部署文件:

node01向node01分发文件:

[starrocks@node01 ~]$ cp -r /opt/module/StarRocks-1.19.3/fe/ /opt/module/starrocks/

[starrocks@node01 ~]$ cp -r /opt/module/StarRocks-1.19.3/be/ /opt/module/starrocks/

[starrocks@node01 ~]$ cp -r /opt/module/StarRocks-1.19.3/apache_hdfs_broker/ /opt/module/starrocks/

[starrocks@node01 ~]$ cd /opt/module/starrocks/

[starrocks@node01 starrocks]$ ll

total 0

drwxr-xr-x 5 starrocks starrocks 40 Dec  4 04:34 apache_hdfs_broker

drwxr-xr-x 6 starrocks starrocks 51 Dec  4 04:34 be

drwxr-xr-x 8 starrocks starrocks 83 Dec  4 04:34 fe

node01向node02分发文件:

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/fe/ 192.168.110.102:/opt/module/starrocks/

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/be/ 192.168.110.102:/opt/module/starrocks/

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/apache_hdfs_broker/ 192.168.110.102:/opt/module/starrocks/

[starrocks@node02 starrocks]$ ll

total 0

drwxr-xr-x 5 starrocks starrocks 40 Dec  4 04:37 apache_hdfs_broker

drwxr-xr-x 6 starrocks starrocks 51 Dec  4 04:37 be

drwxr-xr-x 8 starrocks starrocks 83 Dec  4 04:35 fe

node01向node03分发文件:

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/be/ 192.168.110.103:/opt/module/starrocks/

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/apache_hdfs_broker/ 192.168.110.103:/opt/module/starrocks/

[starrocks@node03 ~]$ cd /opt/module/starrocks/

[starrocks@node03 starrocks]$ ll

total 0

drwxr-xr-x 5 starrocks starrocks 40 Dec  4 04:40 apache_hdfs_broker

drwxr-xr-x 6 starrocks starrocks 51 Dec  4 04:39 be

8 部署FE实例

8.1 修改FE配置文件

8.1.1 node01节点修改

生产环境下FE配置文件通常需要关注以下四点,有经验的用户可以根据官网文档的系统配置章节,结合业务情况修改对应配置:

a、修改Java堆内存,避免GC建议16G以上;

b、设置元数据目录,默认目录为fe/meta,我们需要新建目录并修改配置文件,上文已创建;

c、注意默认端口,避免端口冲突,正常情况下不需要修改;

d、绑定IP(CIDR表示法),避免多网卡情况下FE无法自动找到正确的IP。再次注意,如果不清楚CIDR表示法,就直接填写完整ip,例如配置为priority_networks = 192.168.110.101,这样的写法等同于priority_networks = 192.168.110.101/32;

因为当前集群没有部署其他的服务,故端口可以保持默认,我们针对a、b和d修改配置文件(带#的为注释,红色字体为新增配置):

[starrocks@node01 ~]$ vi /opt/module/starrocks/fe/conf/fe.conf

DATE = "$(date +%Y%m%d-%H%M%S)"

JAVA_OPTS="-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log.$DATE"

# store metadata, create it if it is not exist.

# Default value is ${STARROCKS_HOME}/meta

# meta_dir = ${STARROCKS_HOME}/meta

meta_dir = /opt/module/meta

…………

# Choose one if there are more than one ip except loopback address.

# Note that there should at most one ip match this list.

# If no ip match this rule, will choose one randomly.

# use CIDR format, e.g. 10.10.10.0/24

# Default value is empty.

# priority_networks = 10.10.10.0/24;192.168.0.0/16

priority_networks = 192.168.110.101

修改完成后保存配置。

8.1.2 node02节点修改

[starrocks@node02 starrocks]$ vi /opt/module/starrocks/fe/conf/fe.conf

同样也需要修改堆内存、元数据目录以及绑定IP:

DATE = "$(date +%Y%m%d-%H%M%S)"

JAVA_OPTS="-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log.$DATE"

# store metadata, create it if it is not exist.

# Default value is ${STARROCKS_HOME}/meta

# meta_dir = ${STARROCKS_HOME}/meta

meta_dir = /opt/module/meta

node02的FE实例需要绑定IP为192.168.110.102:

priority_networks = 192.168.110.102

修改完成后保存退出。

8.2 启动FE

启动node01 FE(首个启动的FE自动成为Leader):

[starrocks@node01 ~]$ cd /opt/module/starrocks/fe/bin/

[starrocks@node01 bin]$ ll

total 16

-rwxrwxr-x 1 starrocks starrocks 1347 Dec  4 04:34 common.sh

-rwxrwxr-x 1 starrocks starrocks 1411 Dec  4 04:34 show_fe_version.sh

-rwxrwxr-x 1 starrocks starrocks 3122 Dec  4 04:34 start_fe.sh

-rwxrwxr-x 1 starrocks starrocks 1749 Dec  4 04:34 stop_fe.sh

[starrocks@node01 bin]$ ./start_fe.sh --daemon

8.3 查看FE状态

查看进程状态:

[starrocks@node01 bin]$ jps | grep StarRocksFe

10319 StarRocksFe

如果进程状态异常可在FE日志目录中查看日志追踪原因,FE的主要日志在fe.log中,所有查询的审计日志在fe.audit.log中。

使用mysql-client访问StarRocks(默认查询端口为9030,自带用户root,初始密码为空),能访问即证明FE Leader节点状态正常(部分情况启动后需要稍等片刻):

[starrocks@node01 bin]$ mysql -h192.168.110.101 -P9030 -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 0

Server version: 5.1.0

……………………

mysql>

8.4 添加其他FE实例进集群

在“第1.3章的4.5节”中已经提到,建议“先将实例添加进入集群”,然后逐个“启动实例”。将node02的FE作为Observer先添加入集群,端口为edit_log_port,默认是9010:

mysql> alter system add observer '192.168.110.102:9010';

Query OK, 0 rows affected (0.02 sec)

若需要将其作为Follower角色加入集群,这里的sql写法为:

mysql> alter system add follower "fe_host:edit_log_port";

如果添加时IP或端口信息输入有误,或者由于其他情况我们需要将实例从集群中删除,sql写法如下:

删除Follower:

mysql> alter system drop follower "fe_host:edit_log_port";

删除Observer:

mysql> alter system drop observer "fe_host:edit_log_port";

8.5 启动其他FE

启动其他FE实例时需要特别注意:除首个启动的FE外,其他FE节点首次启动时,必需指定一个已存在的FE节点作为helper(后面再启动时就不需要)。

首次启动node02节点,指定node01的FE实例作为helper:

[starrocks@node02 ~]$ cd /opt/module/starrocks/fe/bin/

[starrocks@node02 bin]$ ./start_fe.sh --helper 192.168.110.101:9010 --daemon

[starrocks@node02 bin]$ jps | grep StarRocksFe

10078 StarRocksFe

8.6 查看集群FE状态

在node01的mysql-client中查看FE状态:

mysql> show frontends\G

*************************** 1. row ***************************

             Name: 192.168.110.101_9010_1631221944374

               IP: 192.168.110.101

      EditLogPort: 9010

         HttpPort: 8030

        QueryPort: 9030

          RpcPort: 9020

             Role: FOLLOWER

         IsMaster: true

        ClusterId: 538795507

             Join: true

            Alive: true

ReplayedJournalId: 129

    LastHeartbeat: 2021-12-04 05:19:31

         IsHelper: true

           ErrMsg:

*************************** 2. row ***************************

             Name: 192.168.110.102_9010_1631222131854

               IP: 192.168.110.102

      EditLogPort: 9010

         HttpPort: 8030

        QueryPort: 9030

          RpcPort: 9020

             Role: OBSERVER

         IsMaster: false

        ClusterId: 538795507

             Join: true

            Alive: true

ReplayedJournalId: 128

    LastHeartbeat: 2021-12-04 05:19:31

         IsHelper: false

           ErrMsg:

2 rows in set (0.05 sec)

Alive均为true,说明FE状态正常。若状态为false,可以在日志中定位问题,如果异常排查比较耗时,由于是初次启动,我们可以清空FE的元数据目录,再从头开始操作。

大部分同学这里出问题都是因为首次启动没有指定helper,后面想起指定helper启动时又没有清空元数据而导致的。

暂时退出StarRocks:

mysql> exit

Bye

9 部署BE实例

9.1 修改BE配置文件

修改BE配置文件,生产环境首先注意的也是以下三点,其他配置可以在熟悉StarRocks后结合业务需求参考官方文档进行修改:

a、注意默认端口,避免端口冲突,正常情况下不需要修改;

b、绑定IP,避免多网卡情况下BE无法自动找到正确的IP;

c、设置数据存储目录,默认目录为be/storage,我们建议根据磁盘情况新建目录并修改配置文件(前面我们已创建)。

针对b和c修改配置文件(带#的为注释,红色字体为新增配置):

9.1.1 修改node01配置文件

[starrocks@node01 ~]$ vi /opt/module/starrocks/be/conf/be.conf

…………

# Choose one if there are more than one ip except loopback address.

# Note that there should at most one ip match this list.

# If no ip match this rule, will choose one randomly.

# use CIDR format, e.g. 10.10.10.0/24

# Default value is empty.

# priority_networks = 10.10.10.0/24;192.168.0.0/16

priority_networks = 192.168.110.101

…………

# you also can specify the properties by setting '<property>:<value>', seperate by ','

# property 'medium' has a higher priority than the extension of path

#

# Default value is ${STARROCKS_HOME}/storage, you should create it by hand.

# storage_root_path = ${STARROCKS_HOME}/storage

storage_root_path = /opt/module/storage

修改完成后保存配置。

9.1.2 修改node02配置文件

[starrocks@node02 ~]$ vi /opt/module/starrocks/be/conf/be.conf

将IP绑定为node02中集群需要使用的IP,并修改数据存储目录:

priority_networks = 192.168.110.102

storage_root_path = /opt/module/storage

保存退出。

9.1.3 修改node03配置文件

 [starrocks@node03 ~]$ vi /opt/module/starrocks/be/conf/be.conf

同样,将IP绑定为node03中集群需要使用的IP,同时修改数据存储目录:

priority_networks = 192.168.110.103

storage_root_path = /opt/module/storage

保存退出。

9.2 添加BE实例进入集群

在node01中使用mysql-client先将这3个BE实例添加进入集群,这里需要使用的端口是portheartbeat_service_port,默认为9050:

[starrocks@node01 ~]$ mysql -h192.168.110.101 -P9030 -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

………………

mysql> alter system add backend '192.168.110.101:9050';

Query OK, 0 rows affected (0.00 sec)

mysql> alter system add backend '192.168.110.102:9050';

Query OK, 0 rows affected (0.00 sec)

mysql> alter system add backend '192.168.110.103:9050';

Query OK, 0 rows affected (0.01 sec)

同样的,如果BE实例添加时IP或端口信息输入有误,或者由于其他异常情况我们需要在集群中删除BE实例,sql写法:

mysql> alter system dropp backend "be_host:be_heartbeat_service_port";

前面章节已提到,删除BE实例为危险操作,故删除命令设计为“DROPP”。执行DROPP指令后,集群会立刻删除该BE节点,丢失的副本由FE调度补齐,但若为单副本数据,这部分数据将彻底丢失。由于当前是刚开始部署,BE中并没有存储业务数据,故我们此时可以直接采用DROPP的写法。

当StarRocks集群投入生产后,每个BE节点都存储了大量的业务数据,此时若使用DROPP指令从集群中删除某个BE实例,则存储在该实例上的数据副本会直接丢失。这时我们需要使用另一种安全删除的写法:DECOMMISSION。DECOMMISSION会先保证副本补齐,然后再下掉该BE节点。DECOMMISSION方式在生产中更为友好,在后续业务正常缩容是会建议采用这种方式进行缩容,示例:

mysql> alter system decommission backend "be_host:be_heartbeat_service_port";

暂时退出mysql-client:

mysql> exit

Bye

9.3 启动BE实例

9.3.1 启动node01 BE实例

[starrocks@node01 ~]$ cd /opt/module/starrocks/be/bin/

[starrocks@node01 bin]$ ll

total 16

-rwxrwxr-x 1 starrocks starrocks 1347 Dec  4 04:34 common.sh

-rwxrwxr-x 1 starrocks starrocks  644 Dec  4 04:34 show_be_version.sh

-rwxrwxr-x 1 starrocks starrocks 3377 Dec  4 04:34 start_be.sh

-rwxrwxr-x 1 starrocks starrocks 1601 Dec  4 04:34 stop_be.sh

[starrocks@node01 bin]$ ./start_be.sh --daemon

检查进程状态:

[starrocks@node01 bin]$ ps -ef | grep starrocks_be

starroc+  10858      1  0 05:31 pts/0    00:00:00 /opt/module/starrocks/be/lib/starrocks_be

如果进程状态异常可在BE日志目录中查看日志追踪原因,BE的主要日志在be.INFO中,其他的日志在be.out中。

9.3.2 启动node02 BE实例

[starrocks@node02 ~]$ cd /opt/module/starrocks/be/bin/

[starrocks@node02 bin]$ ./start_be.sh --daemon

检查进程状态:

[starrocks@node02 bin]$ ps -ef | grep starrocks_be

starroc+  10533      1  2 05:33 pts/0    00:00:00 /opt/module/starrocks/be/lib/starrocks_be

9.3.3 启动node03 BE实例

[starrocks@node03 ~]$ cd /opt/module/starrocks/be/bin/

[starrocks@node03 bin]$ ./start_be.sh --daemon

检查进程状态:

[starrocks@node03 bin]$ ps -ef | grep starrocks_be

starroc+  10098      1  1 05:35 pts/0    00:00:00 /opt/module/starrocks/be/lib/starrocks_be

9.4 查看启动BE状态

回到node01,使用mysql-client访问StarRocks集群:

[starrocks@node01 ~]$ mysql -h192.168.110.101 -P9030 -uroot

查看BE实例状态是否正常:

mysql> show backends\G

*************************** 1. row ***************************

            BackendId: 10003

              Cluster: default_cluster

                   IP: 192.168.110.101

        HeartbeatPort: 9050

               BePort: 9060

             HttpPort: 8040

             BrpcPort: 8060

        LastStartTime: 2021-12-04 05:31:53

        LastHeartbeat: 2021-12-04 05:36:28

                Alive: true

 SystemDecommissioned: false

ClusterDecommissioned: false

            TabletNum: 4

     DataUsedCapacity: .000

        AvailCapacity: 30.790 GB

        TotalCapacity: 37.017 GB

              UsedPct: 16.82 %

       MaxDiskUsedPct: 16.82 %

               ErrMsg:

              Version: 1.19.3-e65759c

               Status: {"lastSuccessReportTabletsTime":"2021-12-04 05:35:53"}

*************************** 2. row ***************************

            BackendId: 10007

              Cluster: default_cluster

                   IP: 192.168.110.102

        HeartbeatPort: 9050

               BePort: 9060

             HttpPort: 8040

             BrpcPort: 8060

        LastStartTime: 2021-12-04 05:33:43

        LastHeartbeat: 2021-12-04 05:36:28

                Alive: true

 SystemDecommissioned: false

ClusterDecommissioned: false

            TabletNum: 3

     DataUsedCapacity: .000

        AvailCapacity: 33.628 GB

        TotalCapacity: 37.017 GB

              UsedPct: 9.15 %

       MaxDiskUsedPct: 9.15 %

               ErrMsg:

              Version: 1.19.3-e65759c

               Status: {"lastSuccessReportTabletsTime":"2021-12-04 05:35:43"}

*************************** 3. row ***************************

            BackendId: 10008

              Cluster: default_cluster

                   IP: 192.168.110.103

        HeartbeatPort: 9050

               BePort: 9060

             HttpPort: 8040

             BrpcPort: 8060

        LastStartTime: 2021-12-04 05:35:03

        LastHeartbeat: 2021-12-04 05:36:28

                Alive: true

 SystemDecommissioned: false

ClusterDecommissioned: false

            TabletNum: 3

     DataUsedCapacity: .000

        AvailCapacity: 33.849 GB

        TotalCapacity: 37.017 GB

              UsedPct: 8.56 %

       MaxDiskUsedPct: 8.56 %

               ErrMsg:

              Version: 1.19.3-e65759c

               Status: {"lastSuccessReportTabletsTime":"2021-12-04 05:36:03"}

3 rows in set (0.00 sec)

Alive均为true,状态正常,若为false,可根据日志排查问题。同样的,因为当前BE为初次启动,如果出现无法快速定位的问题,可以清空storage数据目录和日志目录,重新启动服务。

10 部署Broker实例

10.1 添加Broker实例进入集群

在node01的mysql-client中,我们先将3个Broker实例添加进入集群,这里端口使用broker_ipc_port,默认端口为8000:

mysql> alter system add broker hdfs_broker '192.168.110.101:8000';

Query OK, 0 rows affected (0.01 sec)

mysql> alter system add broker hdfs_broker '192.168.110.102:8000';

Query OK, 0 rows affected (0.01 sec)

mysql> alter system add broker hdfs_broker '192.168.110.103:8000';

Query OK, 0 rows affected (0.00 sec)

若需要在集群中删除Broker,sql写法为:

mysql> ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";

退出mysql-client:

mysql> exit

Bye

10.2 修改Broker配置文件

在“第1.3章”中我们已说明过Broker实例不需要绑定IP。生产环境下,我们通常也不需要修改Broker配置文件中的其他配置。

10.3 启动Broker服务

10.3.1 启动node01 Broker服务

[starrocks@node01 ~]$ cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node01 bin]$ ./start_broker.sh --daemon

检查Broker进程状态:

[starrocks@node01 bin]$ jps | grep BrokerBootstrap

11386 BrokerBootstrap

如果进程状态异常可查看日志追踪原因。

10.3.2 启动node02 Broker服务

[starrocks@node02 ~]$ cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node02 bin]$ ./start_broker.sh --daemon

检查Broker进程状态:

[starrocks@node02 bin]$ jps | grep BrokerBootstrap

11039 BrokerBootstrap

10.3.3 启动node03 Broker服务

[starrocks@node03 ~]$ cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node03 bin]$ ./start_broker.sh --daemon

检查Broker进程状态:

[starrocks@node03 bin]$ jps | grep BrokerBootstrap

10608 BrokerBootstrap

10.4 查看集群中Broker状态

再次从node01上登录StarRocks:

[starrocks@node01 bin]$ mysql -h192.168.110.101 -P9030 -uroot

查看Broker状态:

mysql> show broker\G

*************************** 1. row ***************************

          Name: hdfs_broker

            IP: 192.168.110.103

          Port: 8000

         Alive: true

 LastStartTime: 2021-12-04 05:46:20

LastUpdateTime: 2021-12-04 05:47:45

        ErrMsg:

*************************** 2. row ***************************

          Name: hdfs_broker

            IP: 192.168.110.102

          Port: 8000

         Alive: true

 LastStartTime: 2021-12-04 05:45:40

LastUpdateTime: 2021-12-04 05:47:45

        ErrMsg:

*************************** 3. row ***************************

          Name: hdfs_broker

            IP: 192.168.110.101

          Port: 8000

         Alive: true

 LastStartTime: 2021-12-04 05:44:50

LastUpdateTime: 2021-12-04 05:47:45

        ErrMsg:

3 rows in set (0.00 sec)

Alive均为true,状态正常。Broker日志在apache_hdfs_broker.log中,若状态为false,可依据日志定位问题。

至此,集群所有实例已根据集群设计部署完成。

11 集群实例的启停

集群部署完成后,若机器重启或有服务down掉,我们需要手动或编写脚本启停服务,群起脚本示例见附件一:集群群起脚本。

FE启动:

[starrocks@node0* ~]# cd /opt/module/starrocks/fe/bin/

[starrocks@node0* bin]# ./start_fe.sh --daemon

FE停止:

[starrocks@node0* bin]# ./stop_fe.sh

BE启动:

[starrocks@node0* ~]# cd /opt/module/starrocks/be/bin

[starrocks@node0* bin]# ./start_be.sh --daemon

BE停止:

[starrocks@node0* bin]# ./stop_be.sh

Broker启动:

[starrocks@node0* ~]# cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node0* bin]# ./start_broker.sh --daemon

Broker停止:

[starrocks@node0* bin]# ./stop_broker.sh

12 简单使用示例

集群部署完成后,我们可以测试建表和导入数据执行查询。

12.1 修改管理员账户密码

当前版本,StarRocks部署完成后自带一个高权限用户:root,其默认密码为空。在node01上使用mysql-client访问StarRocks集群:

[starrocks@node01 bin]$ mysql -h192.168.110.101 -P9030 -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 0

Server version: 5.1.0

……………………

mysql>

以root用户为例,将其密码也修改为root(生产环境建议设置复杂密码):

mysql> set password=password('root');

Query OK, 0 rows affected (0.01 sec)

12.2 创建数据库

创建数据库star:

mysql> create database star;

Query OK, 0 rows affected (0.02 sec)

12.3 创建集群普通用户

创建普通用户rocks,指定密码为123456:

mysql> CREATE USER rocks IDENTIFIED BY '123456';

Query OK, 0 rows affected (0.02 sec)

12.4 为用户授权

使用root用户,将数据库star的所有权限授予用户rocks:

mysql> GRANT ALL ON star.* TO rocks;

Query OK, 0 rows affected (0.01 sec)

12.5 更换用户访问集群

退出root用户访问,使用rocks用户登录:

mysql> exit

Bye

[starrocks@node01 ~]# mysql -h192.168.110.101 -P9030 -urocks -p123456

12.6 创建数据表

创建表,以SSB测试集中的customer表为例:

mysql> use star;

Database changed

mysql> CREATE TABLE IF NOT EXISTS `customer` (

  `c_custkey` int(11) NOT NULL COMMENT "",

  `c_name` varchar(26) NOT NULL COMMENT "",

  `c_address` varchar(41) NOT NULL COMMENT "",

  `c_city` varchar(11) NOT NULL COMMENT "",

  `c_nation` varchar(16) NOT NULL COMMENT "",

  `c_region` varchar(13) NOT NULL COMMENT "",

  `c_phone` varchar(16) NOT NULL COMMENT "",

  `c_mktsegment` varchar(11) NOT NULL COMMENT ""

) ENGINE=OLAP

DUPLICATE KEY(`c_custkey`)

COMMENT "OLAP"

DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 12

PROPERTIES (

"replication_num" = "1",

"in_memory" = "false",

"storage_format" = "DEFAULT"

);
 

12.7 导入数据
在node02中,使用Stream Load导入本地文件数据,假设数据文件路径为/home/starrocks/customer.tbl(可使用StarRocks官网的SSB工具自行生成,地址:
StarRocks - 新一代极速全场景MPP数据库
https://www.starrocks.com/zh-CN/blog/1.8
):

假设文件中的数据共有3w行,前三行数据格式示例:
 

假设文件中的数据共有3w行,前三行数据格式示例:

1|Customer#000000001|j5JsirBM9P|MOROCCO  0|MOROCCO|AFRICA|25-989-741-2988|BUILDING

2|Customer#000000002|487LW1dovn6Q4dMVym|JORDAN   1|JORDAN|MIDDLE EAST|23-768-687-3665|AUTOMOBILE

3|Customer#000000003|fkRGN8n|ARGENTINA7|ARGENTINA|AMERICA|11-719-748-3364|AUTOMOBILE

…………

Stream Load导入语句:

[starrocks@node02 ~]$ curl --location-trusted -u rocks:123456 -H "label:star_customer_2021120401" -H "column_separator:|" -T /home/starrocks/customer.tbl http://192.168.110.101:8030/api/star/customer/_stream_load

{
    "TxnId": 1002,

    "Label": "star_customer_2021120401",

    "Status": "Success",

    "Message": "OK",

    "NumberTotalRows": 30000,

    "NumberLoadedRows": 30000,

    "NumberFilteredRows": 0,

    "NumberUnselectedRows": 0,

    "LoadBytes": 2807046,

    "LoadTimeMs": 197,

    "BeginTxnTimeMs": 12,

    "StreamLoadPutTimeMs": 35,

    "ReadDataTimeMs": 9,

    "WriteDataTimeMs": 105,

    "CommitAndPublishTimeMs": 44

}

数据导入成功,在node01的mysql-client中进行查询:

mysql> select count(1) from customer;

+------------------+

|  count(1)        |

+------------------+

|    30000         |

+------------------+

1 row in set (0.12 sec)
 

附录一:集群群起脚本

在node01节点,使用starrocks用户在/home/starrocks目录下创建starrocks.sh文件:

[starrocks@node01 ~]$ cd /home/starrocks/

[starrocks@node01 ~]$ vi starrocks.sh

在该文件中编写如下代码:

#!/bin/bash

# use-method: starrocks.sh start|stop|restart

case $1 in

"start"){
    for i in node01 node02 node03

    do

        echo "=================== start $i's service ================"

        ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/starrocks;./fe/bin/start_fe.sh --daemon"

         ssh $i "/opt/module/starrocks/be/bin/start_be.sh --daemon"

         ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/starrocks;./apache_hdfs_broker/bin/start_broker.sh --daemon"

    done

};;

"stop"){
    for i in node01 node02 node03

    do

        echo "=================== stop $i's service ================"

         ssh $i "/opt/module/starrocks/apache_hdfs_broker/bin/stop_broker.sh"

         ssh $i "/opt/module/starrocks/be/bin/stop_be.sh"

         ssh $i "/opt/module/starrocks/fe/bin/stop_fe.sh"

    done

};;

"restart")

 starrocks.sh stop

 sleep 2

 starrocks.sh start

;;

*)

 echo "Parameter ERROR!!!"

 ;;

esac

赋予脚本starrocks.sh可执行权限:

[starrocks@node01 ~]$ chmod a+x starrocks.sh

切换至root用户,将脚本移动至/bin目录下以便全局调用:

[starrocks@node01 ~]$ su root

Password: 输入root用户的密码

[root@node01 starrocks]# mv starrocks.sh /bin/

切换至starrocks用户,测试使用脚本启动集群(先确定集群各实例都处于未启动状态):

[starrocks@node01 starrocks]# starrocks.sh start

=================== start node01's service ================

=================== start node02's service ================

=================== start node03's service ================

bash: ./fe/bin/start_fe.sh: No such file or directory[这里是因为node03上未部署FE]

检查集群各实例状态,确认状态正常后,还可以测试停止集群服务:

[starrocks@node01 starrocks]# starrocks.sh stop

或测试重启集群服务:

[starrocks@node01 starrocks]# starrocks.sh restart

脚本测试正常后,可以将脚本scp分发至node02和node03节点的/bin目录下,方便在集群任意节点快速启停集群服务。
 

Starrocks集群部署 背景:最近几年OLAP数据库可谓是百家争鸣,许多产品都陆陆续续的展现出来,不过最近据说StarRocks的综合能力比较好,对比于Clickhouse这种强大的竞品也毫不逊色! 下方是官方给出的一些资料介绍,我这里截取了几张比较重要的图(官方文档传送门:StarRocks @ StarRocks_intro @ StarRocks DocsStarRockshttps://docs.starrocks.com/zh-cn/main/introduction/StarRocks_intro) 1.发展路程 阅读详情

相关推荐

StarRocks三节点集群部署

StarRocks三节点集群部署

moxiong3212的博客 3618

StarRocks集群搭建

starrocks集群搭建

qq_41631913的博客 3371

StarRocks 集群安装部署文档-保姆级

StarRocks官网: https://docs.starrocks.io/zh/docs/introduction/StarRocks_intro/ 部署前提条件 StarRocks 依靠 AVX2 指令集充分发挥其矢量化能力。因此,在生产环境中,强烈建议您将 StarRocks 部署于 x86 架构 CPU 的服务器上。 您可以在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集:说明 ARM 架构不支持 SIMD 指令集,因此在某些场景下的性能不及 x86 架构。我们只推荐您在开发环境中

cz124560的博客 8351

StarRocks 3.0 集群安装手册

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。

张冲andy的博客 3399

使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南

使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南

铁马冰河入梦 2643

StarRocks:存算一体模式部署

StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,支持标准 SQL,用户可以轻松地通过 MySQL 客户端连接到 StarRocks 实时查询分析数据。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。

m0_37559973的博客 4220

第1.3章:StarRocks部署--单机部署

严格来说,StarRocks并没有所谓的“Standalone运行模式”,生产环境下更是不建议进行单实例部署。这里将单机部署整理出来,主要是考虑当用户测试环境受限于机器数量或仅希望验证功能,那么也可以在一台机器上简易部署把StarRocks跑起来。 以服务器“starrocks(192.168.110.98)”为例,在进行完“第1.2章:StarRocks部署--部署环境准备”中的准备工作后,我们开始进行单节点的部署。 为方便演示,我们使用root用户通过XShell工具访问服务器,单节点架构设计如下:

流木的博客 1万+

StarRocks部署方案详解:从单机到分布式集群

本文将系统介绍StarRocks的多种部署方案,涵盖**单机部署**、**集群部署**、**容器化部署**及**云平台部署**,并提供配置优化建议。| 分布式集群部署 | 生产环境、高并发与海量数据 | 高可用、线性扩展、负载均衡 | 多节点,SSD存储 |- **FE节点**:至少3个(1 Leader + 2 Follower),实现元数据高可用。- **BE节点**:至少3个,数据分片多副本存储(推荐3副本)。- **负载均衡**:可选HAProxy或F5实现查询请求分发。

weixin_47233946的博客 1906

StarRocks集群元数据恢复

StarRocks3.0.0集群元数据恢复

爱吃辣条的博客 2594

StarRocks入门到熟练

starrocks 3.1集群

docsz的博客 3859

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8970

Kubernetes 部署 StarRocks 集群

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。

Kason_iWiki 2413

Windows 10下用vcpkg一键搞定libcurl开发环境(Code::Blocks 20.03配置指南)

本文详细介绍了在Windows 10系统下使用vcpkg工具快速配置libcurl开发环境的完整指南,特别针对Code::Blocks 20.03 IDE进行优化设置。通过vcpkg自动化管理依赖项,简化libcurl的安装与配置过程,帮助开发者高效搭建网络通信功能开发环境,并提供了常见问题解决方案和实际项目中的最佳实践。

weixin_28040125的博客 249

集群部署从dorisdb到starrocks详细过程

一、环境初始化 1、关闭swapoff -a 2、设置java路径 3、初始化盘 4、准备软件包 二、下载包(从1.19后dorisdb改名为starrocks),解压文件 三、安装部署 1、启动第一个节点fe sh ./bin/start_fe.sh --helper node1:9010 --daemon 2、启动其他节点的fe sh ./bin/start_fe.sh --helper...

DBASpace的博客 3350

openwrt编译及第一个安装包教程

Date: 2017.03.14 Made:SuperDeverloper Email: na1206@live.com Target: For mt7688 based board说明:本人在学习过程中走了不少弯路,希望本文档能为后来者提供便利。欢迎复制和使用本文档。本文档记录了搭建openwrt编译环境以及快速创建ipk包(openwrt上的安装程序)。本文档在实际应用中做过几次修改,以帮

SuperDevloper的博客 1万+

告别PXE!用iPXE在CentOS 8.5上搭建一个能同时装Win11和Linux的万能网络启动盘

本文详细介绍了如何在CentOS 8.5上使用iPXE搭建支持Windows 11和Linux双系统部署的全能网络启动盘。通过对比传统PXE的局限性,展示了iPXE在HTTP协议支持、多架构适配和智能脚本方面的优势,提供从环境准备、服务配置到智能菜单开发的完整解决方案,显著提升系统部署效率。

weixin_29278805的博客 265

StarRocks3.3.1集群部署(存算一体)手动部署帮助手册

StarRocks集群部署

有问题的请私信或关注v【技术印记】留言 1746

计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)

目录一、Eth-Trunk的定义二、Eth-Trunk的工作模式(一)LACP模式1、定义2、命令(二)手工负载分担模式1、定义2、命令三、结语 一、Eth-Trunk的定义 Eth-Trunk是指设备的链路聚合,即将该设备的多个接口捆绑成一个接口,从而达到了增加带宽和提高可靠性的目的。我们要注意它是将多条物理链路,在逻辑上合并成一条,而不是串在一起。例我们将LSW1交换机S5700的三个端口(即GE0/0/1 、GE0/0/2、GE0/0/3)定义为一个Eth-Trunk接口与LSW2交换机相连,如下:

小宇y的博客 8416

StarRocks多集群:多集群部署与管理

StarRocks作为新一代高性能分布式MPP(Massively Parallel Processing,大规模并行处理)数据库,其多集群架构设计为企业级数据仓库提供了强大的扩展性和高可用性。本文将深入探讨StarRocks多集群部署的最佳实践、管理策略以及常见场景解决方案。 ## 多集群架构设计 ### 集群组件架构 StarRocks集群主要由三类节点组成: ```mermaid f...

gitblog_01023的博客 765

Qt/C++ 音视频开发 - FFmpeg 安卓版

通过将 FFmpeg 集成到 Qt/C++ 项目中,我们可以实现强大且灵活的音视频处理功能。本文介绍了在安卓平台上使用 FFmpeg 的基本步骤,包括初始化、解码、处理和编码等。实际应用代码示例展示了如何在安卓设备上播放视频。

走向CTO的路上... 1190

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

学无止境、积少成多、厚积薄发 3983

CentOS7安装部署StarRocks

StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。

Quantum-Clock 3175

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1051
上一篇: 第1.4章:FE开发环境搭建(拓展篇)
下一篇: 第2.1章:StarRocks表设计--概述
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值