【Liunx常用操作】利用chrony服务,配置NTP时钟同步

提示:为保证文章的正确性和实用性,文章内容可能会不定时优化改进,若您有建议或者文章存在错误请私信留言或评论指正💖😊💖。下面以CentOS7.9操作系统为例,介绍具体的操作步骤,如果本文对你有帮助,记得关注加收藏哟🤞。


1、文章前言

时间同步是系统运行必不可少的重要因素,尤其是集群类的系统,更是要求集群内节点时间一致,时间差距过大,则会导致服务或进程运行异常。
目前Liunx系统主流的时间同步软件有ntpchrony。ntp在系统中集成比较广泛,chrony则是在rhel7.0、CentOS7.2等版本后才替代ntp的。注意:若系统内同时安装了ntp和chrony服务,那么系统每次启动时会默认关闭ntp服务,即使设置了开机启动,所以请确保系统内只安装所需的时间同步服务。本章节介绍chrony的安装和常用配置方法,若要了解和配置ntp服务,请点此前往

2、服务介绍

chrony是网络时间协议(NTP)的通用实现,是一个用于计算机系统中时钟同步的服务。chrony结合了NTP和PTP的特点,可以实现更高精确度的时钟同步,在互联网上同步的两台机器之间的典型精度在几毫秒内,在局域网上精度通常为几十微秒。而且chrony的网络适应性和容错性非常强,可以根据网络延迟和抖动等情况自动调整时钟同步策略,在网络不稳定或上级NTP服务器不可用的情况下仍然可以继续提供时钟同步服务。同时chrony还提供了丰富的配置选项,可以根据需求进行灵活的配置,如选择时间同步服务器、对时间同步通信进行加密、调整同步频率以及每次同步的时间跃进值等。chrony官方手册点击前往。

chrony服务分为chronycchronyd两个模块。
chronyc是chrony的命令行工具。用户通过chronyc与chronyd进行交互,进行查看和修改时间同步的状态、配置信息,手动请求时间校正、查看时钟源服务器列表等操作。
chronyd是chrony的守护进程。负责管理并执行时间同步,chronyd会根据配置文件“/etc/chrony.conf”中的设置,自动选择最佳的时钟源并根据需要进行时间校正。值得一提的是chronyd启动时会占用UDP123323两个端口,UDP123端口用来提供时间同步功能,UDP323端口则是提供给chronyc交互用的。

3、操作步骤

3.1、安装chrony服务

步骤一: 执行以下命令, 检查系统内是否已安装chrony服务,如下图若有回显则表示对应服务已安装。

rpm -qa |grep chrony

1

步骤二: 若没有回显则表示服务未安装,执行以下命令安装chrony服务。如下图表示成功安装chrony服务。

yum install -y chrony

2
步骤三:步骤二命令执行提示如下图“没有可用软件包”或“软件包获取失败”,则参考利用iso镜像制作并使用本地yum源章节配置本地yum源后,再执行步骤二安装chrony服务。
3
步骤四: chrony服务安装完成后,执行以下命令,设置chrony服务开机自动启动。

systemctl enable chronyd

4

3.2、配置chrony为时钟源

步骤一: 在规划的作为时钟源的节点操作系统上执行以下命令,编辑chrony配置文件“/etc/chrony.conf”。一般的chrony使用场景下,时钟源服务器端只需根据需求配置serverallowlocal stratum参数即可。

