大数据----11.高可用的具体详细配置

高可用的具体配置

1.可以直接在我么之前的hadoop集群中进行;最好是我们重新搭建一个集群来进行;因为之前的集群还要使用;

1. 克隆服务器

2.通过拷贝我们的 hadoop01; hadoop02;hadoop03; 分布为我们的ha01;ha02;ha03;

image-20210811193824857

3.克隆完毕之后的操作:

​ 1.修改机器的ip地址:我们从150; 160;170;开始;

​ vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 //默认网卡都是这个名字

image-20210811202525254

其他两台也是同样的方法修改他的ip地址即可;

2.修改机器的名字: hostnamectl set-hostname ha01

image-20210811203026824

image-20210811203331415

同样的方法对其他两台机器修改名字 ha02; ha03

3.删除多余的网卡:centos 6克隆之后需要删除 第一个pci ;centos7 不需要

如果我们使用的是centos7的话,直接就进行1;2步就可以了;

2.检查服务器信息—启动zookeeper

1.检查服务的防火墙和时间;

image-20210811212056554

2.修改zookeeper的配置:显示启动不了;因为他的服务器的名字修改了;

修改:/usr/local/zookeeper-3.4.6/conf/zoo.cfg

image-20210811212542413

image-20210811212710770

3.修改ip地址和名字的映射

然后就可以启动我们的zookeeper了;

最好是重启服务器; 不然有的时候会出现问题; 是我们的服务器可能启动了zookeeper的服务;

要不就的使用kill -9 进行杀死进程;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juHvvA3D-1629340840702)(https://i.loli.net/2021/08/11/LBFJ72op5cIyjKk.png)]

3.配置hadoop集群—启动hadoop集群操作

1.修改hadoop的配置文件:/usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pkjgz0XV-1629340840706)(https://i.loli.net/2021/08/18/Fz5S6munhbVpEwG.png)]

分别修改三台服务中的信息core-site.xml文件中的信息;

vi /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml

修改1: 拷贝的是hadoop01 修改为ha01

fs.defaultFS hdfs://ha01:9000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukt4zMMB-1629340840707)(https://i.loli.net/2021/08/14/glbkoIVSFEeGn6Y.png)]

这个文件中就修改这一个即可;

修改2:hdfs-site.xml

vi /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwgbGyKu-1629340840708)(https://i.loli.net/2021/08/14/yS69prhlWb3k5iq.png)]

修改他的最后标签中的内容:

dfs.secondary.http.address ha01:50090

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9D7Eh9iN-1629340840710)(https://i.loli.net/2021/08/14/jF6YlnHxhVcyIe5.png)]

修改3:vi yarn-site.xml

vi /usr/local/hadoop-2.7.3/etc/hadoop/ yarn-site.xml

修改标签内容:

yarn.resourcemanager.hostname ha01 把以前的hadoop01修改为ha01

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8ggVu6W-1629340840711)(https://i.loli.net/2021/08/14/6TZorkv2apch1nN.png)]

修改4:vi slaves

vi /usr/local/hadoop-2.7.3/etc/hadoop/slaves

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zLSyYw6F-1629340840712)(https://i.loli.net/2021/08/14/F26OVMqHzbgWUlL.png)]

2.删除以前服务器中的数据: rm -rf /usr/local/hadoop-2.7.3/data/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mUxEZD99-1629340840713)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210814190141252.png)]

3.因为他们是改变了名字的集群服务器,所以第一次需要进行初始化;hadoop namenode -format

但是只需要在第一个服务ha01的服务上进行即可;不需要在其他的ha02和ha03上进行;

image-20210815103038843

4.启动ha的集群 start-all.sh;

​ 但是会出错;这个原因是我们之前生成的 免密登录; ssl文件是原先的不是现在的;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qklXDEoy-1629340840716)(https://i.loli.net/2021/08/15/syDbcvFXjHBLWlo.png)]

提示没有进行数字签名;(这里的免密是以前生成的文件,在这边就不能使用;还的重新生成)

  1. 删除以前的免密文件:

2.重新生成:(三台机器都进行生成)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqyFIcmb-1629340840719)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815110632183.png)]

回车三次即可生成:(三台上都进行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRrEqHPg-1629340840720)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815111314148.png)]

图形界面查看到的ssh刚刚生成;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eOOxexQL-1629340840721)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815110931120.png)]

3.分别发送密码给集群中的每个机器;ssh-copy-id ha01( ha02;ha03)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WbqQTBYp-1629340840722)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815111511569.png)]

输入yes,然后输入统一的一个密码----123456

