Keepalived原理与实战精讲

三相电机控制入门:端电压、相电压、线电压到底怎么测?(附实测波形对比) 本文为三相电机控制初学者提供了端电压、相电压和线电压的完整测量指南。通过厘清三者的物理定义与测量方法,详细讲解了如何搭建虚拟星形点电路,并对比分析了方波、SPWM和SVPWM三种主流控制模式下关键电压波形的核心特征与差异,帮助工程师掌握正确的示波器测量与波形解读技巧。 阅读详情

什么是Keepalived呢keepalived观其名可知保持存活在网络里面就是保持在线了 也就是所谓的高可用或热备用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生那说到keepalived时不得 不说的一个协议就是VRRP协议可以说这个协议就是keepalived实现的基础那么首先我们来看看VRRP协议

注搞运维的要有足够的耐心哦不理解协议就很难透彻的掌握keepalived的了

一VRRP协议

VRRP协议
学 过网络的朋友都知道网络在设计的时候必须考虑到冗余容灾包括线路冗余设备冗余等防止网络存在单点故障那在路由器或三层交换机处实现冗余就显得 尤为重要在网络里面有个协议就是来做这事的这个协议就是VRRP协议Keepalived就是巧用VRRP协议来实现高可用性(HA)的

VRRP协议有一篇文章写的非常好大家可以直接看这里(记得认真看看哦后面基本都已这个为基础的了)
帖子地址http://bbs.ywlm.net/thread-790-1-1.html
只需要把服务器当作路由器即可

在《VRRP协议》里讲到了虚拟路由器的ID也就是VRID在这里比较重要

keepalived完全遵守VRRP协议包括竞选机制等等

二Keepalived原理


Keepalived原理
keepalived也是模块化设计不同模块复杂不同的功能下面是keepalived的组件
core check vrrp libipfwc libipvs-2.4 libipvs-2.6

core是keepalived的核心复杂主进程的启动和维护全局配置文件的加载解析等
check负责healthchecker(健康检查)包括了各种健康检查方式以及对应的配置的解析包括LVS的配置解析
vrrpVRRPD子进程VRRPD子进程就是来实现VRRP协议的
libipfwciptables(ipchains)库配置LVS会用到
libipvs*配置LVS会用到
注意keepalived和LVS完全是两码事只不过他们各负其责相互配合而已

21200502_eq46.jpg


keepalived启动后会有三个进程
父进程内存管理子进程管理等等
子进程VRRP子进程
子进程healthchecker子进程

有图可知两个子进程都被系统WatchDog看管两个子进程各自复杂自己的事healthchecker子进程复杂检查各自服务器的健康程度例如HTTPLVS等等如果healthchecker子进程检查到MASTER上服务不可用了就会通知本机上的兄弟VRRP子进程让他删除通告并且去掉虚拟IP转换为BACKUP状态

三Keepalived配置文件详解



keepalived配置详解
keepalived有三类配置区域(姑且就叫区域吧)注意不是三种配置文件是一个配置文件里面三种不同类别的配置区域

全局配置(Global Configuration)
VRRPD配置
LVS配置


一全局配置
全局配置又包括两个子配置
全局定义(global definition)
静态路由配置(static ipaddress/routes)

1全局定义(global definition)配置范例

?
1
2
3
4
5
6
7
8
9
10
11
global_defs
{
notification_email
{
admin @example .com
}
notification_email_from admin @example .com
smtp_server  127.0 . 0.1
stmp_connect_timeout  30
router_id node1
}

全局配置解析
global_defs全局配置标识表面这个区域{}是全局配置

?
1
2
3
4
5
notification_email
{
admin @example .com
admin @ywlm .net
}

表示keepalived在发生诸如切换操作时需要发送email通知以及email发送给哪些邮件地址邮件地址可以多个每行一个

notification_email_from admin@example.com
表示发送通知邮件时邮件源地址是谁

smtp_server 127.0.0.1
表示发送email时使用的smtp服务器地址这里可以用本地的sendmail来实现

smtp_connect_timeout 30
连接smtp连接超时时间

router_id node1
机器标识

2静态地址和路由配置范例

?
1
2
3
4
5
notification_email
{
admin @example .com
admin @ywlm .net
}

