DSC+DW集群搭建

配置 DMDSC  主库环境

DSC搭建过程参考 如下链接

达梦数据共享集群(DSC)---搭建过程_xuekai20080901的博客-CSDN博客

打开归档,

sed -i s/'ARCH_INI                        = 0'/'ARCH_INI                        = 1'/g    /home/dmdba/data/dsc0_config/dm.ini
cat >/home/dmdba/data/dsc0_config/dmarch.ini<<EOF
        ARCH_LOCAL_SHARE  = 1
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = +DMDATA/data/arch/dsc0
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1
[ARCHIVE_REMOTE]
        ARCH_TYPE  = REMOTE
        ARCH_DEST  = DSC1
        ARCH_FILE_SIZE = 1024
        ARCH_SPACE_LIMIT  = 20480
        ARCH_INCOMING_PATH = +DMDATA/data/arch/dsc1
EOF

./dmasmtool DCR_INI=/home/dmdba/data/dmdcr.ini
sed -i s/'ARCH_INI                        = 0'/'ARCH_INI                        = 1'/g    /home/dmdba/data/dsc1_config/dm.ini
cat >/home/dmdba/data/dsc1_config/dmarch.ini<<EOF
        ARCH_LOCAL_SHARE  = 1
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = +DMDATA/data/arch/dsc1
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1
[ARCHIVE_REMOTE]
        ARCH_TYPE  = REMOTE
        ARCH_DEST  = DSC0
        ARCH_FILE_SIZE = 1024
        ARCH_SPACE_LIMIT  = 20480
        ARCH_INCOMING_PATH = +DMDATA/data/arch/dsc0
EOF

备份主库,然后把备份文件拷贝到 备库。

./dmrman use_ap=2 dcr_ini=/home/dmdba/data/dmdcr.ini
BACKUP  DATABASE  '/home/dmdba/data/dsc0_config/dm.ini'  FULL  BACKUPSET '/home/dmdba/data/db_full_bak_for_DSC'

配置单节点备库

准备单节点备库

#初始化备库
./dminit path=/dm/data/EP01/

#还原传输过来的备库
./dmrman use_ap=2

RESTORE  DATABASE  '/dm/data/EP01/DAMENG/dm.ini'  FROM  BACKUPSET '/home/dmdba/db_full_bak_for_DSC';
RECOVER  DATABASE  '/dm/data/EP01/DAMENG/dm.ini'  FROM  BACKUPSET '/home/dmdba/db_full_bak_for_DSC';
RECOVER  DATABASE '/dm/data/EP01/DAMENG/dm.ini' UPDATE DB_MAGIC;

修改主备库参数。

DSC0
sed -i s/'DW_INACTIVE_INTERVAL            = 60'/'DW_INACTIVE_INTERVAL          = 60'/g    /home/dmdba/data/dsc0_config/dm.ini
sed -i s/'ALTER_MODE_STATUS               = 1'/'ALTER_MODE_STATUS               = 0'/g    /home/dmdba/data/dsc0_config/dm.ini
sed -i s/'ENABLE_OFFLINE_TS               = 1'/'ENABLE_OFFLINE_TS               = 2'/g    /home/dmdba/data/dsc0_config/dm.ini
sed -i s/'MAL_INI                         = 0'/'MAL_INI                         = 1'/g    /home/dmdba/data/dsc0_config/dm.ini
sed -i s/'ARCH_INI                        = 0'/'ARCH_INI                        = 1'/g    /home/dmdba/data/dsc0_config/dm.ini
sed -i s/'RLOG_SEND_APPLY_MON             = 64'/'RLOG_SEND_APPLY_MON           = 64'/g    /home/dmdba/data/dsc0_config/dm.ini 

DSC1
sed -i s/'DW_INACTIVE_INTERVAL            = 60'/'DW_INACTIVE_INTERVAL          = 60'/g    /home/dmdba/data/dsc1_config/dm.ini
sed -i s/'ALTER_MODE_STATUS               = 1'/'ALTER_MODE_STATUS               = 0'/g    /home/dmdba/data/dsc1_config/dm.ini
sed -i s/'ENABLE_OFFLINE_TS               = 1'/'ENABLE_OFFLINE_TS               = 2'/g    /home/dmdba/data/dsc1_config/dm.ini
sed -i s/'MAL_INI                         = 0'/'MAL_INI                         = 1'/g    /home/dmdba/data/dsc1_config/dm.ini
sed -i s/'ARCH_INI                        = 0'/'ARCH_INI                        = 1'/g    /home/dmdba/data/dsc1_config/dm.ini
sed -i s/'RLOG_SEND_APPLY_MON             = 64'/'RLOG_SEND_APPLY_MON           = 64'/g    /home/dmdba/data/dsc1_config/dm.ini

