9.2-考试项目前端容器的高可用+java容器的高可用+使用docker-compose部署考试前端容器+使用docker-compose一次性创建多台容器

配置高可用的项目

基于部署考试系统的项目进行高可用

一、前端的高可用

1.先创建三个前端nginx容器,端口不能映射80

# 删除通用的前端容器
[root@haproxy ~]# docker ps --all
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
0f3ed10aa6fc   java:v0        "/bin/bash"               7 minutes ago    Up 7 minutes    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              gracious_tharp
c9abaa798fcf   mysql:5.7.44   "docker-entrypoint.s…"   12 minutes ago   Up 12 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   focused_aryabhata

# 创建web01容器
[root@haproxy ~]# docker run -itd --name web01 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest
9c40a2df1d7bc58f73737e8c84d0603e531f3e13173e6e25981f03fa5d9dda91

# 进到web01容器
[root@haproxy ~]# docker exec -it web01 /bin/bash

# 进行访问测试
root@9c40a2df1d7b:/# curl localhost
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
    <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

# ctrl + p + q 退出不中断
root@9c40a2df1d7b:/# read escape sequence

# 创建web02容器
[root@haproxy ~]# docker run -itd --name web02 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest
1dc4276bdfcf974b1f1467e0c7225dcf880ee2da8e1b44caee06fce986f76e99

# 进到web02容器
[root@haproxy ~]# docker exec -it web02 /bin/bash

# 进行访问测试
root@1dc4276bdfcf:/# curl localhost
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
    <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

# ctrl + p + q 退出不中断
root@1dc4276bdfcf:/# read escape sequence

# 创建web03容器
[root@haproxy ~]# docker run -itd --name web03 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest
cea53a5ef797bf2df312454cfb4344b6f21beb42125c20583ba686538a2be858

# 进到web03容器
[root@haproxy ~]# docker exec -it web03 /bin/bash

# 进行访问测试
root@cea53a5ef797:/# curl localhost
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
    <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

# ctrl + p + q 退出不中断
root@cea53a5ef797:/# read escape sequence

# 拉取haproxy镜像
[root@haproxy ~]# docker pull haproxy
Using default tag: latest
latest: Pulling from library/haproxy
Digest: sha256:3ab695ae94fb960da08947bb6d9ccb12e8237d7813c711beaf93a5310d150474
Status: Image is up to date for haproxy:latest
docker.io/library/haproxy:latest

# 使用haproxy镜像创建容器
[root@haproxy ~]# docker run -itd -p5000:5000 haproxy:latest /bin/bash
29e4a9f777f0fc6048e4f15b837b593732a96e1db2f6d428d4e732fea2158bbf

# 编辑haproxy.cfg文件
[root@haproxy ~]# vim haproxy.cfg 
# 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
server web0 web01:80 check weight 1 maxconn 2000
server web1 web02:80 check weight 1 maxconn 2000
server web2 web03:80 check weight 1 maxconn 2000

# 将修改后的haproxy.cfg传到用haproxy创建的容器中
[root@haproxy ~]# docker cp /root/haproxy.cfg 29:/usr/local/etc/haproxy
Successfully copied 5.12kB to 29:/usr/local/etc/haproxy

# 挂载这个容器的终端
[root@haproxy ~]# docker attach 29

# 查看文件
haproxy@29e4a9f777f0:~$ ls /usr/local/etc/haproxy/haproxy.cfg 
/usr/local/etc/haproxy/haproxy.cfg

# 在容器中运行这个文件
haproxy@29e4a9f777f0:~$ haproxy -f /usr/local/etc/haproxy/haproxy.cfg 
[NOTICE]   (8) : haproxy version is 3.0.3-95a607c
[NOTICE]   (8) : path to executable is /usr/local/sbin/haproxy
[ALERT]    (8) : config : [/usr/local/etc/haproxy/haproxy.cfg:67] : 'server proxy-web/web0' : could not resolve address 'web01'.
[ALERT]    (8) : config : [/usr/local/etc/haproxy/haproxy.cfg:68] : 'server proxy-web/web1' : could not resolve address 'web02'.
[ALERT]    (8) : config : [/usr/local/etc/haproxy/haproxy.cfg:69] : 'server proxy-web/web2' : could not resolve address 'web03'.
[ALERT]    (8) : config : Failed to initialize server(s) addr.

2.使用浏览器访问:192.168.2.20

出现前端页面

3.使用haproxy对web容器进行高可用

