LVS(Linux virual server)


LVS简介

        LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,因此性能较高。

  • VS: Virtual Server,负责调度
  • RS:RealServer,负责真正提供服务

作用

        通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

LVS 的优势与不足

优势

                高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。

                稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。

                成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。

                配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。

                支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用

                支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。

                应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等。

不足

       软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
       如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂。

LVS专业术语

VS:Virtual Server                  #虚拟服务
Director, Balancer                    #负载均衡器、分发器
RS:Real Server                     #后端请求处理服
CIP: Client IP                           #用户端IP
VIP:Director Virtual IP           #负载均衡器虚拟IP
DIP:Director IP                      #负载均衡器IP
RIP:Real Server IP               #后端请求处理服务器IP


集群简介

系统性能扩展方式

  • Scale UP:向上扩展,增强
  • 向外扩展,增加设备,调度分配问题,Cluster

集群Cluster

Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster 常见的三种类型:
  1. LBLoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
  2. HA High Availiablity (高可用) SPOF single Point Of failure
    MTBF:Mean Time Between Failure 平均无故障时间,正常时间
    MTTR:Mean Time To Restoration repair )平均恢复前时间,故障时间
    A=MTBF/ MTBF+MTTR (0,1) 99%, 99.5%, 99.9%, 99.99%, 99.999%
    SLA Service level agreement (服务等级协议)是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中,总是设定所谓的三个9 ,四个 9 来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
    停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间
  3. HPC :High-performance computing(高性能计算,国家战略资源)

分布式简介

分布式存储 :Ceph GlusterFs FastDFS MogileFs
分布式计算 :hadoop Spark
分布式常见应用:
  • 分布式应用-服务按照功能拆分,使用微服务
  • 分布式静态资源--静态资源放在不同的存储集群上
  • 分布式数据和存储--使用key-value缓存系统
  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

集群和分布式

  • 集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的
  • 分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
  • 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率
  • 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。

lvs集群体系结构

工作原理: VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

lvs集群的类型

lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址

lvs-tun: 在原请求IP报文之外新加一个IP首部

lvs-fullnat: 修改请求报文的源和目标IP


LVS负载均衡四种工作模式

  • NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址)  --利用三层功能
  • DR:直接路由(Direct routing)模式,只有进站的数据流量经过分发器(数据链路层负载均衡,  因为它修改的是目的mac地址)--利用二层功能mac地址
  • TUN:隧道模式,只有进站的数据流量经过分发器
  • full-nat:双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发

NAT模式

原理:把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。

期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