vim /etc/chrony.conf
参数描述
server具体的IP地址(后面可加具体选项)server参数用于指定上级时钟源,当本节点需要同步其他时钟源的时间时,可以通过该参数指定上级时钟源IP。其选项包括:iburst(在与上级时钟源建立连接时,使用更快的初始轮询间隔来加快同步速度);prefer(当存在多个上级时钟源时,该选项将指定的上级时钟源作为首选上级时钟源,即优先选择该时钟源进行时间同步);minpoll X(表示设置最小轮询间隔为2X秒,X默认为6,在使用公网时钟源时,建议X不小于6即最小轮询间隔不小于64秒 );maxpoll X(表示设置最大轮询间隔为2X秒,X默认为10)。 举例1:server 192.168.100.10(指定上级时钟源为192.168.100.10);举例2:server 192.168.100.20 prefer(指定上级时钟源为192.168.100.20,并设置为首选时钟源);举例3:server 192.168.100.40 iburst minpoll 7 maxpoll 11(指定上级时钟源为192.168.100.40,并设置了iburst探测,指定了最小轮询间隔为128秒,最大轮询间隔为2048秒)
driftfile一个绝对路径,默认为:“/var/lib/chrony/drift”指定存储系统时钟漂移值的文件路径。chrony会根据系统时钟的漂移值进行时间同步
makestep浮点数值 整数值该参数用于指定系统时钟进行时间跃进的条件。它允许在某些情况下进行立即调整本地时钟,例如当chronyd启动时,检测到系统时钟和时钟源时钟差距过大,该参数强制chronyd逐步跃进调整系统时钟。举例:makestep 100 10(当本节点时间和时钟源时间相差大于100秒时,在前10次更新过程中,进行时间跃进调整以尽快校准本地时钟,之后再根据漂移值进行微调)
rtcsync该参数表示启用硬件实时时钟(RTC)的内核同步,建议开启。在该模式下,系统时间会定期复制到RTC(Linux内核默认11分钟复制一次)。此指令不能与rtcfile参数一起使用
hwtimestamp*/具体网口该参数表示是否在支持它的接口上启用硬件时间戳,硬件时间戳是使用网络接口控制器(NIC)自己的时钟来进行标记的,因为它不受系统内核以及驱动程序的影响,所以可以提供更高的精确度和可靠性。该参数要求时钟源和客户端都需要使用HW时间戳,而且使用该参数的前提是NIC必须支持硬件时间戳,可以使用“ethtool -T 网口名称”进行验证是否支持。
minsources整数值该参数用于指定调整系统时钟前所需的最小可选源数量,默认为1,即存在一个可用时钟源即可进行时钟同步。举例:minsources 2(必须存在两个可用时钟源时才进行时间同步,当只有一个时钟源(可能提供不正确的时间)可访问时,将不进行时间同步更新)
allow空/IP/IP地址段该参数关闭时,表示当前节点仅作为chrony客户端使用,不对外提供时间同步服务,开启本参数时,表示当前节点作为chrony时钟源对外提供时间同步功能。举例1:allow all(允许所有客户端访问本时钟源,为所有客户端提供时间同步功能)举例2:allow 192.168.100.0/24(只允许192.168.100.10访问本时钟源,为其提供时间同步功能)举例3:allow 192.168.100.0/24(只允许192.168.100.0/24网段内的客户端访问本时钟源,为其提供时间同步功能)
local stratum0~15整数值该参数用于指定当前时钟源的层级。通常情况下时钟源的层级是从上级时钟源传递来的,例如当前时钟源的上级时钟源的stratum为5,那么当前时钟源stratum会设置为6。当上级时钟源故障无法确认层级时,通过该参数手动指定当前时钟源层级之后,即使当前时钟源未有效同步到上级时钟源的情况下,也能继续为客户端提供时间同步服务
keyfile一个绝对路径,默认为:“/etc/chrony.keys”该参数用于指定包含对称密钥的文件的位置,该对称密钥在时间同步服务器端和客户端或对等端之间共享,以便使用加密算法传输验证时间同步数据包。
logdir一个绝对路径,默认为:“/var/log/chrony”该参数用于指定写入日志文件的目录。如果目录不存在,将自动创建

更多参数说明详见chrony官方手册对应chrony版本的“chrony.conf(5) - chronyd configuration file”章节

步骤二: 如下图所示举例配置,移动光标到需要修改配置的地方,按“i”进入vim文本编辑器插入模式,注释掉红框中的默认“server”参数,指定本节点的上级时钟源为国家授时中心时钟源“ntp.ntsc.ac.cn” 和阿里云时钟源“ntp.aliyun.com”,并选择国家授时中心时钟源为首选上级时钟源,并设置当前时钟源仅为192.168.1.0/24网段和192.168.100.2提供时间同步功能,且设置当前时钟源层级为10。(注意:若是在局域网环境中规划该节点为时钟源,那么需要注释掉所有server参数的配置,留空或只添加“server 127.0.0.1”,将该服务器的上级时钟源设置为节点本身即可)。“/etc/chrony.conf”配置文件修改完成后,按“Esc”键退出vim文本编辑器插入模式,按住“Shift”+“:”键进入vim文本编辑器命令行模式,输入“wq”保存修改并退出。
5
步骤三: 执行以下命令,重启chrony服务。