# 删除之前使用haproxy创建的容器
[root@haproxy ~]# docker stop 29
29
[root@haproxy ~]# docker rm 29
29

# 创建使用haproxy高可用三个web前端的容器
[root@haproxy ~]# docker run -itd --link=web01 --link=web02 --link=web03 -p5000:5000 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest 
7848bd08f685cf69deb5cd01467ad7c4123b191617001eab100732e4368f0746
# -itd 交互 终端 后台
# link 锚定web容器
# v 将配置文件挂载到容器中 

# 查看创建的容器
[root@haproxy ~]# docker ps --all
CONTAINER ID   IMAGE            COMMAND                   CREATED              STATUS              PORTS                                                  NAMES
7848bd08f685   haproxy:latest   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              suspicious_villani
7a0f856ed053   nginx:latest     "/docker-entrypoint.…"   8 minutes ago        Up 8 minutes        80/tcp                                                 web03
db4c5ce94e76   nginx:latest     "/docker-entrypoint.…"   8 minutes ago        Up 8 minutes        80/tcp                                                 web02
1d99e2005bd9   nginx:latest     "/docker-entrypoint.…"   8 minutes ago        Up 8 minutes        80/tcp                                                 web01
0f3ed10aa6fc   java:v0          "/bin/bash"               48 minutes ago       Up 48 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              gracious_tharp
c9abaa798fcf   mysql:5.7.44     "docker-entrypoint.s…"   53 minutes ago       Up 53 minutes       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   focused_aryabhata

4.浏览访问:192.168.2.20:5000

5.调用haproxy的监控界面

# 删除之前创建的容器
[root@haproxy ~]# docker stop 78
78
[root@haproxy ~]# docker rm 78
78

# 查看监控界面配置
[root@haproxy ~]# vim haproxy.cfg 
######## 监控界面配置 #################
listen admin_status
        # 监控界面访问信息
        bind 0.0.0.0:8888
        mode http
        # URI相对地址
        stats uri /dbs
        # 统计报告格式
        stats realm Global\ statistics
        # 登录账户信息
        stats auth admin:123456

# 创建可以监控的高可用容器
[root@haproxy ~]# docker run -itd --link=web01 --link=web02 --link=web03 -p5000:5000 -p8888:8888 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest 
cb32ed855f59a3bfd9770f93f3dce5c12b2fceff30e6b4b09bb8e39ae9cba735

# 查看创建的容器
[root@haproxy ~]# docker ps --all
CONTAINER ID   IMAGE            COMMAND                   CREATED              STATUS              PORTS                                                                                  NAMES
cb32ed855f59   haproxy:latest   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   happy_chatelet
7a0f856ed053   nginx:latest     "/docker-entrypoint.…"   20 minutes ago       Up 20 minutes       80/tcp                                                                                 web03
db4c5ce94e76   nginx:latest     "/docker-entrypoint.…"   20 minutes ago       Up 20 minutes       80/tcp                                                                                 web02
1d99e2005bd9   nginx:latest     "/docker-entrypoint.…"   21 minutes ago       Up 21 minutes       80/tcp                                                                                 web01
0f3ed10aa6fc   java:v0          "/bin/bash"               About an hour ago    Up About an hour    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                              gracious_tharp
c9abaa798fcf   mysql:5.7.44     "docker-entrypoint.s…"   About an hour ago    Up About an hour    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                   focused_aryabhata

6.浏览器访问测试

(1)高可用后的前端页面

192.168.2.20:5000

(2)监控页面

192.168.2.20:8888/dbs

二、java容器的高可用

1.java容器的高可用

# 删除通用的java容器
[root@haproxy ~]# docker stop 0f
0f
[root@haproxy ~]# docker rm 0f
0f

# 查看目前的容器
[root@haproxy ~]# docker ps --all
CONTAINER ID   IMAGE            COMMAND                   CREATED             STATUS             PORTS                                                                                  NAMES
cb32ed855f59   haproxy:latest   "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes       0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   happy_chatelet
7a0f856ed053   nginx:latest     "/docker-entrypoint.…"   24 minutes ago      Up 24 minutes      80/tcp                                                                                 web03
db4c5ce94e76   nginx:latest     "/docker-entrypoint.…"   24 minutes ago      Up 24 minutes      80/tcp                                                                                 web02
1d99e2005bd9   nginx:latest     "/docker-entrypoint.…"   24 minutes ago      Up 24 minutes      80/tcp                                                                                 web01
c9abaa798fcf   mysql:5.7.44     "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                   focused_aryabhata