nat 模式数据逻辑
1. 客户端发送访问请求,请求数据包中含有请求来源( cip ),访问目标地址( VIP)访问目标端口(9000port)
2.VS 服务器接收到访问请求做 DNAT 把请求数据包中的目的地由 VIP 换成 RS RIP 和相应端口
3.RS1 相应请求,发送响应数据包,包中的相应保温为数据来源( RIP1 )响应目标( CIP )相应端口(9000port
4.VS 服务器接收到响应数据包,改变包中的数据来源( RIP1-->VIP , 响应目标端口( 9000-->80
5.VS 服务器把修改过报文的响应数据包回传给客户端
6.lvs NAT 模式接收和返回客户端数据包时都要经过 lvs 的调度机,所以 lvs 的调度机容易阻塞


DR模式

原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。

 

 DR模式数据传输过程

1.   客户端发送数据帧给 vs 调度主机帧中内容为客户端 IP+ 客户端的 MAC+VIP+VIP MAC
2.  VS 调度主机接收到数据帧后把帧中的 VIP MAC 该为 RS1 MAC ,此时帧中的数据为客         户端 IP+ 客户端的MAC+VIP+RS1 MAC
3. RS1 得到 2 中的数据包做出响应回传数据包,数据包中的内容为 VIP+RS1 MAC+ 客户端         IP+ 客户端 IP 的MAC


TUN模式

原理:互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

 

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP 是CIP)


fullnet模式

原理:客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,相应源ip为Rip目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP

LVS工作模式总结

  • lvs-natlvs-fullnat:请求和响应报文都经由Director
  • lvs-natRIP的网关要指向DIP
  • lvs-fullnatRIPDIP未必在同一IP网络,但要能通信
  • lvs-drlvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
  • lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
  • lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

lvs的调度算法

ipvs scheduler :根据其调度时是否考虑各 RS 当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑 RS 的负载情况
动态方法:主要根据每 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 将被调度

lvs静态调度算法

  • RRroundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
  • WRRWeighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
  • SHSource Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
  • DHDestination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

lvs动态调度算法

主要根据 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 会被调度
  • LCleast connections(最少链接发) 适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)
  • WLCWeighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
  • SEDShortest Expection Delay,初始连接高权重优先Overhea(activeconns+1+inactiveconns)x 256/weight 但是,当node1的权重为1node2的权重为10,经过运算前几次的调度都会被node2承接
  • NQNever Queue,第一轮均匀分配,后续SED
  • LBLCLocality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
  • LBLCRLBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

LVS常见调度算法

RR(轮询)按照顺序依次将请求分配给各服务器,不考虑服务器的实际负载和性能差异
WRR(加权轮询)为各服务器设置不同的权重,按照权重比例分配请求
LC(最少连接)将请求分配给当前连接数最少的服务器
WLC(加权最少连接)结合服务器的权重和当前连接数来分配请求
LBLC(基于局部性的最少连接)优先选择与请求目标地址在同一网段的服务器,若没有则选择连接数最少的服务器
LBLCR(带复制的基于局部性最少连接)在 LBLC 的基础上,对目标 IP 地址的请求进行复制,分配到多个服务器上,以提高系统的容错性
DH(目标地址散列)根据请求的目标 IP 地址进行散列运算,将请求分配到特定的服务器
SH(源地址散列)基于请求的源 IP 地址进行散列运算,将来自相同源 IP 的请求分配到同一服务器
SED(最短预期延迟)综合考虑服务器的权重和当前连接数,计算预期延迟,将请求分配到预期延迟最小的服务器
NQ(最少队列)随机选择当前有空闲的服务器来分配请求

ipvsadm


实验部分

一、NAT模式

实验准备:

        node                IP                                  VIP                        角色                        模式

        LVS        192.168.0.100              172.25.250.100              调度器                   NAT、仅主机

        RS1        192.168.0.10                         null                        真实服务器1          仅主机

        RS2        192.168.0.20                         null                        真实服务器2          仅主机

       client       172.25.250.200                     null                        客户端                   NAT

 node                   IP                VIP       角色          模式
  LVS      192.168.0.100     172.25.250.100     调度器   NAT、仅主机
  RS1      192.168.0.10               null真实服务器1        仅主机
  RS2      192.168.0.20               null真实服务器2        仅主机
  client      172.25.250.200               null     客户端          NAT

网络配置

 

 Note:服务端的网关设置为与 LVS 的 DIP 一致是为了保证网络通信的顺畅、高效和可管理性


实验步骤:

LVS中
1.启用内核路由功能
[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs ~]# 
[root@lvs ~]# vim /etc/sysctl.conf 
[root@lvs ~]# 
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# 
[root@lvs ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1

2.安装ipvsadm
[root@lvs ~]# yum install ipvsadm -y
3.添加调度策略
[root@lvs ~]# ipvsadm -A -t 172.25.250.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 192.168.0.20:80 -m
 4.查看调度策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0 
5.保存策略
[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.250.100:80 -s rr
-a -t 172.25.250.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.250.100:80 -r 192.168.0.20:80 -m -w 1

[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.250.100:80 -s rr
-a -t 172.25.250.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.250.100:80 -r 192.168.0.20:80 -m -w 1

为临时的 需设置开机启动
[root@lvs ~]# systemctl enable --now ipvsadm.service

 服务无法启动原因及解决方法

RS1和RS2中
设置web服务
dnf install httpd -y

[root@rs1 ~]# echo welcome to RS1 > /var/www/html/index.html 
[root@rs1 ~]# systemctl restart httpd

[root@rs2 ~]# echo welcome to RS2 > /var/www/html/index.html 
[root@rs2 ~]# systemctl restart httpd
client客户端测试

测试LVS调度器的VIP

[root@client ~]# curl 172.25.250.100
welcome to RS1
[root@client ~]# curl 172.25.250.100
welcome to RS2

#循环测试
[root@client ~]# for i in {1..10}
> do 
> curl 172.25.250.100
> done
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2

二、DR模式

实验准备:

     node                  IP                                           vip                             角色                       模式

     LVS           192.168.0.50                    lo:192.168.0.200/32               调度器                    仅主机

    ROUTER    NAT:172.25.250.100                                                    路由器                    NAT

                       仅主机:192.168.0.100                                                                                仅主机

     RS1          192.168.0.10                    lo:192.168.0.200/32           真实服务器1              仅主机

     RS2          192.168.0.20                    lo:192.168.0.200/32           真实服务器2              仅主机

     client        172.25.250.200                             null                           客户端                     NAT

      node                IP               VIP        角色       模式
       LVS      192.168.0.50lo:192.168.0.200/32      调度器     仅主机
   ROUTER 

     172.25.250.100

     192.168.0.100

      路由器NAT、仅主机
       RS1     192.168.0.10lo:192.168.0.200/32  真实服务器1     仅主机
       RS2     192.168.0.20lo:192.168.0.200/32  真实服务器2     仅主机
      client     172.25.250.200                null      客户端        NAT

LVS 的 lo(回环接口)不一定必须为 /32 。

 

然而,将其配置为 /32 通常是一种常见的实践,这样做可以避免一些潜在的网络问题和冲突。但在某些特定的网络环境和配置需求下,也可能会采用其他的子网掩码配置


网络配置

Note:确保每台主机ping都可以互相通信


实验步骤:

LVS中
1.添加回环IP/VIP

[root@lvs ~]# ip addr add dev lo 192.168.0.200/32

[root@lvs ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.200/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:bb:bd:47 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9a00:a113:9751:5d9e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
 2.安装ipvasdm软件
[root@lvs ~]# dnf install ipvsadm -y
3.添加调度策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
 4.保存策略
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm

[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.0.200:80 -s wrr
-a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1     
-a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2

[root@lvs ~]# systemctl restart ipvsadm

######################################################################################
-A -t 192.168.0.200:80 -s wrr 
添加一个新的服务,服务的 IP 地址为 192.168.0.200 ,端口为 80 ,使用加权轮询(wrr)的调度算法

-a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1 
为上述服务添加一个真实服务器,真实服务器的 IP 地址为 192.168.0.10 ,端口为 80 ,采用网关(-g)模式,权重为 1 

-a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2 
为上述服务再添加一个真实服务器,真实服务器的 IP 地址为 192.168.0.20 ,端口为 80 ,采用网关模式,权重为 2 

######################################################################################
-g 模式指的是 DR(Direct Routing,直接路由)模式
在 DR 模式下:
客户端的请求到达 LVS 调度器后,调度器根据负载均衡算法选择后端的真实服务器。
调度器将请求数据包的目标 MAC 地址修改为所选真实服务器的 MAC 地址,然后直接将数据包发送到真实服务器所在的网络。
真实服务器处理完请求后,直接将响应数据包发送给客户端,而不再经过 LVS 调度器

ROUTER中
设置内核参数

net.ipv4.ip_forward=1

sysctl -p

RS1和RS2中
1.添加lo回环ip/VIP
ip addr add dev lo 192.168.0.200/32
2.解决响应问题

作用:直接将响应数据包发送给客户端,不再经过 LVS 调度器

 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3.web配置
dnf install httpd -y

[root@rs1 ~]# echo welcome to RS1 > /var/www/html/index.html 

[root@rs2 ~]# echo welcome to RS2 > /var/www/html/index.html 

systemctl restart httpd
client客户端测试
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS1
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS1
[root@client ~]# curl 192.168.0.200
welcome to RS2

#循环测试
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2

三、防火墙标签解决轮询错误

RS1RS2中安装mod_ssl并重启apache

yum install mod_ssl -y
systemctl restart httpd

 在vs调度器中设定端口标签,人为80和443是一个整体

iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 666

 设定调度规则

[root@lvs ~]# ipvsadm -C      #清空

[root@lvs ~]# ipvsadm -A -f 666 -s rr
[root@lvs ~]# ipvsadm -a -f 666 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 666 -r 192.168.0.20 -g

[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr
  -> 192.168.0.10:0               Route   1      0          0         
  -> 192.168.0.20:0               Route   1      0          0         

[root@lvs ~]# systemctl restart ipvsadm.service 

[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -f 666 -s rr
-a -f 666 -r 192.168.0.10:0 -g -w 1
-a -f 666 -r 192.168.0.20:0 -g -w 1

-f 防火墙标识 后面写数字(666)

client客户端测试

[root@client ~]# curl -k https://192.168.0.200
welcome to RS1
[root@client ~]# curl -k https://192.168.0.200
welcome to RS2


[root@client ~]# curl -k https://192.168.0.200;curl 192.168.0.200
welcome to RS1
welcome to RS2

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值