DW
sed -i s/'INSTANCE_NAME                   = DMSERVER'/'INSTANCE_NAME  = DW         '/g    /dm/data/EP01/DAMENG/dm.ini
sed -i s/'DW_INACTIVE_INTERVAL            = 60'/'DW_INACTIVE_INTERVAL          = 60'/g    /dm/data/EP01/DAMENG/dm.ini
sed -i s/'ALTER_MODE_STATUS               = 1'/'ALTER_MODE_STATUS               = 0'/g    /dm/data/EP01/DAMENG/dm.ini
sed -i s/'ENABLE_OFFLINE_TS               = 1'/'ENABLE_OFFLINE_TS               = 2'/g    /dm/data/EP01/DAMENG/dm.ini
sed -i s/'MAL_INI                         = 0'/'MAL_INI                         = 1'/g    /dm/data/EP01/DAMENG/dm.ini
sed -i s/'ARCH_INI                        = 0'/'ARCH_INI                        = 1'/g    /dm/data/EP01/DAMENG/dm.ini
sed -i s/'RLOG_SEND_APPLY_MON             = 64'/'RLOG_SEND_APPLY_MON           = 64'/g    /dm/data/EP01/DAMENG/dm.ini

修改三个节点得dmmal.ini  文件。

#备份dmmal.ini 文件以防以后需要。
cp -rvp /home/dmdba/data/dsc0_config/dmmal.ini  /home/dmdba/data/dsc0_config/dmmal_bak.ini


#DSC0
cat >/home/dmdba/data/dsc0_config/dmmal.ini<<EOF
MAL_CHECK_INTERVAL = 30  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10  #判定 MAL 链路断开的时间
[MAL_INST0]
MAL_INST_NAME = DSC0 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.0.2.101 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 8338 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.56.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT  = 3567 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 4567 #实例监听守护进程 TCP 连接的端口
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 10.0.2.102
MAL_PORT = 8338
MAL_INST_HOST = 192.168.56.102
MAL_INST_PORT = 5237
MAL_DW_PORT  = 3567
MAL_INST_DW_PORT = 4567
[MAL_INST2]
MAL_INST_NAME = dw
MAL_HOST = 10.0.2.103
MAL_PORT = 8338
MAL_INST_HOST = 192.168.56.103
MAL_INST_PORT = 5236
MAL_DW_PORT  = 3567
MAL_INST_DW_PORT = 4567
EOF

#DSC1
cat >/home/dmdba/data/dsc1_config/dmmal.ini<<EOF
MAL_CHECK_INTERVAL = 30  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10  #判定 MAL 链路断开的时间
[MAL_INST0]
MAL_INST_NAME = DSC0 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.0.2.101 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 8338 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.56.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT  = 3567 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 4567 #实例监听守护进程 TCP 连接的端口
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 10.0.2.102
MAL_PORT = 8338
MAL_INST_HOST = 192.168.56.102
MAL_INST_PORT = 5237
MAL_DW_PORT  = 3567
MAL_INST_DW_PORT = 4567
[MAL_INST2]
MAL_INST_NAME = dw
MAL_HOST = 10.0.2.103
MAL_PORT = 8338
MAL_INST_HOST = 192.168.56.103
MAL_INST_PORT = 5236
MAL_DW_PORT  = 3567
MAL_INST_DW_PORT = 4567
EOF


#DW
cat >/dm/data/EP01/DAMENG/dmmal.ini<<EOF
MAL_CHECK_INTERVAL = 30  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10  #判定 MAL 链路断开的时间
[MAL_INST0]
MAL_INST_NAME = DSC0 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.0.2.101 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 8338 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.56.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT  = 3567 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 4567 #实例监听守护进程 TCP 连接的端口
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 10.0.2.102
MAL_PORT = 8338
MAL_INST_HOST = 192.168.56.102
MAL_INST_PORT = 5237
MAL_DW_PORT  = 3567
MAL_INST_DW_PORT = 4567
[MAL_INST2]
MAL_INST_NAME = dw
MAL_HOST = 10.0.2.103
MAL_PORT = 8338
MAL_INST_HOST = 192.168.56.103
MAL_INST_PORT = 5236
MAL_DW_PORT  = 3567
MAL_INST_DW_PORT = 4567
EOF

在 dmarch.ini中添加DW备库信息

#DSC0
cat >/home/dmdba/data/dsc0_config/dmarch.ini<<EOF
        ARCH_LOCAL_SHARE  = 1
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = +DMDATA/data/arch/dsc0
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1
[ARCHIVE_REMOTE]
        ARCH_TYPE            = REMOTE
        ARCH_DEST            = DSC1
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
        ARCH_INCOMING_PATH   = +DMDATA/data/arch/dsc1
[ARCHIVE_REALTIME]
        ARCH_TYPE            = REALTIME
        ARCH_DEST            = DW	