# 创建三个java容器
[root@haproxy ~]# docker run -itd --name java0 java:v0
beb08466361480064fac9e66426b679e0cb4b9dc00d624c5d90f689b75002b98
[root@haproxy ~]# docker run -itd --name java1 java:v0
7574e7d3756f5d2e5b06a718433b84027559d8c9b82d10c1be2639542541c819
[root@haproxy ~]# docker run -itd --name java2 java:v0
658ef09ab2fb35a0184a3d5f2f3548bf0fc29834a8db15184d7cf6f98a005a59

# 查看创建的容器
[root@haproxy ~]# docker ps --all
CONTAINER ID   IMAGE            COMMAND                   CREATED             STATUS             PORTS                                                                                  NAMES
658ef09ab2fb   java:v0          "/bin/bash"               37 seconds ago      Up 36 seconds                                                                                             java2
7574e7d3756f   java:v0          "/bin/bash"               40 seconds ago      Up 40 seconds                                                                                             java1
beb084663614   java:v0          "/bin/bash"               2 minutes ago       Up 2 minutes                                                                                              java0
cb32ed855f59   haproxy:latest   "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes       0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   happy_chatelet
7a0f856ed053   nginx:latest     "/docker-entrypoint.…"   27 minutes ago      Up 27 minutes      80/tcp                                                                                 web03
db4c5ce94e76   nginx:latest     "/docker-entrypoint.…"   27 minutes ago      Up 27 minutes      80/tcp                                                                                 web02
1d99e2005bd9   nginx:latest     "/docker-entrypoint.…"   28 minutes ago      Up 28 minutes      80/tcp                                                                                 web01
c9abaa798fcf   mysql:5.7.44     "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                   focused_aryabhata

# 修改haproxy.cfg配置文件
[root@haproxy ~]# vim haproxy.cfg 

# 在最后一行添加内容
listen proxy-java
        bind 0.0.0.0:8080
        mode http
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server web0 java0:8080 check weight 1 maxconn 2000
        server web1 java1:8080 check weight 1 maxconn 2000
        server web2 java2:8080 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

# 查看8888端口有没有被占用
[root@haproxy ~]# netstat -lntup|grep 8888
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      22318/docker-proxy  
tcp6       0      0 :::8888                 :::*                    LISTEN      22323/docker-proxy

# 删除之前的web容器的高可用容器
[root@haproxy ~]# docker stop cb
cb
[root@haproxy ~]# docker rm cb
cb

# 8888端口没有被占用了
[root@haproxy ~]# netstat -lntup|grep 8888

# 创建web容器和java容器的高可用容器
[root@haproxy ~]# docker run -itd --link=web01 --link=web02 --link=web03 --link=java0 --link=java1 --link=java2 -p5000:5000 -p8080:8080 -p8888:8888 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest 
289cefc3caaf0154e54f75cc15d175d1b7d322b64fa0425f1a828e213397a478

2.监控界面显示java容器是红色的

是因为没有启动服务

3.将三个容器的服务全部启动

