玩转 Doris|SelectDB:单机安装指南助你快速起步

86dfd584bcd87f951399468d09c3c2ad.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,江湖人称“强哥”,青学会MOP技术社区联合创始人,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及金仓KCA、KCP、PCA、PCTA、OBCA、OGCA 等众多国产数据库认证证书,今天和大家一起来看看玩转 Doris|SelectDB:单机安装指南助你快速起步欢迎点击下方“JiekeXu DBA之路”公众号名片可关注我的微信公众号,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送给你,谢谢!后台回复【加群】,添加我个人微信拉你进群交流学习。

5836d7f572c9804336a78864a775d3a9.png

Doris

Doris 是百度开源的一款为数据分析而生的数据库。从 2008 年诞生之日起,Doris 的每一次进步都是为了解决切实的 OLAP 业务痛点,每一次转变都是在应对不同的业务挑战。Doris 的发展历程大致如下图:

506aa410ff634cd7f7ceafcb63da302b.png

Doris 架构图如下:

4fd1ba235813e19615a593c358b186ed.png

在架构方面,Doris 只有两类进程:一类是FE(FrontEnd),可以理解为 Doris 的管理节点,主要负责用户请求的接入、查询计划的解析、元数据的存储和集群管理相关工作另一类是BE(BackEnd)主要负责数据存储、查询计划执行。这两类进程都可以横向扩展。除此之外,Doris 不依赖任何第三方系统(如 HDFS、ZooKeeper 等)。

FE 节点包含 Leader、Follower 和 Observer 三种角色。默认一个集群只能有一个 Leader,可以有多个 Follower 和 Observer。其中,Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,FE 默认就是 Leader。

FE节点主要包含存储管理模块、状态管理模块、协调模块、元数据模块和元数据缓存模块。存储管理模块负责管理所有的元数据信息,包括表信息、Tablet信息、Tablet的副本信息等,还负责管理用户的权限信息(即用户的认证信息和授权信息)和数据的导入任务等。状态管理模块负责管理所有BE进程的存活状态、查询负载等非持久化信息,并提供发布订阅接口。协调模块负责接收用户发来的请求,然后进行语句解析、生成执行规划,根据当前集群的状态,对执行规划进行调度。元数据模块负责对元数据的读写,只有Leader角色拥有此权限。元数据缓存模块负责同步元数据,以供语句解析、生成执行规划,主要是Follower和Observer角色拥有此权限。

BE 节点可以无限扩展,并且所有BE节点的角色都是对等的。在集群足够大的情况下,部分BE节点下线不影响集群提供服务。BE节点主要由存储引擎和查询执行器组成。存储引擎负责管理节点本地的Tablet数据,发送或者接收数据并保存副本,定期合并、更新多个版本的数据,以减少存储占用。存储引擎还负责接收来自查询执行器的数据读取请求和批量数据导入请求。在MPP集群中执行查询时,会分解为一个树状的执行树,由 Coordinator 来协调执行,树的叶子节点也叫计划片断(PlanFragment),每个 PlanFragment 分配一个BE节点的查询执行器。

Doris 竞争对手

Greenplum(GP):Greenplum 数据库具有非常丰富的ETL功能,几乎完全兼容PostgreSQL 数据库语法,不仅开发简单,入门门槛低,并且与外围的 BI 工具和 ETL 工具兼容得非常好。

Kylin: Kylin 是一个开源的、分布式的分析型数据仓库,提供基于 Hadoop、Spark 的 SQL 查询接口及多维分析(OLAP)能力,以支持对超大规模数据的查询。

ClickHouse:ClickHouse 作为一款开源的列存储数据库管理系统,支持线性扩展,具有安装简单、高可靠性、高性能等特点。

StarRocks:谈到 Doris,不得不谈 StarRocks(早期叫作 DorisDB),这块好像搞不懂,据说和 Doris 有一些爱恨情仇,下面是 StarRocks 一个简单的介绍,具体的信息就不知道了。

StarRocks


StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库,在开源 Doris 的基础上进行了一系列优化,率先完成了向量化执行引擎的开发,StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷,镜舟科技通过开源战略拓宽了 StarRocks 的应用场景。首次发布时间 2021-01-01,官网:https://www.starrocks.io。开源地址:https://github.com/StarRocks/StarRocks 官方文档:https://docs.starrocks.io/zh/docs/introduction/Architecture/

88f623b298edfc9d978760564b049614.png

今天主要介绍的是 Doris 的商业版本 SelectDB,来自飞轮科技。