systemctl restart chronyd

步骤四: 执行以下命令,查看chrony服务状态是否为运行中“active (running)”。

systemctl status chronyd

6
步骤五: 执行以下命令,查看上级时钟源的状态和时间同步信息。

chronyc sources -v

7

字段描述
MS时钟源模式和状态,模式分为:‘^’ 表示该时钟源是时间服务时钟源;‘=’ 表示该时钟源是对等时钟源(与当前节点stratum相同);‘#’ 表示该时钟源是本地时钟源,即本节点;状态分为:‘*’ 表示当前时间同步使用中的时钟源,理解为主时钟源;‘+’ 表示该时钟源是与当前使用中的时钟源相结合的时间源,理解为次时钟源;‘-’ 表示该时钟源是被合并算法排除的可选择用于时间同步但当前未使用的时钟源,理解为备时钟源;‘?’ 表示由于其他原因(例如无法访问、未同步或没有足够的测量值)而不能选择作为时间同步的时钟源;‘x’ 表示该时钟源时间可能存在问题,其时间和大多数时钟源不一致,不受信任;‘~’ 表示该时钟源的时间变化太大
Name/IP address时钟源的名称(或IP地址或Refernce ID)
Stratum该时钟源的层级,层级1的时钟源直接连接到原子钟,层级2的时钟源与层级1的时钟源同步,依此类推
Poll当前节点向时钟源发送时间同步请求的时间间隔2Poll(单位秒),Poll为6,表示每隔26=64s(秒)对该时钟源进行时间轮询请求,Poll为9就是每隔29=512s(秒)对该时钟源进行时间轮询请求,chronyd会根据情况自动调整轮询频率。
Reach表示时间同步请求的响应情况,用八进制表示,一般Reach值为377,转换成二进制就是11111111,表示最近8次时间同步请求收到了有效应答
LastRx表示当前节点上一次向时钟源获取时间同步到现在过了多长时间,不带字母默认单位为秒,携带字母则表示m(分钟)、h(小时)、d(天)、y(年)
Last sample表示当前节点与时钟源之间的时间偏差,使用s(秒)、ms(毫秒)、us(微妙)、ns(纳秒)作为后缀。方括号中的数字表示当前实际测量的偏移量,方括号左边的数字是最初测量的偏移量,“+/-”符号后的数字显示的是测量误差大小,“+”表示当前节点时间比时钟源时间快

更详细的回显说明详见chrony官方手册的“chronyc(1) - command-line interface for chronyd”章节

步骤六: 执行以下命令,查看时间同步状态。

chronyc tracking

7

字段描述
Reference ID为当前节点提供时间同步的时钟源的参考ID和名称(或IP地址)。如果参考ID为7F7F0101,并且没有名称(或IP地址),则表示当前节点未与任何其他时钟源进行时间同步,chrony使用本地模式运行
Stratum表示与Stratum-1(最高层级)时钟的距离。举例:当Stratum:3,表示当前节点和最高层级的时钟源距离为3,当前节点同步时间的时钟源的Stratum(层级)则是2
Ref time (UTC)最近一次与时钟源同步时间的时间点,以UTC(世界标准时间)形式显示
System time系统当前时间和chrony获取的时钟源时间的差值,fast表示当前时间快于时钟源,slow表示当前时间慢于时钟源
Last offset最近一次时钟同步时的本地偏移量,即时间同步时客户端时间变更量,“+”表示本地时间快于时钟源时间,时间向后调整,“-”表示本地时间慢于时钟源时间,时间向前调整
RMS offset时钟偏移量的长期平均值
Frequency如果chronyd不进行校正,系统时钟出错的频率,以ppm表示(百万分之几),含fast表示快于真实时间,含slow表示慢于真实时间。举例1:7ppm slow(表示当前系统时钟认为时间变化了1秒时,实际上真实时间变化了1.000007秒)举例2:9ppm fast(表示当前系统时钟认为时间变化了1秒时,实际上真实时间变化了0.999991秒)
Residual freq残余频率,表示当前节点系统时钟相对于时钟源时钟的频率偏差,即系统时钟运行速度与参考时钟运行速度之间的差异。如果残余频率为正,表示系统时钟运行略快于参考时钟;如果残余频率为负,表示系统时钟运行略慢于参考时钟
Skewchrony估计的频率误差范围
Root delay当前节点到Stratum-1(最高层级)时钟的网络路径延迟的估计值
Root dispersion当前节点时间与Stratum-1(最高层级)时钟的时间差估计值
Update interval最后两次时钟更新的时间间隔
Leap status时间跃进状态,值为Normal(正常)、Insert second(增加秒)、Delete second(删除秒)、Not synchronized(未同步)