[root@haproxy ~]# docker attach java0
[root@beb084663614 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 
read escape sequence
[root@haproxy ~]# docker attach java1
[root@7574e7d3756f /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 
read escape sequence
[root@haproxy ~]# docker attach java2
[root@658ef09ab2fb /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 
read escape sequence
[root@haproxy ~]#

4.浏览器访问测试

(1)进到考试页面:192.168.2.20:5000

(2)进入管理者页面:192.168.2.20:5000/#/admin

(3)haproxy的监控界面:192.168.2.20:8888

5.ab压力测试

# ab压力测试
[root@haproxy ~]# yum -y install httpd-tools

[root@haproxy ~]# ab -n 100 -c 10 http://192.168.2.20:5000/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.2.20 (be patient).....done


Server Software:        
Server Hostname:        192.168.2.20
Server Port:            5000

Document Path:          /
Document Length:        430 bytes

Concurrency Level:      10
Time taken for tests:   0.066 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      66300 bytes
HTML transferred:       43000 bytes
Requests per second:    1504.48 [#/sec] (mean)
Time per request:       6.647 [ms] (mean)
Time per request:       0.665 [ms] (mean, across all concurrent requests)
Transfer rate:          974.09 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     1    5   3.0      4      16
Waiting:        1    5   3.0      3      16
Total:          1    5   3.0      4      16

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      5
  75%      6
  80%      8
  90%     10
  95%     10
  98%     15
  99%     16
 100%     16 (longest request)

三、docker-compose 自动化部署

新机器:192.168.2.30

1.部署docker

# 编辑docker脚本
[root@docker ~]# vim docker.sh
cat << EOF | tee /etc/modules-load.d/k8s.conf 
overlay
br_netfilter
EOF

modprobe overlay

modprobe br_netfilter

cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo



yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 运行docker脚本
[root@docker ~]# source docker.sh

# 编辑daemon.json文件
[root@docker ~]# vim /etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}

# 修改docker.service文件
[root@docker ~]# vim /usr/lib/systemd/system/docker.service 
13	ExecStart=/usr/bin/dockerd

# 加载文件
[root@docker ~]# systemctl daemon-reload

# 重启docker服务
[root@docker ~]# systemctl start docker

2.安装pip

[root@docker ~]# yum -y install python2-pip

3.升级pip

[root@docker ~]# pip install --upgrade pip==20.3 -i https://mirrors.aliyun.com/pypi/simpl

4.安装docker-compose

[root@docker ~]# pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple

5.创建pes目录以及子目录

[root@docker ~]# mkdir -p pes/{msyql,java,web}
[root@docker ~]# tree pes
pes
├── java
├── msyql
└── web

3 directories, 0 files

6.在pes目录下创建并且编辑docker-compose.yml文件

[root@docker ~]# cd pes
[root@docker pes]# vim docker-compose.yml 
version: "3"
services:
      web:
        container_name: web0
        image: nginx:latest
        ports:
        - "80:80"
        expose:
        - 80
        volumes:
        - ./web/src/dist/:/usr/share/nginx/html/
        restart: "always"

7.把之前部署的考试系统的web目录传过来

# 进到pes目录下
[root@docker ~]# cd pes

# 创建web/src目录
[root@docker pes]# mkdir -p web/src/

# 把之前部署的考试系统的web目录传到web/src/下
[root@docker pes]# scp -r 192.168.2.20:/root/project_exam_system/web/dist/ web/src
[root@docker pes]# ls
java  msyql  web
[root@docker pes]# cd web
[root@docker web]# ls
src

# 查看传过来的dist文件
[root@docker web]# ls src/dist/
assets  favicon.ico  index.html

8.docker-compose启动集群

# 拉取nginx镜像
[root@docker ~]# docker pull nginx:latest

# 查看镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    5ef79149e0ec   2 weeks ago   188MB

# docker-compose启动集群
[root@docker pes]# docker-compose up -d
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends import default_backend
Creating network "pes_default" with the default driver
Creating web0 ... done

# 查看用docker-compose创建的容器
[root@docker pes]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED              STATUS              PORTS                               NAMES
648da7c000f9   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   web0

9.浏览器访问:192.168.2.30(本机IP)

10.使用docker-compose一次性创建多台一样的容器

# 创建多台容器的语法
[root@docker pes]# docker-compose scale --help
Usage: scale [options] [SERVICE=NUM...]

# 编辑yml文件
# 创建相同的容器,不能同名,不可以映射相同的端口,所以注释掉这两行
[root@docker pes]# vim docker-compose.yml 

version: "3"
services:
      web:
        #container_name: web0
        image: nginx:latest
        #ports:
        #- "80:80"
        volumes:
        - ./web/src/dist/:/usr/share/nginx/html/
        restart: "always"
        
# 使用scale选项创建3台相同的web容器
[root@docker pes]# docker-compose up --scale web=3 -d
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends import default_backend
Recreating web0 ... done
Creating pes_web_2 ... done
Creating pes_web_3 ... done

# 查看创建的容器
[root@docker pes]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS     NAMES
a84d833c496c   nginx:latest   "/docker-entrypoint.…"   32 seconds ago   Up 31 seconds   80/tcp    pes_web_3
5b59fb581bcb   nginx:latest   "/docker-entrypoint.…"   32 seconds ago   Up 31 seconds   80/tcp    pes_web_2
69b05e3cf0b4   nginx:latest   "/docker-entrypoint.…"   32 seconds ago   Up 32 seconds   80/tcp    pes_web_1

#docker-compose暂停集群
[root@docker pes]# docker-compose stop
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends import default_backend
Stopping pes_web_3 ... done
Stopping pes_web_2 ... done
Stopping pes_web_1 ... done

# 查看容器(空)
[root@docker pes]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值