EOF



#DSC1
cat >/home/dmdba/data/dsc1_config/dmarch.ini<<EOF
        ARCH_LOCAL_SHARE  = 1
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = +DMDATA/data/arch/dsc1
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1
[ARCHIVE_REMOTE]
        ARCH_TYPE            = REMOTE
        ARCH_DEST            = DSC0
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
        ARCH_INCOMING_PATH   = +DMDATA/data/arch/dsc0
[ARCHIVE_REALTIME]
        ARCH_TYPE            = REALTIME
        ARCH_DEST            = DW
EOF

#dw
cat >/dm/data/EP01/DAMENG/dmarch.ini<<EOF
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /dm/data/EP01/DAMENG/arch
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 20480
[ARCHIVE_REALTIME1]
        ARCH_TYPE            = REALTIME
        ARCH_DEST            = DSC0/DSC1
EOF

设置dmwatcher.ini 文件

#DSC0
cat >/home/dmdba/data/dsc0_config/dmwatcher.ini<<EOF
[GRP1]
DW_TYPE                = GLOBAL                                       #全局守护类型
DW_MODE                = MANUAL                                       #手动切换模式
DW_ERROR_TIME          = 60                                           #远程守护进程故障认定时间
INST_RECOVER_TIME      = 60                                           #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME        = 35                                           #本地实例故障认定时间
INST_INI               = /home/dmdba/data/dsc0_config/dm.ini          #dm.ini 配置文件路径
DCR_INI                = /home/dmdba/data/dmdcr.ini                   #dmdcr.ini 配置文件路径
INST_OGUID             = 453331                                       #守护系统唯一 OGUID 值
INST_STARTUP_CMD       = /opt/dmdbms/bin/dmserver                     #命令行方式启动
INST_AUTO_RESTART      = 0                                            #关闭实例的自动启动功能
RLOG_SEND_THRESHOLD    = 0                                            #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD   = 0                                            #指定备库重演日志的时间阈值,默认关闭
EOF

#DSC1
cat >/home/dmdba/data/dsc1_config/dmwatcher.ini<<EOF
[GRP1]
DW_TYPE                = GLOBAL                                       #全局守护类型
DW_MODE                = MANUAL                                       #手动切换模式
DW_ERROR_TIME          = 60                                           #远程守护进程故障认定时间
INST_RECOVER_TIME      = 60                                           #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME        = 35                                           #本地实例故障认定时间
INST_INI               = /home/dmdba/data/dsc1_config/dm.ini          #dm.ini 配置文件路径
DCR_INI                = /home/dmdba/data/dmdcr.ini                   #dmdcr.ini 配置文件路径
INST_OGUID             = 453331                                       #守护系统唯一 OGUID 值
INST_STARTUP_CMD       = /opt/dmdbms/bin/dmserver                     #命令行方式启动
INST_AUTO_RESTART      = 0                                            #关闭实例的自动启动功能
RLOG_SEND_THRESHOLD    = 0                                            #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD   = 0                                            #指定备库重演日志的时间阈值,默认关闭
EOF


#DW
cat >/dm/data/EP01/DAMENG/dmwatcher.ini<<EOF
[GRP1]
DW_TYPE                = GLOBAL                                       #全局守护类型
DW_MODE                = MANUAL                                       #手动切换模式
DW_ERROR_TIME          = 60                                           #远程守护进程故障认定时间
INST_RECOVER_TIME      = 60                                           #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME        = 35                                           #本地实例故障认定时间
INST_INI               = /dm/data/EP01/DAMENG/dm.ini                  #dm.ini 配置文件路径
INST_OGUID             = 453331                                       #守护系统唯一 OGUID 值
INST_STARTUP_CMD       = /opt/dmdbms/bin/dmserver                     #命令行方式启动
INST_AUTO_RESTART      = 1                                            #关闭实例的自动启动功能
RLOG_SEND_THRESHOLD    = 0                                            #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD   = 0                                            #指定备库重演日志的时间阈值,默认关闭
EOF

前台启动DSC 主库和备库

#DSC0
./dmserver /home/dmdba/data/dsc0_config/dm.ini dcr_ini=/home/dmdba/data/dmdcr.ini mount
#DSC1
./dmserver /home/dmdba/data/dsc1_config/dm.ini dcr_ini=/home/dmdba/data/dmdcr.ini  mount


#设置 OGUID,在一台机器上执行就可以。

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(453331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);


#DW
./dmserver   /dm/data/EP01/DAMENG/dm.ini  mount

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(453331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);




###前台启动售后进程 然后通过监视器观察主备状态。
./dmwatcher /home/dmdba/data/dsc0_config/dmwatcher.ini 

./dmwatcher /home/dmdba/data/dsc1_config/dmwatcher.ini 