这里实际上和系统里面命令配置IP地址和路由一样例如
192.168.1.1/24 brd + dev eth0 scope global 相当于: ip addr add 192.168.1.1/24 brd + dev eth0 scope global
就是给eth0配置IP地址
路由同理
一般这个区域不需要配置
这里实际上就是给服务器配置真实的IP地址和路由的在复杂的环境下可能需要配置一般不会用这个来配置我们可以直接用vi /etc/sysconfig/network-script/ifcfg-eth1来配置切记这里可不是VIP哦不要搞混淆了切记切记

二VRRPD配置
VRRPD配置包括三个类
VRRP同步组(synchroization group)

VRRP实例(VRRP Instance)

VRRP脚本

1VRRP同步组(synchroization group)配置范例

?
1
2
3
4
5
6
7
8
9
10
11
vrrp_sync_group VG_1 {
group {
http
mysql
}
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault  "/path/fault.sh VG_1"
notify /path/to/notify.sh
smtp_alert
}

其中

?
1
2
3
4
group {
http
mysql
}

http和mysql是实例名和下面的实例名一致

?
1
2
3
notify_master /path/to/to_master.sh表示当切换到master状态时要执行的脚本
notify_backup /path_to/to_backup.sh表示当切换到backup状态时要执行的脚本
notify_fault  "/path/fault.sh VG_1"

notify /path/to/notify.sh

smtp alter表示切换时给global defs中定义的邮件地址发送右键通知

2VRRP实例(instance)配置范例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vrrp_instance http {
state MASTER
interface eth0
dont_track_primary
track_interface {
eth0
eth1
}
mcast_src_ip <IPADDR>
garp_master_delay 10
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
autp_pass 1234
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
virtual_routes {
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}
nopreempt
preemtp_delay 300
debug
}


statestate指定 instance(Initial)的初始状态就是说在配置好后这台 服务器的初始状态就是这里指定的但这里指定的不算还是得要通过竞选通过优先级来确定里如果这里设置为master但如若他的优先级不及另外一台 那么这台在发送通告时会发送自己的优先级另外一台发现优先级不如自己的高那么他会就回抢占为master

interface实例绑定的网卡因为在配置虚拟IP的时候必须是在已有的网卡上添加的

dont track primary忽略VRRP的interface错误

track interface跟踪接口设置额外的监控里面任意一块网卡出现问题都会进入故障(FAULT)状态例如用nginx做均衡器的时候内网必须正常工作如果内网出问题了这个均衡器也就无法运作了所以必须对内外网同时做健康检查

mcast src ip发送多播数据包时的源IP地址这里注意了这里实际上就是在那个地址上发送VRRP通告这个非常重要一定要选择稳定的网卡端口来发送这里相当于heartbeat的心跳端口如果没有设置那么就用默认的绑定的网卡的IP也就是interface指定的IP地址

garp master delay在切换到master状态后延迟进行免费的ARP(gratuitous ARP)请求

virtual router id这里设置VRID这里非常重要相同的VRID为一个组他将决定多播的MAC地址

priority 100设置本节点的优先级优先级高的为master

advert int检查间隔默认为1秒

virtual ipaddress这里设置的就是VIP也就是虚拟IP地址他随着state的变化而增加删除当state为master的时候就添加当state为backup的时候删除这里主要是有优先级来决定的和state设置的值没有多大关系这里可以设置多个IP地址

virtual routes原理和virtual ipaddress一样只不过这里是增加和删除路由

lvs sync daemon interfacelvs syncd绑定的网卡

authentication这里设置认证

auth type认证方式可以是PASS或AH两种认证方式

auth pass认证密码

nopreempt设置不抢占这里只能设置在state为backup的节点上而且这个节点的优先级必须别另外的高

preempt delay抢占延迟

debugdebug级别

notify master和sync group这里设置的含义一样可以单独设置例如不同的实例通知不同的管理人员http实例发给网站管理员mysql的就发邮件给DBA

3VRRP脚本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vrrp_script check_running {
    script  "/usr/local/bin/check_running"
    interval  10
    weight  10
}
vrrp_instance http {
    state BACKUP
    smtp_alert
    interface  eth0
    virtual_router_id  101
    priority  90
    advert_int  3
    authentication {
    auth_type PASS
    auth_pass whatever
    }
    virtual_ipaddress {
    1.1 . 1.1
    }
    track_script {
    check_running weight  20
    }
}



首先在vrrp_script区域定义脚本名字和脚本执行的间隔和脚本执行的优先级变更 

