达梦数据守护集群(主备)监视器常用命令介绍

概述

本文就在达梦数据库守护集群架构中,如何通过监视器命令查看主备状态及监视器其他常用命令进行介绍。

1.集群架构和规划介绍

主备集群架构如下图:

主库、备库、监视器分别部署在A,B,C三台机器上面。

集群规划见如下表格:
在这里插入图片描述
关于此集群部署和配置文件说明请参考链接:
DM8守护集群(主备)安装部署

2.监视器介绍

谈达梦守护集群监视器,首先介绍DM 数据守护系统结构参考图 :
在这里插入图片描述
主要由主库、备库、Redo 日志、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

本文内容是针对监视器常用命令展开,下面就监视器多种作用进行介绍:

监视器(dmmonitor)是基于监视器接口实现的一个命令行工具,是 DM 数据守护系统的重要组成部分。

通过监视器,可以监控数据守护系统的运行情况,获取主备库状态、守护进程状态以及主备库数据同步情况等信息。同时,监视器(dmmonitor)还提供了一系列命令来管理数据守护系统。

监视器的基本作用如下:

监控数据守护系统
接收守护进程发送的消息,显示主、备数据库状态变化,以及故障切换过程中,数据库模式、状态变化的完整过程。

管理数据守护系统
用户可以在监视器上输入命令,启动、停止守护进程的监控功能,执行主备库切换、备库故障接管等操作。

确认状态信息

用于故障自动切换的数据守护系统中,主、备库进行故障处理之前,需要通过监视器进行信息确认,确保对应的备库或者主库是真的产生异常了,避免主备库之间网络故障引发脑裂。

发起故障自动接管命令
用于故障自动切换的数据守护系统中,主库发生故障时,挑选符合接管条件的备库,并通知备库执行接管操作。

3.监视器常用命令

3.1主备集群状态查看show命令

在监视服务器启动监视器,命令如下:

[dmdba@OwumVYU4IUuZaxxP ~]$ /opt/dmdbms/bin/dmmonitor /opt/dmdbms/bin/dmmonitor.ini 

通过show命令查看主备状态:

show
2023-07-23 10:03:33 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             45331       FALSE           AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.7            5436         2023-07-23 10:03:33  GLOBAL    VALID     OPEN           GRP1_RT_02       OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
221.229.107.225     5236       OK        GRP1_RT_02       OPEN        PRIMARY   0          0            REALTIME  VALID    76768           121309          76768           121309          NONE                  

<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.5            5436         2023-07-23 10:03:33  GLOBAL    VALID     OPEN           GRP1_RT_01       OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
221.229.103.202     5236       OK        GRP1_RT_01       OPEN        STANDBY   0          0            REALTIME  VALID    57854           121308          57854           121308          NONE                  

DATABASE(GRP1_RT_01) APPLY INFO FROM (GRP1_RT_02), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[76767, 76767, 76768], (RLSN, SLSN, KLSN)[121308, 121308, 121309], N_TSK[0], TSK_MEM_USE[512] 
REDO_LSN_ARR: (121308)

下面将show 命令输出内容的字段含义进行介绍:
在这里插入图片描述
组全局字段信息
GROUP:守护进程组名。
OGUID:守护进程组配置的唯一 OGUID 值。
MON_CONFIRM:监视器是否配置为确认模式,值为 TRUE 或 FALSE。当前是非确认模式就是不能接管故障进行自动切换。
MODE:当前配置的切换模式,AUTO 表示故障自动切换模式,MANUAL 表示故障手动切换模式。
MPP_FLAG:当前是否为 MPP 主备环境,值为 TRUE 或 FALSE。因当前环境是主备架构所以此项值为FALSE。
库全局字段信息
守护进程和监视器是以库为单位进行管理的,以下信息属于库的全局信息,部分守护进程相关的信息直接取自控制守护进程。
在这里插入图片描述
显示这个集群有两个数据库,对应字段含义如下:
DW_IP:守护进程的 IP 地址,取自控制守护进程。可以理解为集群内部IP地址。
MAL_DW_PORT:守护进程的监听端口,取自控制守护进程。
INST_IP 是数据库对外服务IP地址。
INST_PORT 是数据库对外服务端口。

简单总结上面信息是数据库(主、备)的内网和外网IP地址和对应的监听端口。
守护进程信息
下面以10.0.0.7 守护进程信息输出字段进行介绍:

DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.7            5436         2023-07-23 10:03:33  GLOBAL    VALID     OPEN           GRP1_RT_02       OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID 

WTIME:守护进程本地的当前时间,取自控制守护进程。
WTYPE:守护进程配置的守护类型,包括 LOCAL/GLOBAL 两种类型,取自控制守护进程。
WCTLSTAT:守护进程控制文件状态,包括 Valid/Split/Invalid 三种状态,对于配置为本地守护类型的实例,由于不需要有守护进程控制文件,该字段值为 NULL。
WSTATUS:守护进程状态,取自控制守护进程。当前守护进程状态值是OPEN。
INAME:库名称,取自控制节点实例名。当前值是GRP1_RT_02,和上面集群规划实例名字匹配。
N_EP:库的节点个数。当前值是1、
N_OK:此字段对 DMDSC 集群内的节点有效,表示 DMDSC 集群内 OK 节点个数。
ISTATUS:数据库状态,包括 Startup/After Redo/Mount/Open/Suspend/,当前数据库状态是OPEN。
IMODE:数据库模式,包括 Unknown/Normal/Primary/Standby 这四种模式,当前是主库状态,由控制守护进程综合当前所有节点实例的模式得出。
RTYPE:数据库配置的归档类型,只统计 REALTIME/TIMELY/SYNC 这三种归档类型,如果这三种归档都没有配置,则显示为 NONE。
RSTAT:此字段对备库有效,表示主库到备库的归档状态,可能为 Valid/Invalid/Async_send/Unknown,其中 Async_send 为同步备库特有的归档状态。
对于除同步备库之外的本地守护类型备库,此字段为 NULL,对于主库本身,此字段值为 Valid。该字段值要从备库对应的主库实例上取,
如果当前没有活动主库或者备库无法确认对应的主库,则该字段显示为 Unknown。

数据库实例信息
以实例节点为维度输出字段说明:

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
221.229.107.225     5236       OK        GRP1_RT_02       OPEN        PRIMARY   0          0            REALTIME  VALID    76768           121309          76768           121309          NONE                

INST_PORT:节点实例的监听端口。
INST_OK:控制守护进程认定的节点实例状态,OK 或 ERROR。
INAME:节点实例名称。
ISTATUS:节点实例状态,包括 Startup/After Redo/Mount/Open/Suspend/Shutdown 这几种状态。
IMODE:节点实例模式,包括 Normal/Primary/Standby 这三种模式。
DSC_SEQNO:此字段对单节点可忽略,只对 DMDSC 集群内的节点有意义,表示节点在 DMDSC 集群内的序号。
DSC_CTL_NODE:此字段对单节点可忽略,只对 DMDSC 集群内的节点有意义,表示 DMDSC 集群内控制节点的序号。
RTYPE:节点实例配置的归档类型,只统计 REALTIME/TIMELY/SYNC 这三种归档类型,如果这三种归档都没有配置,则显示为 NONE。
RSTAT:此字段对备库控制节点有效,表示主库到备库控制节点的归档状态,可能为 Valid/Invalid/Async_send/Unknown,
其中 Async_send 为同步备库特有的归档状态。对于除同步备库之外的本地守护类型备库,此字段为 NULL,对于主库本身,此字段值为 Valid。
该字段值要从备库对应的主库实例上取,如果当前没有活动主库或者备库无法确认对应的主库,则该字段显示为 Unknown。
FSEQ:节点实例已经写入联机日志的RLOG_PKG包序号。
FLSN:节点实例的文件LSN,指已经写入联机日志文件的最大LSN值。
CSEQ:节点实例的系统当前PKG_SEQNO,指当前数据库最新产生的RLOG_PKG包的序号。
CLSN:节点实例的系统当前LSN,指当前数据库最新产生的LSN值。
DW_STAT_FLAG:节点当前的执行标记。

综上介绍,查看集群状态应该状态关注的字段有INST_OK,ISTATUS,IMODE三个字段。
INST_OK值都为ok为正常;
ISTATUS值都为open为正常;
IMODE值为Primary/Standby两种模式。

以下图红色框标注为示例:
在这里插入图片描述

4.其他常用命令说明

4.1 list 命令

查看守护进程的配置信息。