在这里插入图片描述

再次启动(集群)即可:start-all.sh

image-20210815112344988

image-20210815112443252

到这里就是我们的hadoop集群就可以启动了;

http://192.168.219.150:50070/dfshealth.html#tab-overview

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HlQg0oh8-1629340840729)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815114410575.png)]

停掉上面的集群后,就可以配置高可用了;

4.配置高可用hadoop

hadoop部分的配置分为两部分hdfs和yarn 需要对他们 进行修改;

1.对HDFS的修改;

1.1修改三台服务中文件:core-site.xml

修改core-site.xml(如果文件不存在,但是core-site.xml.template文件存在,则先修改文件名,执行mv core-site.xml.template core-site.xml)

vi /usr /local/hadoop-2.7.3/etc/hadoop/core-site.xml

修改内容:(删除以前的configuration)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1MPSvEed-1629340840732)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815140037271.png)]

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://beh</value>
    <final>false</final>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoopdata</value>
    <final>false</final>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>ha01:2181,ha02:2181,ha03:2181</value>
    <final>false</final>
  </property>
</configuration>

修改后的内容:全部粘贴到每个服务(3)即可;

image-20210815140436081

1.2 修改hdfs-site.xml
vi /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

image-20210815142839154

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>beh</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.namenodes.beh</name>
    <value>nn1,nn2</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.beh.nn1</name>
    <value>ha01:9000</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.http-address.beh.nn1</name>
    <value>ha01:50070</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.beh.nn2</name>
    <value>ha02:9000</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.http-address.beh.nn2</name>
    <value>ha02:50070</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://ha01:8485;ha02:8485;ha03:8485/beh</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled.beh</name>
    <value>true</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.beh</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.journalnode.edits .dir</name>
    <value>/usr/local/metadata/journal</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence
shell(/bin/true)
</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/usr/local/.ssh/id_rsa</value>
    <final>true</final>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
    <final>false</final>
  </property> 
<configuration>

1.3 修改slaves
vi /usr/local/hadoop-2.7.3/etc/hadoop/slaves

修改为以下内容:(如果以后有多个节点就继续修改)

ha02
ha03

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b3hiOIgS-1629340840735)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815143540461.png)]

我们这个里边提前进行了修改;这个地方就不需要了;

1.4 YARN

修改mapred-site.xml

vi /usr/local/hadoop2.7.3/etc/hadoop/mapred-site.xml

image-20210815144549743

删除原先的直接替换即可:

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>ha02:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>ha03:19888</value>
</property>
<property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
<value>/usr/local/metadata/hadoop-yarn/staging</value>
</property>
</configuration>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9Lr5avh-1629340840738)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815144949625.png)]

1.5 修改yarn-site.xml
vi /usr/local/hadoop2.7.3/etc/hadoop/yarn-site.xml

image-20210815150936142

<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/usr/local/metadata/yarn</value>
</property>
<property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/usr/local/logs/yarn/userlogs</value>
</property>
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
    <description>Where to aggregate logs</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>hdfs://beh/var/log/hadoop-yarn/apps</value>
</property>
<!-- Resource Manager Configs -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>beh</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>

  <!--RM1 RM2 is different-->
<property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>ha01:2181,ha02:2181,ha03:2181</value>
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
    <value>5000</value>
</property>
<!-- RM1 configs -->
<property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>ha01:23140</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>ha01:23130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
    <value>ha01:23189</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>ha01:23188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
    <value>ha01:23125</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address.rm1</name>
    <value>ha01:23141</value>
</property>
<!-- RM2 configs -->
<property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>ha02:23140</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>ha02:23130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
   <value>ha02:23189</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>ha02:23188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
    <value>ha02:23125</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address.rm2</name>
    <value>ha02:23141</value>
</property>
<!-- Node Manager Configs -->
<property>
    <name>mapreduce.shuffle.port</name>
    <value>23080</value>
</property>
<property>
    <name>yarn.resourcemanager.zk-address</name>
<value>ha01:2181,ha02:2181,ha03:2181</value>
</property>
</configuration>

1.6 修改环境变量:

vim /usr/local/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

image-20210815154856099

vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-env.sh

他默认使用的是1.6的jdk;我们改写成我们自己安装的1.8jdk;

image-20210815155250420

到这里就修改的地方都修改完毕; 然后如果是在一个上修改的就分发给所有服务器;

scp -r /usr/local/hadoop-2.7.3 ha02:/usr/local
scp -r /usr/local/hadoop-2.7.3 ha03:/usr/local

但是我们这里是在每个机器上都同时进行了就不需要了;