更详细的回显说明详见chrony官方手册的“chronyc(1) - command-line interface for chronyd”章节

3.3、配置chrony为客户端

步骤一: 在规划的chrony客户端节点上执行以下命令,编辑ntp配置文件“/etc/chrony.conf”。一般的chrony使用场景下,chrony客户端只需注释掉如下图红框中的默认参数,并根据需求配置server参数即可(server参数的值即时钟源的域名或者IP地址)。

vim /etc/chrony.conf

9

参数描述
server具体的IP地址(后面可加具体选项)server参数用于指定上级时钟源,当本节点需要同步其他时钟源的时间时,可以通过该参数指定上级时钟源IP。其选项包括:iburst(在与上级时钟源建立连接时,使用更快的初始轮询间隔来加快同步速度);prefer(当存在多个上级时钟源时,该选项将指定的上级时钟源作为首选上级时钟源,即优先选择该时钟源进行时间同步);minpoll X(表示设置最小轮询间隔为2X秒,X默认为6,在使用公网时钟源时,建议X不小于6即最小轮询间隔不小于64秒 );maxpoll X(表示设置最大轮询间隔为2X秒,X默认为10)。 举例1:server 192.168.100.10(指定上级时钟源为192.168.100.10);举例2:server 192.168.100.20 prefer(指定上级时钟源为192.168.100.20,并设置为首选时钟源);举例3:server 192.168.100.40 iburst minpoll 7 maxpoll 11(指定上级时钟源为192.168.100.40,并设置了iburst探测,指定了最小轮询间隔为128秒,最大轮询间隔为2048秒)

步骤二: 执行以下命令,重启chrony服务。

systemctl restart chronyd

步骤三: 执行以下命令,查看chrony服务状态是否为运行中“active (running)”。

systemctl status chronyd

10
步骤四: 执行以下命令,查看上级时钟源的状态和时间同步状态。

chronyc sources -v

11

字段描述
MS时钟源模式和状态,模式分为:‘^’ 表示该时钟源是时间服务时钟源;‘=’ 表示该时钟源是对等时钟源(与当前节点stratum相同);‘#’ 表示该时钟源是本地时钟源,即本节点;状态分为:‘*’ 表示当前时间同步使用中的时钟源,理解为主时钟源;‘+’ 表示该时钟源是与当前使用中的时钟源相结合的时间源,理解为次时钟源;‘-’ 表示该时钟源是被合并算法排除的可选择用于时间同步但当前未使用的时钟源,理解为备时钟源;‘?’ 表示由于其他原因(例如无法访问、未同步或没有足够的测量值)而不能选择作为时间同步的时钟源;‘x’ 表示该时钟源时间可能存在问题,其时间和大多数时钟源不一致,不受信任;‘~’ 表示该时钟源的时间变化太大
Name/IP address时钟源的名称(或IP地址或Refernce ID)
Stratum该时钟源的层级,层级1的时钟源直接连接到原子钟,层级2的时钟源与层级1的时钟源同步,依此类推
Poll当前节点向时钟源发送时间同步请求的时间间隔2Poll(单位秒),Poll为6,表示每隔26=64s(秒)对该时钟源进行时间轮询请求,Poll为9就是每隔29=512s(秒)对该时钟源进行时间轮询请求,chronyd会根据情况自动调整轮询频率。
Reach表示时间同步请求的响应情况,用八进制表示,一般Reach值为377,转换成二进制就是11111111,表示最近8次时间同步请求收到了有效应答
LastRx表示当前节点上一次向时钟源获取时间同步到现在过了多长时间,不带字母默认单位为秒,携带字母则表示m(分钟)、h(小时)、d(天)、y(年)
Last sample表示当前节点与时钟源之间的时间偏差,使用s(秒)、ms(毫秒)、us(微妙)、ns(纳秒)作为后缀。方括号中的数字表示当前实际测量的偏移量,方括号左边的数字是最初测量的偏移量,“+/-”符号后的数字显示的是测量误差大小,“+”表示当前节点时间比时钟源时间快