?
1
2
3
4
5
vrrp_script check_running {  
    script  "/usr/local/bin/check_running"
    interval  10      #脚本执行间隔
    weight  10       #脚本结果导致的优先级变更 10 表示优先级+ 10 - 10 则表示优先级- 10
}

然后在 实例( vrrp_instance)里面引用有点类似脚本里面的函数引用一样先定义后引用函数名 

?
1
2
3
4
track_script {
    check_running
    weight  20
}


注意VRRP脚本(vrrp_script)和VRRP实例( vrrp_instance)属于同一个级别 

LVS配置


如果你没有配置LVS+keepalived那么无需配置这段区域里如果你用的是nginx来代替LVS这无限配置这款这里的LVS配置是专门为keepalived+LVS集成准备的。
注意了这里LVS配置并不是指真的安装LVS然后用ipvsadm来配置他而是用keepalived的配置文件来代替ipvsadm来配置LVS这样会方便很多一个配置文件搞定这些维护方便配置方便是也

这里LVS配置也有两个配置
一个是虚拟主机组配置
一个是虚拟主机配置

1虚拟主机组配置文件详解
这个配置是可选的根据需求来配置吧这里配置主要是为了让一台realserver上的某个服务可以属于多个Virtual Server并且只做一次健康检查

virtual_server_group <STRING> {
# VIP port
<IPADDR> <PORT>
<IPADDR> <PORT>
fwmark <INT>
}

2虚拟主机配置

virtual server可以以下面三种的任意一种来配置

1. virtual server IP port

2. virtual server fwmark int

3. virtual server group string


下面以第一种比较常用的方式来配详细解说一下

virtual_server 192.168.1.2 80 {                     #设置一个virtual server: VIP:Vport
delay_loop 3                                                  # service polling的delay时间即服务轮询的时间间隔

lb_algo rr|wrr|lc|wlc|lblc|sh|dh                        #LVS调度算法
lb_kind NAT|DR|TUN                                      #LVS集群模式                      
persistence_timeout 120                                #会话保持时间秒为单位即以用户在120秒内被分配到同一个后端realserver
persistence_granularity <NETMASK>              #LVS会话保持粒度ipvsadm中的-M参数默认是0xffffffff即每个客户端都做会话保持
protocol TCP                                                  #健康检查用的是TCP还是UDP
ha_suspend                                                   #suspendhealthchecker’s activity
virtualhost <string>                                       #HTTP_GET做健康检查时检查的web服务器的虚拟主机即host头

sorry_server <IPADDR> <PORT>                 #备用机就是当所有后端realserver节点都不可用时就用这里设置的也就是临时把所有的请求都发送到这里啦

real_server <IPADDR> <PORT>                    #后端真实节点主机的权重等设置主要后端有几台这里就要设置几个
{
weight 1                                                         #给每台的权重0表示失效(不知给他转发请求知道他恢复正常)默认是1
inhibit_on_failure                                            #表示在节点失败后把他权重设置成0而不是冲IPVS中删除

notify_up <STRING> | <QUOTED-STRING>  #检查服务器正常(UP)后要执行的脚本
notify_down <STRING> | <QUOTED-STRING> #检查服务器失败(down)后要执行的脚本

HTTP_GET                                                     #健康检查方式
{
url {                                                                #要坚持的URL可以有多个
path /                                                             #具体路径
digest <STRING>                                            
status_code 200                                            #返回状态码
}
connect_port 80                                            #监控检查的端口

bindto <IPADD>                                             #健康检查的IP地址
connect_timeout   3                                       #连接超时时间
nb_get_retry 3                                               #重连次数
delay_before_retry 2                                      #重连间隔
} # END OF HTTP_GET|SSL_GET


#下面是常用的健康检查方式健康检查方式一共有HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK这些
#TCP方式
TCP_CHECK {
connect_port 80
bindto 192.168.1.1
connect_timeout 4
} # TCP_CHECK

# SMTP方式这个可以用来给邮件服务器做集群
SMTP_CHECK
host {
connect_ip <IP ADDRESS>
connect_port <PORT>                                     #默认检查25端口
14 KEEPALIVED
bindto <IP ADDRESS>
}
connect_timeout <INTEGER>
retry <INTEGER>
delay_before_retry <INTEGER>
# "smtp HELO"|·-ê§à"
helo_name <STRING>|<QUOTED-STRING>
} #SMTP_CHECK

#MISC方式这个可以用来检查很多服务器只需要自己会些脚本即可
MISC_CHECK
{
misc_path <STRING>|<QUOTED-STRING> #外部程序或脚本
misc_timeout <INT>                                    #脚本或程序执行超时时间

misc_dynamic                                               #这个就很好用了可以非常精确的来调整权重是后端每天服务器的压力都能均衡调配这个主要是通过执行的程序或脚本返回的状态代码来动态调整 weight值使权重根据真实的后端压力来适当调整不过这需要有过硬的脚本功夫才行哦
#返回0健康检查没问题不修改权重
#返回1健康检查失败权重设置为0
#返回2-255健康检查没问题但是权重却要根据返回代码修改为返回码-2例如如果程序或脚本执行后返回的代码为200#那么权重这回被修改为 200-2
}
} # Realserver
} # Virtual Server