./dmwatcher /dm/data/EP01/DAMENG/dmwatcher.ini


#

查看状态

配置DSC+DW的监视器。

cat>/dm/data/EP01/DAMENG/dmmonitor.ini<<EOF
MON_LOG_PATH            = /opt/dmdbms/log
MON_LOG_INTERVAL        = 60
MON_LOG_FILE_SIZE       = 64
MON_LOG_SPACE_LIMIT     = 0
MON_DW_CONFIRM          = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP  = 10.0.2.101:3567/10.0.2.102:3567
MON_DW_IP  = 10.0.2.103:3567
EOF




./dmmonitor  /dm/data/EP01/DAMENG/dmmonitor.ini


./dmcssm ini_path=/home/dmdba/data/dmcssm.ini

收尾工作

注册服务

#root用户执行
#DSC0
cd /opt/dmdbms/script/root/
./dm_service_installer.sh -t dmserver   -p DSC  -y DmASMSvrServiceasm -dcr_ini /home/dmdba/data/dmdcr.ini  -dm_ini /home/dmdba/data/dsc0_config/dm.ini  -m mount
./dm_service_installer.sh -watcher_ini /home/dmdba/data/dsc0_config/dmwatcher.ini  -t dmwatcher -p DSC
#DSC1
./dm_service_installer.sh -t dmserver   -p DSC  -y DmASMSvrServiceasm -dcr_ini /home/dmdba/data/dmdcr.ini  -dm_ini /home/dmdba/data/dsc1_config/dm.ini   -m mount
./dm_service_installer.sh -watcher_ini /home/dmdba/data/dsc1_config/dmwatcher.ini  -t dmwatcher -p DSC

#DW服务
./dm_service_installer.sh   -dm_ini /dm/data/EP01/DAMENG/dm.ini -t dmserver   -p dw -m mount
./dm_service_installer.sh -watcher_ini /dm/data/EP01/DAMENG/dmwatcher.ini -t dmwatcher -p dw



####其他DSC服务注册服务的方法。

#root用户执行
#101机器
cd /opt/dmdbms/script/root/
./dm_service_installer.sh -t dmasmsvr  -y DmCSSServicedmcss  -p asm -dcr_ini /home/dmdba/data/dmdcr.ini
#root用户执行
cd /opt/dmdbms/script/root/
./dm_service_installer.sh -t dmcss  -p dmcss  -dcr_ini /home/dmdba/data/dmdcr.ini

附件:安装好的DSC+DW机器软件的vmware 虚拟机的拷贝文件。

链接:https://pan.baidu.com/s/1IybNpMY4IxPt0a6QD4hovg?pwd=t7fh 
提取码:t7fh

服务器的用户名密码是  小写的a,用户名是 root 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是点云ISS、3DSC、SAC-IA、ICP的代码示例: 1. ISS 特征提取 ```c++ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>); pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>); pcl::ISSKeypoint3D<pcl::PointXYZ, pcl::PointXYZ> iss_detector; iss_detector.setSearchMethod(tree); iss_detector.setSalientRadius(6 * resolution); iss_detector.setNonMaxRadius(4 * resolution); iss_detector.setThreshold21(0.975); iss_detector.setThreshold32(0.975); iss_detector.setMinNeighbors(5); iss_detector.setInputCloud(cloud); iss_detector.compute(*keypoints); ``` 2. 3DSC 特征描述 ```c++ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::ShapeContext1980>::Ptr descriptors(new pcl::PointCloud<pcl::ShapeContext1980>); pcl::ShapeContext3DEstimation<pcl::PointXYZ, pcl::ShapeContext1980> desc_est; pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>); desc_est.setInputCloud(keypoints); desc_est.setInputNormals(normals); desc_est.setSearchMethod(tree); desc_est.setRadiusSearch(4 * resolution); desc_est.compute(*descriptors); ``` 3. SAC-IA 平面拟合 ```c++ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); pcl::PointIndices::Ptr inliers(new pcl::PointIndices); pcl::SACSegmentation<pcl::PointXYZ> seg; seg.setOptimizeCoefficients(true); seg.setModelType(pcl::SACMODEL_PLANE); seg.setMethodType(pcl::SAC_RANSAC); seg.setMaxIterations(1000); seg.setDistanceThreshold(0.01); seg.setInputCloud(cloud); seg.segment(*inliers, *coefficients); ``` 4. ICP 点云配准 ```c++ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr aligned(new pcl::PointCloud<pcl::PointXYZ>); pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp; icp.setInputSource(cloud1); icp.setInputTarget(cloud2); icp.setMaxCorrespondenceDistance(0.05); icp.setMaximumIterations(50); icp.setTransformationEpsilon(1e-8); icp.setEuclideanFitnessEpsilon(1); icp.align(*aligned); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值