接下来就可以进行启动高可用;

2.启动高可用HDFS

1.启动journalnode(进程名:JournalNode) 在三台机器上都启动文件共享; 以后有多台也是一样都进行启动;

启动journalnode(进程名:JournalNode) 注意:三个都要启动

hadoop-daemon.sh start journalnode

image-20210815161802384

那就把ha01里边的文件分发到 ha02;和ha03中去: 配置文件发到对应的服务中即可;

image-20210815164211265

或者粘贴这些到ha02;ha03

#Configure environment variables for cluster environment
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

image-20210815164714399

如果这个地方出现第一次成功了;第二次就没有节点了; 就是前面的配置错了;
一定要小心,配置文件时候,不能有空格;一定要小心;

  1. 格式化zookeeper,在ha01上执行
hdfs zkfc -formatZK

但是一定要先把我们的zookeeper集群开启;不然进行格式化就有问题:(连接不上)

image-20210815181245060

启动zookeeper就可以连接:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NMFvCsOD-1629340840753)(https://i.loli.net/2021/08/15/sejvE2DA7dfBTZw.png)]

这个时候三台机器上都启动了;

image-20210815181426714

  1. 对ha01节点进行格式化和启动启动namenode(进程名:NameNode):
hdfs namenode -format  以前是我们原始集群格式化; 现在是对高可用进行格式化;不一样;
hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start namenode (没有配置环境变量就到sbin下执行)

hdfs namenode -format 以前是我们原始集群格式化; 现在是对高可用进行格式化;不一样;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWP4ovnY-1629340840756)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815182035716.png)]

hadoop-daemon.sh start namenode 启动namenode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIAoBoNd-1629340840757)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815182221113.png)]

4.对ha02节点进行格式化和启动(双namenode机制)

hdfs namenode -bootstrapStandby (后备节点)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-seHvtUiO-1629340840758)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815182542591.png)]

hadoop-daemon.sh start namenode(他是ha01的后备节点 所以要开启 namenode)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2juCL4jJ-1629340840760)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815182846351.png)]

5.在ha01和ha02上启动zkfc服务控制器(zkfc服务进程名:DFSZKFailoverController):此时ha01和ha02就会有一个节点变为active状态

hadoop-daemon.sh start zkfc

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rV6Fv14L-1629340840761)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815183109414.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VdHoJG63-1629340840762)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815183037472.png)]

6.启动datanode(进程名:DataNode):在ha01上执行

hadoop-daemons.sh start datanode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H0ls2giA-1629340840763)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815183439005.png)]

到这里我们所有的节点都启动成功; 就可以用了;

在这里如果你要启动其他的服务;就的手工启动: resourcesmanager;和nodemanager

测试:http://192.168.219.150:50070/dfshealth.html#tab-overview

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hKtN45gT-1629340840764)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815183803509.png)]

他现在处于活动状态; 当他死亡的时候,就会切换到 160服务上进行;

160现在处于 备用状态:

http://192.168.219.160:50070/dfshealth.html#tab-overview

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LwKXOj6R-1629340840765)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815183951352.png)]

如果我们把第一个节点停掉:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4mtLLSfZ-1629340840767)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815184245467.png)]

访问第一个节点就不能访问了;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqslnsKD-1629340840768)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815184352688.png)]

但是备用就会冲上来进行提供服务:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zv2m0slX-1629340840769)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815184450220.png)]

如果你再次启动你的他也是备用状态;不可能抢占原来的; 只能等待这个第二个挂了他才能接替;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0GR45AcP-1629340840770)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815184606707.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LrM7gEm0-1629340840771)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815184652221.png)]

扩展1: 启动yarn

在hadoop1上启动(此脚本将会启动hadoop1上的resourcemanager及所有的nodemanager)

start-yarn.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3KsMhSN-1629340840772)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210815184922203.png)]

在hadoop2上启动resourcemanager

yarn-daemon.sh start resourcemanager

扩展2: 验证是否配置成功

打开浏览器,访问http://192.168.219.150:23188/或者http://192.168.219.160:23188/,根据你的启动yarn的服务来进行访问。ha01上启动的;
image-20210815185404370

然后kill掉active的resourcemanager另一个将会变为active的,说明resourcemanager HA是成功的

备注:

Hadoop-daemon.sh:用于启动当前节点的进程
例如Hadoop-daemon.sh start namenode 用于启动当前的名称节点
Hadoop-daemons.sh:用于启动所有节点的进程
例如:Hadoop-daemons.sh start datanode 用于启动所有节点的数据节点

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值