配置文件到此就讲完了下面是一份未加备注的完整配置文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
global_defs
{
notification_email
{
admin @example .com
}
notification_email_from admin @example .com
smtp_server  127.0 . 0.1
stmp_connect_timeout  30
router_id node1
}
notification_email
{
admin @example .com
admin @ywlm .net
}
static_ipaddress
{
192.168 . 1.1 / 24  brd + dev eth0 scope global
192.168 . 1.2 / 24  brd + dev eth1 scope global
}
static_routes
{
src $SRC_IP to $DST_IP dev $SRC_DEVICE
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
vrrp_sync_group VG_1 {
group {
http
mysql
}
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault  "/path/fault.sh VG_1"
notify /path/to/notify.sh
smtp_alert
}
group {
http
mysql
}
vrrp_script check_running {
    script  "/usr/local/bin/check_running"
    interval  10
    weight  10
}
vrrp_instance http {
state MASTER
interface  eth0
dont_track_primary
track_interface {
eth0
eth1
}
mcast_src_ip <IPADDR>
garp_master_delay  10
virtual_router_id  51
priority  100
advert_int  1
authentication {
auth_type PASS
autp_pass  1234
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168 . 200.17 / 24  dev eth1
192.168 . 200.18 / 24  dev eth2 label eth2: 1
}
virtual_routes {
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src  192.168 . 100.1  to  192.168 . 109.0 / 24  via  192.168 . 200.254  dev eth1
192.168 . 110.0 / 24  via  192.168 . 200.254  dev eth1
192.168 . 111.0 / 24  dev eth2
192.168 . 112.0 / 24  via  192.168 . 100.254
}
track_script {
check_running weight  20
}
nopreempt
preemtp_delay  300
debug
}
virtual_server_group <STRING> {
# VIP port
<IPADDR> <PORT>
<IPADDR> <PORT>
fwmark <INT>
}
virtual_server  192.168 . 1.2  80  {
delay_loop  3
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT|DR|TUN
persistence_timeout  120
persistence_granularity <NETMASK>
protocol TCP
ha_suspend
virtualhost <string>
sorry_server <IPADDR> <PORT>
real_server <IPADDR> <PORT>
{
weight  1
inhibit_on_failure 
notify_up <STRING> | <QUOTED-STRING>
notify_down <STRING> | <QUOTED-STRING>
#HTTP_GET方式
HTTP_GET | SSL_GET
{
url { 
path / 
digest <STRING>                                            
status_code  200
}
connect_port  80 
bindto <IPADD>
connect_timeout    3
nb_get_retry  3
delay_before_retry  2
} 
}
}


注意这里仅仅是罗列并不是可用的配置文件。里面需要根据自己的时间情况稍加配置才能用

项目篇:移动平台机械臂视觉定位抓取实施(基于ROS架构) ROS包内容: 这篇日志的目的是快速项目实施,所以详细的部分会不断补充。 1、相机采集包(创建抓取图像服务,单张) Realsense Camera(微软深度摄像头,官方提供ros包) Pylon Camera(basler相机,官方提供ros包) 2、定位算法包(抓取图像,定位标志物) Aruco_ros (二维码定位,官方提供ros包) Apriltag (二维码定位,官方提供ros包)... 阅读详情

相关推荐

MATLAB实战:蓝牙GFSK调制解调全流程解析(附误码率优化技巧)

本文深入解析了蓝牙GFSK调制解调在MATLAB中的全流程实现,包括高斯滤波器设计、调制解调技术及误码率优化技巧。通过实战案例和代码示例,帮助工程师提升蓝牙通信系统的性能表现,特别是在降低误码率方面的有效方法。

weixin_29046035的博客 277

Keepalived

Keepalived 一、双机技术概念 指由两台服务器运行某种同样的应用,为用户提供服务,当某一台出现问题时,用户的请求将由另一台服务器继续提供,从而实现高可用性。双机技术又被称为双机热备或双机容错。 二、HA的容错过程 1.自动检测 2.自动切换 3.自动恢复 三、HA的三种工作模式 1、双机技术 (主从模式) 2、双机双工 (两个服务器运行不同的服务,然后相互为各自的备机) 3、集群模式 四、Keepalived(保持存活) 1、keepalived基于vrrp协议来实现ha的 注:vrrp协议,可以实

m0_49626558的博客 2366

基于51单片机的简易计算器设计(原理图+仿真+源代码+参考论文)

本设计以51单片机为核心,矩阵键盘输入数字,通过1602显示屏显示计算结果,能够实现整数的加、减、乘、除四则运算,具备清除功能。

u012759563的博客 7699

KEEPALIVED原理

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。基于VRRP(冗余协议)基础之上提高系统高用性、降低平均故障时间,减少资源耗费的高可用集群。通常情况下是将两台服务器组成一个热备组,同一时间热备组内只有一台主服务器(master)提供服务,同时master会虚拟出一个共用IP地址(VIP),这个VIP只存在master上并对外提供服务。

hxdcxy的博客 2674

别再傻傻分不清了!一文搞懂电机里的‘旋变’和‘编码器’到底有啥区别

本文深度解析电机位置传感器中旋转变压器(旋变)与编码器的核心区别,包括工作原理、精度对比及环境适应性。通过实测数据和典型应用场景,帮助工程师在工业机器人、新能源汽车电机等关键领域做出精准选型决策,提升系统可靠性和控制精度。

weixin_28689507的博客 504

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 950

LVS负载均衡之--Keepalived模式(具详细)

前言:前面和拐友们一起掌握了NAT和DR模式,这章来看一下负载均衡里的最后一种Keepalived模式,在生产中这个模式用的是还是比较广泛的目录一.Keepalived概述1.2Keepalived的工作原理1.3Keepalived体系主要模块及其作用1.4 VRRP (虚拟路由冗余协议)二.环境部署 2.1部署主服务器配置 2.2部署备服务器配置 2.3部署节点服务器web1 2.4部署节点服务器web2 三.验证 四.总结Keepalived 是一个基于VRRP协议

weixin_67474417的博客 4510

docker 安装oracle

本文介绍了使用Docker部署Oracle数据库的实践指南。主要内容包括:常用Oracle镜像的阿里云和华为云拉取地址,11g/12c/19c等不同版本的启动命令示例,以及连接数据库的基本信息。实战部分详细演示了Oracle 11g的安装过程,包括镜像拉取、容器启动、密码修改和数据库连接步骤,并通过Sql Developer和命令行两种方式创建用户。最后提到数据持久化的重要性,建议将数据库文件挂载到宿主机目录以防止容器删除导致数据丢失。文章提供了完整的操作命令和截图说明,适合需要快速部署Oracle测试环境

weixin_39766667的博客 373

Keepalived 实现服务高可用

一、keepalived服务说明 1 keepalived是什么? Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。 Keepalived软件主要是通过V...

赵先森 982

【大模型】DeepSeek + Coze 打造个人专属AI智能体使用详解

DeepSeek + Coze 打造个人专属AI智能体使用详解

congge 1万+

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

算法如诗的博客 258

Keepalived工作方式及配置

​一,keepalived是做什么的 keepalived是专门用来监控集群系统中各个服务节点的状态,如果集群系统中某个节点出现了故障,keepalived会自动检测到,并自动将出现故障的服务节点从集群系统中去除,从而保持你的服务可以靠其他无故障的服务节点正常保持运行状态,这些工作都可以使用keepalived自动完成,而人工只需要修复出现故障的服务节点。 Keepalived又引入了VRRP的功能(虚拟路由冗余协议),他的目的是解决静态路由出现单点故障的问题,通过VRRP实现网络不间断的稳定提供服务

无求道贾的博客 2527

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: MySQL 高可用浅析
下一篇: mysql主从复制讲解
benpaobagzb
博客等级 码龄11年 512粉丝 636原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值