更详细的回显说明详见chrony官方手册的“chronyc(1) - command-line interface for chronyd”章节

步骤五: 执行以下命令,查看时间同步状态。

chronyc tracking

12

字段描述
Reference ID为当前节点提供时间同步的时钟源的参考ID和名称(或IP地址)。如果参考ID为7F7F0101,并且没有名称(或IP地址),则表示当前节点未与任何其他时钟源进行时间同步,chrony使用本地模式运行
Stratum表示与Stratum-1(最高层级)时钟的距离。举例:当Stratum:3,表示当前节点和最高层级的时钟源距离为3,当前节点同步时间的时钟源的Stratum(层级)则是2
Ref time (UTC)最近一次与时钟源同步时间的时间点,以UTC(世界标准时间)形式显示
System time系统当前时间和chrony获取的时钟源时间的差值,fast表示当前时间快于时钟源,slow表示当前时间慢于时钟源
Last offset最近一次时钟同步时的本地偏移量,即时间同步时客户端时间变更量,“+”表示本地时间快于时钟源时间,时间向后调整,“-”表示本地时间慢于时钟源时间,时间向前调整
RMS offset时钟偏移量的长期平均值
Frequency如果chronyd不进行校正,系统时钟出错的频率,以ppm表示(百万分之几),含fast表示快于真实时间,含slow表示慢于真实时间。举例1:7ppm slow(表示当前系统时钟认为时间变化了1秒时,实际上真实时间变化了1.000007秒)举例2:9ppm fast(表示当前系统时钟认为时间变化了1秒时,实际上真实时间变化了0.999991秒)
Residual freq残余频率,表示当前节点系统时钟相对于时钟源时钟的频率偏差,即系统时钟运行速度与参考时钟运行速度之间的差异。如果残余频率为正,表示系统时钟运行略快于参考时钟;如果残余频率为负,表示系统时钟运行略慢于参考时钟
Skewchrony估计的频率误差范围
Root delay当前节点到Stratum-1(最高层级)时钟的网络路径延迟的估计值
Root dispersion当前节点时间与Stratum-1(最高层级)时钟的时间差估计值
Update interval最后两次时钟更新的时间间隔
Leap status时间跃进状态,值为Normal(正常)、Insert second(增加秒)、Delete second(删除秒)、Not synchronized(未同步)

更详细的回显说明详见chrony官方手册的“chronyc(1) - command-line interface for chronyd”章节

4、常用命令

4.1、chronyc tracking

显示有关系统时钟性能的参数

字段描述
Reference ID为当前节点提供时间同步的时钟源的参考ID和名称(或IP地址)。如果参考ID为7F7F0101,并且没有名称(或IP地址),则表示当前节点未与任何其他时钟源进行时间同步,chrony使用本地模式运行
Stratum表示与Stratum-1(最高层级)时钟的距离。举例:当Stratum:3,表示当前节点和最高层级的时钟源距离为3,当前节点同步时间的时钟源的Stratum(层级)则是2
Ref time (UTC)最近一次与时钟源同步时间的时间点,以UTC(世界标准时间)形式显示
System time系统当前时间和chrony获取的时钟源时间的差值,fast表示当前时间快于时钟源,slow表示当前时间慢于时钟源
Last offset最近一次时钟同步时的本地偏移量,即时间同步时客户端时间变更量,“+”表示本地时间快于时钟源时间,时间向后调整,“-”表示本地时间慢于时钟源时间,时间向前调整
RMS offset时钟偏移量的长期平均值
Frequency如果chronyd不进行校正,系统时钟出错的频率,以ppm表示(百万分之几),含fast表示快于真实时间,含slow表示慢于真实时间。举例1:7ppm slow(表示当前系统时钟认为时间变化了1秒时,实际上真实时间变化了1.000007秒)举例2:9ppm fast(表示当前系统时钟认为时间变化了1秒时,实际上真实时间变化了0.999991秒)
Residual freq残余频率,表示当前节点系统时钟相对于时钟源时钟的频率偏差,即系统时钟运行速度与参考时钟运行速度之间的差异。如果残余频率为正,表示系统时钟运行略快于参考时钟;如果残余频率为负,表示系统时钟运行略慢于参考时钟
Skewchrony估计的频率误差范围
Root delay当前节点到Stratum-1(最高层级)时钟的网络路径延迟的估计值
Root dispersion当前节点时间与Stratum-1(最高层级)时钟的时间差估计值
Update interval最后两次时钟更新的时间间隔
Leap status时间跃进状态,值为Normal(正常)、Insert second(增加秒)、Delete second(删除秒)、Not synchronized(未同步)