list
#-------------------dmwatcher configuration of instance(GRP1_RT_01)----------------------#
[GRP1]
DW_TYPE                    = GLOBAL
DW_MODE                    = AUTO
DW_ERROR_TIME              = 20
INST_ERROR_TIME            = 20
INST_RECOVER_TIME          = 60
INST_INI                   = /opt/dmdbms/data/DAMENG/dm.ini
DCR_INI                    = 
INST_OGUID                 = 45331
INST_STARTUP_CMD           = /opt/dmdbms/bin/dmserver
INST_AUTO_RESTART          = 1
INST_SERVICE_IP_CHECK      = 0
RLOG_SEND_THRESHOLD        = 0
RLOG_APPLY_THRESHOLD       = 0

#-------------------dmwatcher configuration of instance(GRP1_RT_02)----------------------#
[GRP1]
DW_TYPE                    = GLOBAL
DW_MODE                    = AUTO
DW_ERROR_TIME              = 20
INST_ERROR_TIME            = 20
INST_RECOVER_TIME          = 60
INST_INI                   = /opt/dmdbms/data/DAMENG/dm.ini
DCR_INI                    = 
INST_OGUID                 = 45331
INST_STARTUP_CMD           = /opt/dmdbms/bin/dmserver
INST_AUTO_RESTART          = 1
INST_SERVICE_IP_CHECK      = 0
RLOG_SEND_THRESHOLD        = 0
RLOG_APPLY_THRESHOLD       = 0

4.2 show global info 命令

查看所有实例组的信息。

show global info
2023-07-23 12:52:19 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             45331       FALSE           AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.7            5436         2023-07-23 12:52:18  GLOBAL    VALID     OPEN           GRP1_RT_02       OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.5            5436         2023-07-23 12:52:19  GLOBAL    VALID     OPEN           GRP1_RT_01       OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    


#================================================================================#

4.3 tip命令

查看集群当前运行状态。

tip
[monitor]         2023-07-23 12:52:56: [!!! 提示:本监视器不是确认监视器,在故障自动切换模式下如果发生主库故障,本监视器无法执行自动接管 !!!]

[monitor]         2023-07-23 12:52:56: 实例GRP1_RT_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor]         2023-07-23 12:52:56: 实例GRP1_RT_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor]         2023-07-23 12:52:56: 实例GRP1_RT_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL

[monitor]         2023-07-23 12:52:56: 实例GRP1_RT_01[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例GRP1_RT_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor]         2023-07-23 12:52:56: 实例GRP1_RT_01[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor]         2023-07-23 12:52:56: 实例GRP1_RT_01[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL

[monitor]         2023-07-23 12:52:56: 组(GRP1)当前活动实例运行正常

[monitor]         2023-07-23 12:52:57: 所有组中的活动实例运行正常!

4.4 choose switchover 命令

主机正常:查看可切换为主机的实例列表。

choose switchover GRP1
Can choose one of the following instances to do switchover:
1: GRP1_RT_01

4.5 switchover GRP1.实例名 命令

主机正常:使用指定组的指定实例,切换为主机。

choose switchover GRP1
Can choose one of the following instances to do switchover:
1: GRP1_RT_01

switchover GRP1.GRP1_RT_01
[monitor]         2023-07-23 12:57:10: 开始切换实例GRP1_RT_01
[monitor]         2023-07-23 12:57:10: 通知守护进程GRP1_RT_02切换SWITCHOVER状态
[monitor]         2023-07-23 12:57:11: 守护进程(GRP1_RT_02)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2023-07-23 12:57:12: 切换守护进程GRP1_RT_02为SWITCHOVER状态成功
[monitor]         2023-07-23 12:57:12: 通知守护进程GRP1_RT_01切换SWITCHOVER状态
[monitor]         2023-07-23 12:57:12: 守护进程(GRP1_RT_01)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2023-07-23 12:57:12: 切换守护进程GRP1_RT_01为SWITCHOVER状态成功
[monitor]         2023-07-23 12:57:12: 实例GRP1_RT_02开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2023-07-23 12:57:12: 实例GRP1_RT_02执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_01开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_01执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_02开始执行ALTER DATABASE MOUNT语句
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_02执行ALTER DATABASE MOUNT语句成功
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_01开始执行SP_APPLY_KEEP_PKG()语句
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_01执行SP_APPLY_KEEP_PKG()语句成功
[monitor]         2023-07-23 12:57:13: 实例GRP1_RT_01开始执行ALTER DATABASE MOUNT语句
[monitor]         2023-07-23 12:57:14: 实例GRP1_RT_01执行ALTER DATABASE MOUNT语句成功
[monitor]         2023-07-23 12:57:14: 实例GRP1_RT_02开始执行ALTER DATABASE STANDBY语句
[monitor]         2023-07-23 12:57:15: 实例GRP1_RT_02执行ALTER DATABASE STANDBY语句成功
[monitor]         2023-07-23 12:57:15: 实例GRP1_RT_01开始执行ALTER DATABASE PRIMARY语句
[monitor]         2023-07-23 12:57:15: 实例GRP1_RT_01执行ALTER DATABASE PRIMARY语句成功
[monitor]         2023-07-23 12:57:15: 通知实例GRP1_RT_01修改所有归档状态无效
[monitor]         2023-07-23 12:57:16: 修改所有实例归档为无效状态成功
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_02开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_02执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_01开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_01执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_02开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_02执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2023-07-23 12:57:16: 实例GRP1_RT_01开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2023-07-23 12:57:17: 实例GRP1_RT_01执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2023-07-23 12:57:17: 通知守护进程GRP1_RT_02切换OPEN状态
[monitor]         2023-07-23 12:57:17: 守护进程(GRP1_RT_02)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2023-07-23 12:57:18: 切换守护进程GRP1_RT_02为OPEN状态成功
[monitor]         2023-07-23 12:57:18: 通知守护进程GRP1_RT_01切换OPEN状态
[monitor]         2023-07-23 12:57:18: 守护进程(GRP1_RT_01)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2023-07-23 12:57:19: 切换守护进程GRP1_RT_01为OPEN状态成功
[monitor]         2023-07-23 12:57:19: 通知组(GRP1)的守护进程执行清理操作
[monitor]         2023-07-23 12:57:19: 清理守护进程(GRP1_RT_01)请求成功
2023-07-23 12:57:20 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             45331       FALSE           AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.5            5436         2023-07-23 12:57:19  GLOBAL    VALID     OPEN           GRP1_RT_01       OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
221.229.103.202     5236       OK        GRP1_RT_01       OPEN        PRIMARY   0          0            REALTIME  VALID    80240           124965          80240           124965          NONE                  

<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.0.0.7            5436         2023-07-23 12:57:19  GLOBAL    VALID     OPEN           GRP1_RT_02       OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  INVALID  

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
221.229.107.225     5236       OK        GRP1_RT_02       OPEN        STANDBY   0          0            REALTIME  INVALID  80238           124780          80238           124780          NONE                  

DATABASE(GRP1_RT_02) APPLY INFO FROM (GRP1_RT_01), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[80238, 80238, 80238], (RLSN, SLSN, KLSN)[124780, 124780, 124780], N_TSK[0], TSK_MEM_USE[0] 
REDO_LSN_ARR: (124780)


#================================================================================#

[monitor]         2023-07-23 12:57:20: 清理守护进程(GRP1_RT_02)请求成功
[monitor]         2023-07-23 12:57:20: 实例GRP1_RT_01切换成功

[monitor]         2023-07-23 12:57:21: 守护进程(GRP1_RT_01)状态切换 [OPEN-->RECOVERY]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2023-07-23 12:57:21  RECOVERY       OK        GRP1_RT_01       OPEN        PRIMARY   VALID    12       124966          124966          

[monitor]         2023-07-23 12:57:25: 守护进程(GRP1_RT_01)状态切换 [RECOVERY-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2023-07-23 12:57:25  OPEN           OK        GRP1_RT_01       OPEN        PRIMARY   VALID    12       124967          124968   

4.6 监视器其它常用命令介绍

在这里插入图片描述

总结

首先,介绍了DM数据库守护集群架构中,通过监视器查看主备状态,并详细介绍输出的字段含义。
其次,还介绍了常用的list、show global info、tip、choose switchover、switchover命令并给出了命令输出结果。
最后,介绍了监视器其它常用命令。

通过本文的介绍,大家可以通过监视器查看并判断主备集群状态并可以进行手工主备切换,希望对大家有所帮助。

关于达梦数据库更多学习内容,欢迎访问达梦社区:
https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值