SelectDB 简介


SelectDB 是北京飞轮科技有限公司基于 Apache Doris 项目开发的新一代实时数据仓库,具备实时性、云原生、开源等特点,主要产品包括 SelectDB Cloud 和 SelectDB Enterprise,能够差异化地满足来自云上和私有化部署用户的不同需求。首次发布时间2022-12-06,官网:https://www.selectdb.com/。这款就是 Doris 的商业化产品了。

Cluster Manager for Apache Doris(以下简称 Doris Manager 或者 Manager)是 SelectDB 推出的管理运维 Apache Doris、SelectDB Doris 集群的工具。今天我们仅是测试了解,故先不安装 Doris Manager 24.x直接下载安装 SelectDB Enterprise Core

说明:我这里是去年底下载的 3.0 的版本,现在看好像官网没有了 3.0 的版本,只有 2024 年 11 月 12 日发布的 2.1.7 版本,不过也没关系,这是个人学习测试,版本区别不是很大,初次学习而已,都一样。

selectdb-doris-3.0.0-bin-x64.tar.gz  https://qa-build.oss-cn-beijing.aliyuncs.com/enterprise-doris-release-output/selectdb-doris-3.0.0-bin-x64.tar.gz

c16fac8352ca21ac02cf250c3ded42ef.png

安装 SelectDB


Apache Doris 能够运行在绝大多数主流的 Linux 服务器上。建议 Linux 选择较新的 CentOS 和 Ubuntu,然后 GCC 版本 4.8.2及以上。安装前,确保以下 Linux 系统相关设置。为了方便安装使用,包中已经内置了 Java17,不需要单独安装 Java。下载之后可以直接运行。然后我这里单独指定了安装用户和路径,官网好像也没有说明安装用户使用非 root 安装,这里尝试一下使用 doris 用户组安装吧。

创建用户

/usr/sbin/groupadd -g 1501 doris
/usr/sbin/useradd -u 1502 -g doris doris
echo 'DRin73_9' | passwd --stdin doris
mkdir -p /data/SelectDB
chown -R doris:doris /data/SelectDB

操作系统检查

当安装 Doris 时,建议选择支持 AVX2 指令集的机器,以利用 AVX2 的向量化能力实现查询向量化加速。

运行以下命令,有输出结果,及表示机器支持 AVX2 指令集。

cat /proc/cpuinfo | grep avx2

Doris 没有强制的内存限制。一般在生产环境中,可以根据以下建议选择内存大小:FE 节点建议至少 16GB以上,BE 节点建议至少是CPU核数的4倍,8倍性能更好。

Doris 推荐使用 EXT4 或 XFS 文件系统。EXT4 文件系统具有良好的稳定性、性能和较低的碎片化问题。XFS 文件系统在处理大规模数据和高并发写操作时表现优越,适合高吞吐量应用。然后推荐数据存放在 SSD 或 HDD 硬盘或者对象存储中。

42295c94e59eeafbc6d54585f483cddb.png

https://doris.apache.org/zh-CN/docs/install/preparation/env-checking

操作系统设置

确保系统有足够大的虚拟内存区域

为了保证 Doris 有足够的内存映射区域来处理大量数据,需要修改 VMA(虚拟内存区域)。如果没有足够的内存映射区域,Doris 在启动或运行时可能会遇到 Too many open files 或类似的错误。

通过以下命令可以永久修改虚拟内存区域至少为 2000000,并立即生效:

cat >> /etc/sysctl.conf << EOF  
vm.max_map_count = 2000000  
EOF  
  
# Take effect immediately  
sysctl -p
确保系统有足够大的打开文件句柄数

Doris 由于依赖大量文件来管理表数据,所以需要将系统对程序打开文件数的限制调高。

通过以下命令可以调整最大文件句柄数。在调整后,需要重启会话以生效配置:

vi /etc/security/limits.conf

##################################
########For Doris Setting#########
doris soft nofile 1000000
doris hard nofile 1000000
确保系统关闭透明大页

在高负载低延迟的场景中,建议关闭操作系统透明大页(Transparent Huge Pages, THP),避免其带来的性能波动和内存碎片问题,确保 Doris 能够稳定高效地使用内存。

使用以下命令临时关闭透明大页:

echo madvise > /sys/kernel/mm/transparent_hugepage/enabled  
echo madvise > /sys/kernel/mm/transparent_hugepage/defrag

--如果需要永久关闭透明大页,可以使用以下命令,在下一次宿主机重启后生效:

cat >> /etc/rc.d/rc.local << EOF  
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled  
echo madvise > /sys/kernel/mm/transparent_hugepage/defrag  
EOF  
chmod +x /etc/rc.d/rc.local
确保 CPU 不使用省电模式

在部署 Doris 时检修关闭 CPU 的省电模式,以确保 Doris 在高负载时提供稳定的高性能,避免由于 CPU 频率降低导致的性能波动、响应延迟和系统瓶颈,提高 Doris 的可靠性和吞吐量。如果您的 CPU 不支持 Scaling Governor,可以跳过此项配置。

通过以下命令可以关闭 CPU 省电模式:

echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
确保网络连接溢出时自动重置新连接

在部署 Doris 时,需要确保在 TCP 连接的发送缓冲区溢出时,连接会被立即中断,以防止 Doris 在高负载或高并发情况下出现缓冲区阻塞,避免连接被长时间挂起,从而提高系统的响应性和稳定性。

通过以下命令可以永久设置系统自动重置新链接,并立即生效:

cat >> /etc/sysctl.conf << EOF  
net.ipv4.tcp_abort_on_overflow=1  
EOF  
  
# Take effect immediately  
sysctl -p
确保 Doris 相关端口畅通或关闭系统防火墙

如果发现端口不通,可以试着关闭防火墙,确认是否是本机防火墙造成。如果是防火墙造成,可以根据配置的 Doris 各组件端口打开相应的端口通信。

sudo systemctl stop firewalld.service  
sudo systemctl disable firewalld.service
确定部署集群机器安装 NTP 服务

Doris 的元数据要求时间精度要小于 5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。

通常情况下,可以通过配置 NTP 服务保证各节点时钟同步。

sudo systemctl start_ntpd.service  
sudo systemctl enable_ntpd.service
关闭交换分区(swap)

Linux交换分区会给 Doris 带来很严重的性能问题,需要禁用交换分区,否则 BE 无法启动。

swap 分区是内核发现内存紧张时,会按照自己的策略将部分内存数据移动到配置的 swap 分区,由于内核策略不能充分了解应用的行为,会对 Doris 性能造成较大影响。所以建议关闭。

通过以下命令可以临时或者永久关闭。

临时关闭,下次机器启动时,swap 还会被打开。

swapoff -a

永久关闭,使用 Linux root 账户,注释掉 /etc/fstab 中的 swap 分区,重启即可彻底关闭 swap 分区。

[root@jiekexu log]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Jun  1 06:31:48 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-lvroot /                       xfs     defaults        0 0
UUID=7c0d7acc-5935-4db0-9c31-467da362570e /boot                   xfs     defaults        0 0
#/dev/mapper/rootvg-lvswap swap                    swap    defaults        0 0
/dev/mapper/datavg01-lvdata01  /data xfs defaults 0 0

解压安装包

# tar zxf selectdb-doris-3.0.0-bin-x64.tar.gz 
# cp -r /data/soft/selectdb-doris-3.0.0-bin-x64 /data/SelectDB/selectdb
# chown -R doris:doris selectdb

解压后的目录包含以下内容

selectdb_doris_x.x.x.x-x86_64
|-- apache_hdfs_broker    ## FS_Broker
|-- be                    ## Doris be
|-- fe                    ## Doris FE
|-- java17                ## Doris FE/BE/Broker 运行所依赖的 Java 运行环境
|-- jdbc_drivers          ## Doris FE/BE JDBC 外表及Muitl Catalog 运行所依赖的数据库驱动

f80358cf356bd9d3983fa068a0ac987c.png

部署 FE

如果只是单独部署 FE ,而不部署其他服务,可以只保留这个文件夹下的 fe、java17 及 jdbc_drivers,其他目录可以删除,这里单机都需要部署,不可删除。这里我们切换到 doris 用户来操作。

修改 doris 用户环境变量
vi .bash_profile

export DORIS_HOME=/data/SelectDB/selectdb
PATH=$PATH:$DORIS_HOME/bin

source .bash_profile
修改 FE 配置文件

配置文件为conf/fe.conf。其中注意:meta_dir是元数据存放位置。默认值为 ${DORIS_HOME}/doris-meta。需手动创建该目录。

注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置

mkdir -p /data/SelectDB/selectdb/doris-meta

vim /data/SelectDB/selectdb/fe/conf/fe.conf

JAVA_OPTS_FOR_JDK_17="-Djavax.security.auth.useSubjectCredsOnly=false -Xmx4096m -Xms4096m

fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 8GB,建议根据机器内存大小做相应调整,我这里调整为 4GB 即可。

启动 FE
[doris@jiekexu fe]$ bin/start_fe.sh --daemon
/data/SelectDB/selectdb/java17

FE 进程启动进入后台执行。日志默认存放在 log/ 目录下。如启动失败,可以通过查看 log/fe.log 或者 log/fe.out 查看错误信息。

使用 curl 或者 jps 命令检查

curl [http://127.0.0.1:8030/api/bootstrap](http://127.0.0.1:8030/api/bootstrap)

/data/SelectDB/selectdb/java17/bin/jps -l

d65eb645a25748539a1d2c80556bd5d3.png

当然也可以通过 MySQL 客户端或者 Web UI 进行相关信息查看,下面是通过 Web UI 来查看状态的,并在 MySQL 库执行下面命令来查看 BE 的运行情况。

SHOW FRONTENDS;

Doris FE 内置 Web UI,用户无须安装 MySQL 客户端,即可通过内置的 Web UI 进行 SQL 查询和其它相关信息的查看。

在浏览器中输入 http://fe_ip:fe_port, 比如 http://192.168.217.173:8030,打开 Doris 内置的 Web 控制台。内置 Web 控制台,主要供集群 root 账户使用,默认安装后 root 账户密码为空

660860a58aa6327d52bbb324600311ae.png

9f45dccdce286f598d84739e0c96239a.png

Playground 中执行这种和具体数据库/表没有关系的语句,务必在左侧库栏里随意选择一个数据库,才能执行成功,这个限制,稍后会去掉。

当前内置的 Web 控制台,还不能执行 SET 类型的 SQL 语句,所以,在 Web 控制台,当前还不能通过执行 SET PASSWORD FOR 'user' = PASSWORD('user_password') `类似语句。

部署BE

BE 进程应用于数据的计算与存储。如果只是单独部署 BE ,而不部署其他服务,可以只保留这个文件夹下的 be、java17 及 jdbc_drivers,其他目录可以删除,这里单机都需要部署,不可删除。这里我们也切换到 doris 用户来操作。

修改 BE 配置文件

修改 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。

可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开。如果用户不是SSD和HDD磁盘混合使用的情况,不需要按照如下示例一和示例二的配置方法配置,只需指定存储目录即可

示例一如下:

注意:如果是SSD磁盘要在目录后面加上.SSD,HDD磁盘在目录后面加.HDD

storage_root_path=/home/disk1/doris.HDD;/home/disk2/doris.SSD;/home/disk2/doris

说明

  • • /home/disk1/doris.HDD :表示存储介质是HDD;

  • • /home/disk2/doris.SSD:表示存储介质是SSD;

  • • /home/disk2/doris:表示存储介质是HDD(默认)

示例二如下:

注意:不论HDD磁盘目录还是SSD磁盘目录,都无需添加后缀,storage_root_path参数里指定medium即可

storage_root_path=/home/disk1/doris,medium:hdd;/home/disk2/doris,medium:ssd

说明

  • • /home/disk1/doris,medium:hdd:表示存储介质是HDD;

  • • /home/disk2/doris,medium:ssd:表示存储介质是SSD;

本次安装为个人学习测试,磁盘目录可自定义,故我这里的目录为 /data/SelectDB/data,需要先创建好此目录。

mkdir -p /data/SelectDB/data

vim /data/SelectDB/selectdb/be/conf/be.conf
--打开下面此行的注释,并修改为此路径

storage_root_path = /data/SelectDB/data
如何查看是否SSD磁盘
cat /sys/block/sdb/queue/rotational

lsblk -d -o name,rota

c935c374f9a56377cf95cf3ab880cfee.png

在 FE 中添加 BE 节点

BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client连接到 FE:

./mysql-client -h fe_host -P query_port -uroot

其中 fe_host 为 FE 所在节点 ip;query_port 在 fe/conf/fe.conf 中,默认为 9030;默认使用 root 账户,无密码登录。

登录后,执行以下命令来添加每一个 BE:

ALTER SYSTEM ADD BACKEND "be_host:heartbeat-service_port"

其中 be_host 为 BE 所在节点 ip;heartbeat_service_port 在 be/conf/be.conf 中,默认为 9050。

在客户端或者 Web UI 执行此命令添加

ALTER SYSTEM ADD BACKEND "192.168.217.173:9050";
启动 BE
bin/start_be.sh --daemon

BE 进程将启动并进入后台执行。日志默认存放在 be/log/ 目录下。如启动失败,可以通过查看 be/log/be.log 或者 be/log/be.out 查看错误信息。

eb028e1c97513cf8acc17456103102af.png

查看状态

mysql -uroot -P<fe_query_port> -h<fe_ip_address>

show backends;   --Alive 为 true 表示节点存活

简单连接使用


Apache Doris 采用 MySQL 网络连接协议,兼容 MySQL 生态的命令行工具、JDBC/ODBC 和各种可视化工具。同时 Apache Doris 也内置了一个简单的 Web UI,方便使用。

通过 MySQL Client 登录 Doris 集群。

通过 show frontends 与 show backends 可以查看数据库各实例的信息。

修改 root 密码

在创建 Doris 集群时,系统会自动创建一个名为 root 的用户,并默认设置其密码为空。为了安全起见,建议在集群创建后立即为 root 用户设置一个新密码。

因为 Web UI 客户端不支持 SET 等命令,故须找一台安装 MySQL 客户端的主机远程登录。

mysql -uroot -p -P 9030 -h 192.168.217.173

SET PASSWORD = PASSWORD('Doris@root12');

1ce9a32193453e7e48a56a8c201b18ac.png

创建用户和表

Doris 建表语句如下图所示:

a8952e061d97b4c23d071b058b39682f.png

创建用户和表

CREATE USER 'jiekexu' @'%' IDENTIFIED by 'Doris@root12';
grant all on *.* to 'jiekexu' @'%';
create database jiekexu;
show databases;
use jiekexu;
CREATE TABLE IF NOT EXISTS example_tbl_duplicate
(
    log_time        DATETIME       NOT NULL,
    log_type        INT            NOT NULL,
    error_code      INT,
    error_msg       VARCHAR(1024),
    op_id           BIGINT,
    op_time         DATETIME
)
DUPLICATE KEY(log_time, log_type, error_code)
DISTRIBUTED BY HASH(log_type) BUCKETS 10 
Properties(“replication_num”=”1”);

INSERT INTO example_tbl_duplicate VALUES
('2024-11-01 00:00:00', 2, 2, 'timeout', 12, '2024-11-01 01:00:00'),
('2024-11-02 00:00:00', 1, 2, 'success', 13, '2024-11-02 01:00:00'),
('2024-11-03 00:00:00', 2, 2, 'unknown', 13, '2024-11-03 01:00:00'),
('2024-11-04 00:00:00', 2, 2, 'unknown', 12, '2024-11-04 01:00:00');
INSERT INTO example_tbl_duplicate VALUES
('2024-11-01 00:00:00', 2, 2, 'timeout', 12, '2024-11-01 01:00:00'),
('2024-11-01 00:00:00', 2, 2, 'unknown', 13, '2024-11-01 01:00:00');

如果报错:

ERROR 1105 (HY000): errCode = 2, detailMessage = errCode = 2, detailMessage = replication num should be less than the number of available backends. replication num is 3, available backend num is 1

需要修改建表的副本数, "replication_num"="1" 这个参数,不然会报错无法创建表。

d76955637ac3a6038cae70f808b87fe9.png

参考链接


https://doris.apache.org/zh-CN/docs/gettingStarted/what-is-apache-doris
https://doris.apache.org/zh-CN/docs/install/deploy-manually/storage-compute-coupled-deploy-manually
https://www.modb.pro/wiki/682
https://www.starrocks.io
https://www.modb.pro/wiki/3132
https://www.selectdb.com/
https://dev.mysql.com/doc/refman/5.7/en/grant.html

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
—————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
优快云 :https://blog.youkuaiyun.com/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
—————————————————————

2e6e20a2223d391da8dc658f1f8ba70b.gif

分享几个数据库备份脚本

一文搞懂 Oracle 统计信息
 
 

我的 Oracle ACE 心路历程

MOP 系列|MOP 三种主流数据库索引简介

Oracle 主流版本不同架构下的静默安装指南
 
 

关机重启导致 ASM 磁盘丢失数据库无法启动

Oracle SQL 性能分析(SPA)原理与实战演练
 
 

Oracle 11g 升级到 19c 需要关注的几个问题

Windows 10 环境下 MySQL 8.0.33 安装指南

SQL 大全(四)|数据库迁移升级时常用 SQL 语句

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

 
 

Oracle 大数据量导出工具——sqluldr2 的安装与使用

Oracle ACE 视角下的国产数据库现状与选型及应对策略

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践

在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!

6896be457e84c4c89221d17cd5e1e74f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值