• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    StarRocks简介与搭建使用详解

    发布者: 姬7089 | 发布时间: 2025-6-20 07:55| 查看数: 120| 评论数: 0|帖子模式

    StarRocks简介

    StarRocks 是一款高速、实时、全场景的MPP(大规模并行处理)分析型数据库系统,专为现代数据分析场景设计,强调亚秒级查询性能和高并发能力。它兼容MySQL协议,使得用户可以利用现有的MySQL客户端工具和BI工具进行查询和数据分析。StarRocks基于MPP架构,采用全向量化执行引擎、列式存储技术和智能优化器等先进技术,实现了数据的快速加载、实时更新以及复杂查询的高效处理。
    可以满足企业级用户的多种分析需求,广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
    MPP (Massively Parallel Processing),即大规模并行处理。是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。

    一、应用场景

    OLAP 多维分析
    ​ 利用 StarRocks 的 MPP 框架和向量化执行引擎,用户可以灵活的选择雪花模型,星型模型,宽表模型 或者预聚合模型。适用于灵活配置的 多维分析报表,业务场景包括:

    • 用户行为分析
    • 用户画像、标签分析、圈人
    • 跨主题业务分析
    • 财务报表
    • 系统监控分析
    实时数据仓库
    ​ 设计和实现了 Primary-Key 模型,能够 实时更新数据并极速查询,可以 秒级同步 TP (Transaction Processing) 数据库的变化,构建实时数仓,业务场景包括:

    • 电商大促数据分析
    • 物流行业的运单分析
    • 金融行业绩效分析、指标计算 直播质量分析
    • 广告投放分析
    • 管理驾驶舱
    高并发查询
    StarRocks 通过良好的数据分布特性,灵活的索引以及物化视图等特性,可以解决面向用户侧的分析 场景,业务场景包括:

    • 广告主报表分析
    • 零售行业渠道人员分析
    • SaaS 行业面向用户分析报表
    • Dashboard 多页面分析
    统一分析

    • 通过使用一套系统解决多维分析、高并发查询、预计算、实时分析查询等场景,降低系统复杂度和 多技术栈开发与维护成本。
    • 使用 StarRocks 统一管理数据湖和数据仓库,将高并发和实时性要求很高的业务放在 StarRocks 中 分析,也可以使用 External Catalog 和外部表进行数据湖上的分析

    二、StarRocks与MySQL比较

    StarRocks与MySQL的相同点:

    • 兼容性:StarRocks支持MySQL协议,用户可以直接使用MySQL客户端进行查询,降低了迁移和使用门槛。
    • SQL语法:基本遵循MySQL的SQL语法,使得熟悉MySQL的用户能够快速适应。
    参考手册 | StarRocks
    StarRocks与MySQL的不同点:

    • 应用场景:MySQL主要面向OLTP(在线事务处理)场景,而StarRocks专注于OLAP(在线分析处理)领域,尤其擅长海量数据的批量查询和实时分析。
    • 架构设计:StarRocks采用MPP架构,能够充分利用分布式计算资源,实现大规模数据的并行处理,相较于MySQL的单机或多主从架构,更适合大数据分析。
    • 存储与优化:StarRocks采用列式存储和向量化执行引擎,大大提高了数据压缩率和查询速度,尤其是针对大数据量、低延迟的复杂查询场景表现优异。
    • 数据导入与更新:StarRocks支持实时数据摄入,允许用户快速加载大量数据,并对已有数据进行实时更新,而MySQL在处理大规模数据批处理和实时分析时效率相对较弱。
    StarRocks的优点:

    • 高性能:极致的查询性能和并发能力,适用于实时业务报表、实时数据分析等场景。
    • 易用性:兼容MySQL协议和丰富的生态系统,易于集成现有工具和环境。
    • 扩展性:支持水平扩展,可根据业务需求动态增减计算和存储资源。
    • 实时性:支持实时数据摄取和更新,满足实时数据分析需求。
    StarRocks的缺点(或挑战):

    • 适用范围:尽管高度优化,但对于需要强事务一致性保证的OLTP场景,相比传统的关系型数据库可能不占优势。
    • 成熟度:相比于MySQL等久经市场考验的产品,StarRocks作为新兴的分析型数据库,社区和技术支持的成熟度可能还在不断提升中。
    • 生态建设:尽管兼容MySQL协议,但在特定插件、第三方工具支持等方面,与MySQL庞大的生态系统相比可能仍有差距。

    三、系统架构


    • 前端(Frontend, FE)节点

      • 作用:FE节点负责处理客户端的所有交互,包括SQL解析、查询优化、元数据管理和集群协调。
      • 构成:由多个FE节点组成,其中包含follower和observer角色,通过leader选举机制确保高可用性。
      • 功能

        • 接收并解析SQL查询请求。
        • 生成高效的查询执行计划。
        • 维护全局的元数据信息,如表结构、分区信息、节点状态等。
        • 负责整个系统的资源调度和任务分配。


    • 后端(Backend, BE)节点

      • 作用:BE节点承担实际的数据存储和计算工作,是执行查询的核心部分。
      • 构成:多个BE节点构成数据存储和处理集群,每个节点都有自己的计算和存储资源。
      • 功能

        • 存储和管理用户数据,采用列式存储和多级索引优化。
        • 执行FE节点下发的查询任务,在本地节点并行处理数据。
        • 支持数据的分布式存储和并行计算,实现快速数据检索和聚合。


    • Broker
    ​ StarRocks中和外部HDFS/对象存储等外部数据对接的中转服务,辅助提供导入导出功能。

    数据分布与复制


    • StarRocks的数据表会被划分为多个tablet(数据分片),这些tablet均匀分布在BE节点上,形成分布式数据存储。
    • 为了实现高可用和容错,StarRocks支持数据的多副本备份,每个tablet可以在不同BE节点上有多份拷贝。

    查询处理流程


    • 客户端提交SQL查询至任意一个FE节点。
    • FE节点解析SQL语句,生成最优查询计划,并将执行计划分解成子任务发送给相应的BE节点。
    • 各个BE节点并行执行子任务,并将结果返回给FE节点。
    • FE节点收集各BE节点的结果,并进行必要的合并与排序,最终将查询结果返回给客户端。

    集群扩展与稳定性


    • StarRocks通过增加FE和BE节点数量来线性扩展处理能力和存储容量。
    • 通过心跳机制监控节点健康状况,并自动调整负载均衡和故障转移,保障系统的稳定性和可用性。

    四、StarRocks搭建

    进入官网:Download StarRocks Free | StarRocks
    下载StarRocks版本3.0.9:

    上传到虚拟机:
    解压:
    1. tar -zxvf StarRocks-3.0.9.tar.gz -C /opt
    复制代码
    进入目录修改
    1. conf/fe.conf
    复制代码
    1. JVM
    复制代码
    的堆大小,根据实际的大小设置,并创建元数据目录:
    1. cd /opt/StarRocks-3.0.9/fe
    2. mkdir meta
    复制代码
    进入到解压目录的
    1. be
    复制代码
    下,创建数据存储目录:
    1. mkdir storage
    复制代码
    FE部署:

    由于我的有报错,StarRocksFE进程会停掉,查找得知8030端口被JAVA进程占用。
    1. # 端口查看:
    2. netstat -tulpn | grep :9050
    复制代码
    StarRocks FE的8030端口被占用,进入fe文件下的conf/fe.conf文件修改改为8050:
    1. meta_dir = /opt/StarRocks-3.0.9/fe/meta
    2. JAVA_HOME = /usr/java/jdk1.8.0_291-amd64
    3. http_port = 8050
    复制代码
    将改好的
    1. StarRocks
    复制代码
    包分发至另外两个 服务器中:
    1. scp -r StarRocks-3.0.9 root@xy2:/opt/
    2. scp -r StarRocks-3.0.9 root@xy3:/opt/
    复制代码
    进入目录并启动FE节点,使用jps查看进程:
    1. cd /opt/StarRocks-3.0.9/fe
    2. bin/start_fe.sh --daemon
    复制代码

    使用
    1. ip:8050
    复制代码
    可以查看web端:


    使用mysql连接FE:
    1. mysql -h xy1 -u root -P 9030
    复制代码

    使用命令查看FE状况:
    1. SHOW PROC '/frontends'\G
    复制代码

    分别在另外节点启动fe:
    1. bin/start_fe.sh --helper xy1:9010 --daemon
    复制代码

    在节点xy1的mysql中添加FE节点(角色也分为
    1. FOLLOWER
    复制代码
    1. OBSERVER
    复制代码
    ):
    1. 添加:
    2. ALTER SYSTEM ADD FOLLOWER "xy2:9010";
    3. ALTER SYSTEM ADD FOLLOWER "xy3:9010";

    4. 移除:
    5. alter system drop follower "xy2:9010";
    6. alter system drop observer "xy2:9010";

    7. 查看:
    8. SHOW PROC '/frontends'\G
    复制代码


    BE部署:

    进入BE,创建storage(这里上面已经创建):
    1. cd /opt/StarRocks-3.0.9/be
    2. mkdir storage
    复制代码
    进入conf/be.conf进行修改(每个节点都要):
    1. JAVA_HOME = /usr/java/jdk1.8.0_291-amd64
    2. storage_root_path=/opt/StarRocks-3.0.9/be/storage
    3. be_http_port = 8070
    4. priority_networks = 192.168.56.101/24
    复制代码
    启动BE:
    1. #启动:
    2. cd /opt/StarRocks-3.0.9/be
    3. ./bin/start_be.sh --daemon
    4. #停止:
    5. ./bin/stop_be.sh --daemon
    复制代码
    通过mysql客户端添加BE节点:
    1. ALTER SYSTEM ADD BACKEND "xy1:9050";
    2. ALTER SYSTEM ADD BACKEND "xy2:9050";
    3. ALTER SYSTEM ADD BACKEND "xy3:9050";

    4. #如不小心填错了,可用这个删除:
    5. alter system decommission backend "192.168.56.101:9050";
    复制代码
    MySQL查看:
    1. SHOW PROC '/backends'\G
    复制代码
    网页查看:


    部署 Broker :
    1. #启动broker的命令:(完成配置后可用,每个节点都需要启动)

    2. cd /opt/StarRocks-3.0.9

    3. ./apache_hdfs_broker/bin/start_broker.sh --daemon
    复制代码
    配置文件在
    1. /opt/StarRocks-3.0.9/apache_hdfs_broker/conf/apache_hdfs_broker.conf
    复制代码
    (具体由安装路径而定)
    复制自己的 HDFS 集群配置文件hdfs-site.xml并粘贴至
    1. conf
    复制代码
    路径下。
    当您尝试启动StarRocks的Broker服务时,系统报错提示“JAVA_HOME is not set”,这意味着在运行
    1. start_broker.sh
    复制代码
    脚本时,环境变量
    1. JAVA_HOME
    复制代码
    尚未指向Java安装目录。
    解决方法:
    我的Java的安装路径为
    1. /usr/java/jdk1.8.0_291-amd64
    复制代码
    ,可以在用户的
    1. .bashrc
    复制代码
    文件中添加以下两行来设置
    1. JAVA_HOME
    复制代码
    环境变量:
    进入:
    1. vim ~/.bashrc
    复制代码
    添加环境:
    1. export JAVA_HOME=/usr/java/jdk1.8.0_291-amd64
    2. export PATH=$JAVA_HOME/bin:$PATH
    复制代码
    保存文件后,为了让新设置立即生效,执行以下命令:
    1. source ~/.bashrc
    复制代码
    现在,
    1. JAVA_HOME
    复制代码
    环境变量应该已经设置好了,您可以再次尝试启动StarRocks的Broker服务:
    1. ./apache_hdfs_broker/bin/start_broker.sh --daemon
    复制代码
    进入mysql添加Broker节点到集群中:
    1. mysql -h xy1 -u root -P 9030
    复制代码
    1. # broker1可以设置(后续使用Broker导入需要),8000是apache_hdfs_broker.conf中的端口。

    2. ALTER SYSTEM ADD BROKER broker1 "192.168.56.101:8000";
    3. ALTER SYSTEM ADD BROKER broker1 "192.168.56.102:8000";
    4. ALTER SYSTEM ADD BROKER broker1 "192.168.56.103:8000";
    复制代码
    查看Broker节点信息:
    1. SHOW PROC "/brokers"\G
    复制代码



    FE、BE、Broker启动与查看命令:

    启动命令:
    注意:每个节点都需要启动
    1. #FE启动cd /opt/StarRocks-3.0.9/fe
    2. bin/start_fe.sh --daemon#BE启动:cd /opt/StarRocks-3.0.9/be./bin/start_be.sh --daemon#启动broker的命令:cd /opt/StarRocks-3.0.9./apache_hdfs_broker/bin/start_broker.sh --daemon#停止:./bin/stop_be.sh --daemon# 进入mysql -h xy1 -u root -P 9030
    复制代码
    状态查看命令:
    1. #使用查看FE状况:
    2. SHOW PROC '/frontends'\G

    3. #使用查看BE状况:
    4. SHOW PROC '/backends'\G

    5. #使用查看Broker状况:
    6. SHOW PROC "/brokers"\G
    复制代码
    五、案例分享

    数据从hive导入StarRocks: 在StarRocks中创建表:
    1. CREATE DATABASE IF NOT EXISTS db_df_lawsuits_v;

    2. USE db_df_lawsuits_v;

    3. CREATE TABLE db_df_lawsuits_v.t_lawsuits_rolerelations (
    4.     eid STRING,
    5.     obj_id STRING,
    6.     ename STRING,
    7.     md5 STRING,
    8.     title STRING,
    9.     case_no STRING,
    10.     cause_action STRING,
    11.     type STRING,
    12.     role STRING,
    13.     court STRING,
    14.     trial_result STRING,
    15.     url STRING,
    16.     judgeresult STRING,
    17.     sub_amount DOUBLE,
    18.     related_companies STRING,
    19.     related_relation STRING,
    20.     freezing_info STRING,
    21.     u_tags STRING,
    22.     `date` DATETIME,
    23.     pub_date DATETIME,
    24.     year_date STRING,
    25.     year_pubdate STRING,
    26.     row_update_time DATETIME,
    27.     case_type STRING,
    28.     case_cause STRING,
    29.     case_causes STRING,
    30.     doc_type STRING,
    31.     case_status STRING,
    32.     doc_id STRING,
    33.     relation_details STRING,
    34.     case_relation BIGINT,
    35.     clean_role STRING,
    36.     verdict_type STRING,
    37.     related_case_no STRING,
    38.     initial_court_code STRING,
    39.     court_area_code STRING,
    40.     source STRING,
    41.     create_time DATETIME,
    42.     local_update_time DATETIME,
    43.     local_row_update_time DATETIME
    44. )
    45. DISTRIBUTED BY HASH(eid) BUCKETS 4;
    复制代码
    hive-site.xml中设置hive.metastore.uris参数:
    1. <name>hive.metastore.uris</name>
    2.     <value>thrift://xy1:9083</value>
    复制代码
    登录StarRocks:
    1. mysql -h xy1 -u root -P 9030
    复制代码
    Hive Catalog查询与导入
    在StarRocks中执行以下SQL语句来创建一个外部Catalog,指向您的Hive Metastore服务。
    (Catalog(数据目录)功能,实现在一套系统内同时维护内、外部数据,可以不执行数据导入就轻松访问并查询存储在各类外部源的数据。)
    1. CREATE EXTERNAL CATALOG my_hive_catalog
    2. PROPERTIES (
    3.     "type" = "hive",
    4.     "hive.metastore.uris" = "thrift://xy1:9083"
    5. );
    复制代码
    查看Catalog列表:首先,您可以通过执行
    1. SHOW CATALOGS;
    复制代码
    命令来查看所有可用的Catalog。
    使用Hive Catalog:然后,使用
    1. SET CATALOG 'my_hive_catalog';
    复制代码
    命令来切换到您创建的Hive Catalog。
    查看数据库列表:通过执行
    1. SHOW DATABASES;
    复制代码
    命令,可以查看Hive Catalog中的数据库列表。
    查看表列表:选择一个数据库,然后执行
    1. SHOW TABLES;
    复制代码
    来查看该数据库中的表列表。
    查询表结构:使用
    1. DESCRIBE <table_name>;
    复制代码
    命令来查看表的结构和分区信息。
    禁用严格模式:在插入数据之前,您可以通过设置会话变量来禁用严格模式,这样StarRocks会将不符合条件的字段值转换为NULL,而不是过滤掉整行数据。执行以下命令:
    1. SET enable_insert_strict = false;
    复制代码
    如果开启严格模式,StarRocks 会把错误的数据行过滤掉,只导入正确的数据行,并返回错误数据详情。如果关闭严格模式,StarRocks 会把转换失败的错误字段转换成
    1. NULL
    复制代码
    值,并把这些包含
    1. NULL
    复制代码
    值的错误数据行跟正确的数据行一起导入。
    数据导入
    1. INSERT INTO db_df_lawsuits_v.t_lawsuits_rolerelations
    2. SELECT * FROM my_hive_catalog.db_df_lawsuits_v.t_lawsuits_rolerelations;
    复制代码
    这条命令影响了25600行数据,并且耗时1.27秒完成,执行速度很快。
    8.监控导入状态:导入作业提交后,先选择数据库,然后您可以通过
    1. SHOW LOAD
    复制代码
    命令来监控导入作业的状态。
    数据使用Broker导入:
    BROKER LOAD | StarRocks
    基本原理:
    提交导入作业以后,FE 会生成对应的查询计划,并根据目前可用 BE 的个数和源数据文件的大小,将查询计划分配给多个 BE 执行。每个 BE 负责执行一部分导入任务。BE 在执行过程中,会从 HDFS 或云存储系统拉取数据,并且会在对数据进行预处理之后将数据导入到 StarRocks 中。所有 BE 均完成导入后,由 FE 最终判断导入作业是否成功。
    支持格式:
    CSV、ORCFile、Parquet等文件格式
    在StarRocks中创建表:
    1. USE db_df_lawsuits_v;

    2. CREATE TABLE db_df_lawsuits_v.test_brok (
    3.     eid STRING,
    4.     obj_id STRING,
    5.     ename STRING,
    6.     md5 STRING,
    7.     title STRING,
    8.     case_no STRING,
    9.     cause_action STRING,
    10.     `type` STRING,
    11.     `role` STRING,
    12.     court STRING,
    13.     trial_result STRING,
    14.     url STRING,
    15.     judgeresult STRING,
    16.     sub_amount DOUBLE,
    17.     related_companies STRING,
    18.     related_relation STRING,
    19.     freezing_info STRING,
    20.     u_tags STRING,
    21.     `date` DATETIME,
    22.     pub_date DATETIME,
    23.     year_date STRING,
    24.     year_pubdate STRING,
    25.     row_update_time DATETIME,
    26.     case_type STRING,
    27.     case_cause STRING,
    28.     case_causes STRING,
    29.     doc_type STRING,
    30.     case_status STRING,
    31.     doc_id STRING,
    32.     relation_details STRING,
    33.     case_relation BIGINT,
    34.     clean_role STRING,
    35.     verdict_type STRING,
    36.     related_case_no STRING,
    37.     initial_court_code STRING,
    38.     court_area_code STRING,
    39.     source STRING,
    40.     create_time DATETIME,
    41.     local_update_time DATETIME,
    42.     local_row_update_time DATETIME
    43. )
    44. DISTRIBUTED BY HASH(eid) BUCKETS 4;
    复制代码
    使用broker导入语句:
    1. -- 加载标签 `db_df_lawsuits_v.test_brok2`,该标签表示从HDFS加载数据到StarRocks数据库中的一个导入任务
    2. LOAD LABEL db_df_lawsuits_v.test_brok2
    3. (
    4.     -- 指定数据源,即HDFS上的ORC格式数据文件集合
    5.     DATA INFILE("hdfs://192.168.56.101:9870/user/hive/warehouse/db_df_lawsuits_v.db/t_lawsuits_rolerelations/*")
    6.     -- 导入数据的目标表是名为 `test_brok1` 的表
    7.     INTO TABLE test_brok1
    8.     -- 指定数据文件的格式为 ORC 格式
    9.     FORMAT AS "orc"
    10. )
    11. -- 使用名为 `broker1` 的HDFS Broker组件进行数据搬运
    12. WITH BROKER
    13. (
    14.     'name' = 'broker1',
    15.     'type' = 'hdfs',
    16.     -- 配置HDFS Broker连接HDFS所需的认证信息
    17.     'properties' = '{"username": "root", "password": "cqie"}'
    18. )
    19. -- 设置导入任务的超时时间为36000秒(即10小时)
    20. PROPERTIES
    21. (
    22.     'timeout' = '36000'
    23. );
    复制代码
    1. -- 查看所有LOAD LABEL任务
    2. SHOW TABLES;

    3. -- 查看特定标签的任务
    4. SHOW TABLES FROM db_df_lawsuits_v;

    5. -- 查看导入作业的列表和状态
    6. SHOW LOAD;
    复制代码
    删除:
    如果您想删除表中的数据,可以使用
    1. DELETE
    复制代码
    语句。这个语句允许您按条件删除表中的数据。例如:
    1. DELETE FROM table_name WHERE condition;
    复制代码
    如果您想删除整个表(标签),则需要使用
    1. DROP TABLE
    复制代码
    语句。这将删除表及其所有数据,操作不可逆转。例如:
    1. DROP TABLE table_name;
    复制代码
    请注意,在执行
    1. DROP TABLE
    复制代码
    操作之前,确保您已经备份了任何重要数据,因为这个操作会永久删除表和表中的所有数据。
    如果您是想清空表中的数据但保留表结构,可以使用
    1. TRUNCATE TABLE
    复制代码
    语句。这个命令会删除表中的所有数据,但表结构仍然保留。例如:
    1. TRUNCATE TABLE table_name;
    复制代码
    第三方平台方式将数据导入到starrocks
    python导入数据
    创表SQL
    1. CREATE TABLE `table1` ( `id` int(11) NOT NULL COMMENT "用户 ID", `name` varchar(65533) NULL COMMENT "用户姓名", `score` int(11) NOT NULL COMMENT "用户得分" ) ENGINE=OLAP PRIMARY KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10; CREATE TABLE `table2` ( `id` int(11) NOT NULL COMMENT "城市 ID", `city` varchar(65533) NULL COMMENT "城市名称" ) ENGINE=OLAP PRIMARY KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10;
    复制代码
    Python代码
    1. import requests,json
    2. #验证密码
    3. Session=requests.Session()
    4. Session.auth=('root','')
    5. #csv导入
    6. table='table1'
    7. headers_csv={
    8. 'label':'123',
    9. #分隔符
    10. 'column_separator':',',
    11. #字段
    12. 'columns': 'id, name, score'
    13. }
    14. '''
    15. 1,Lily,23
    16. 2,Rose,23
    17. 3,Alice,24
    18. 4,Julia,25
    19. '''
    20. data=open('score.csv','r').read()
    21. r=Session.put(f'http://10.8.16.200:8040/api/testdb/{table}/_stream_load',headers=
    22. headers_csv,data=data)
    23. r.json()
    24. #json导入
    25. table='table2'
    26. #请求头
    27. headers_json={
    28. 'Content-type': 'application/json',
    29. "Expect": "100-continue",
    30. 'strict_mode': 'true',
    31. 'format': 'json',
    32. #jsonpaths https://www.cnblogs.com/youring2/p/10942728.html
    33. 'jsonpaths': '["$.name", "$.code"]',
    34. 'columns': 'city,tmp_id, id = tmp_id * 100'
    35. }
    36. for i in [{"name": "上海", "code": 1},{"name": "重庆", "code": 3}]:
    37. data=json.dumps(i)
    38. r=Session.put(f'http://10.8.16.200:8040/api/testdb/{table}/_stream_load',headers
    39. =headers_json,data=data)
    40. print(r.json())
    复制代码
    以上就是StarRocks简介与搭建使用详解的详细内容,更多关于StarRocks搭建使用的资料请关注脚本之家其它相关文章!

    来源:https://www.jb51.net/database/337216p1l.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表