4.2、chronyc makestep

立即同步时钟源时间
注意:如果时间变动过大可能会对某些软件或程序的运行造成影响,该命令需自行评估使用。

4.3、chronyc soucre -v

详细显示时钟源列表及相关信息

字段描述
MS时钟源模式和状态,模式分为:‘^’ 表示该时钟源是时间服务时钟源;‘=’ 表示该时钟源是对等时钟源(与当前节点stratum相同);‘#’ 表示该时钟源是本地时钟源,即本节点;状态分为:‘*’ 表示当前时间同步使用中的时钟源,理解为主时钟源;‘+’ 表示该时钟源是与当前使用中的时钟源相结合的时间源,理解为次时钟源;‘-’ 表示该时钟源是被合并算法排除的可选择用于时间同步但当前未使用的时钟源,理解为备时钟源;‘?’ 表示由于其他原因(例如无法访问、未同步或没有足够的测量值)而不能选择作为时间同步的时钟源;‘x’ 表示该时钟源时间可能存在问题,其时间和大多数时钟源不一致,不受信任;‘~’ 表示该时钟源的时间变化太大
Name/IP address时钟源的名称(或IP地址或Refernce ID)
Stratum该时钟源的层级,层级1的时钟源直接连接到原子钟,层级2的时钟源与层级1的时钟源同步,依此类推
Poll当前节点向时钟源发送时间同步请求的时间间隔2Poll(单位秒),Poll为6,表示每隔26=64s(秒)对该时钟源进行时间轮询请求,Poll为9就是每隔29=512s(秒)对该时钟源进行时间轮询请求,chronyd会根据情况自动调整轮询频率。
Reach表示时间同步请求的响应情况,用八进制表示,一般Reach值为377,转换成二进制就是11111111,表示最近8次时间同步请求收到了有效应答
LastRx表示当前节点上一次向时钟源获取时间同步到现在过了多长时间,不带字母默认单位为秒,携带字母则表示m(分钟)、h(小时)、d(天)、y(年)
Last sample表示当前节点与时钟源之间的时间偏差,使用s(秒)、ms(毫秒)、us(微妙)、ns(纳秒)作为后缀。方括号中的数字表示当前实际测量的偏移量,方括号左边的数字是最初测量的偏移量,“+/-”符号后的数字显示的是测量误差大小,“+”表示当前节点时间比时钟源时间快

4.4、chronyc reselect

为了避免时钟源不断切换,chronyd会与最开始选择的最佳时钟源保持时间同步,即使后面当前可用源不再是最佳时钟源。执行chronyc reselect命令则可以强制chronyd重新选择最佳的时钟源

4.5、chronyc ntpdata 时钟源IP

显示指定时钟源的有效测量和特定信息,详细的回显说明详见chrony官方手册的“chronyc(1) - command-line interface for chronyd”章节

5、总结

chrony服务的安装配置流程与ntp服务的安装配置流程大致相似,chrony优化了配置文件中的一些参数,增加了部分更为实用的功能,更易于配置和管理。整体来说chrony的时间同步机制要比ntp更加强大精准,而且对网络的延迟和抖动的应对能力要强于ntp,但是目前使用上并没有ntp普遍。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JueShiYingJun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值