- 浏览: 1064932 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
目录 |
LVS实现负载均衡
Linux 服务器集群系统(以下简称 LVS), 是一个由章文嵩博士发起的自由软件项目,现在已经是 Linux 标准内核的一部分。LVS 从 Linux 内核还在 2.0 版本的时代开始,就得到广泛的应用,目前Linux 的内核已经是 2.6 版,完全内置了 LVS 的各个模块,已经不需要在给内核打任何补丁。
基于NAT方式的LVS
硬件需求与网络拓扑结构
使用NAT方式时,director同时是一台NAT网关,它必须有一个公网IP,当收到请求时按照调度算法把请求转发给局域网中的某台realserver,realserver处理完请求后把结果返回给director,此时director将结果返回给 client。因为NAT方式完全依赖于director,需要d机有较强的数据吞吐,同时这也导致了d成为一个瓶颈。根据官方的文档当realserver少于20台时用NAT比较合适。
对于普通的玩家而言,很少有多台设备的。一般都只用一台PC,因此这里要使用虚拟机virtualbox,所以系统是Debian。
测试环境大致如下:
clinet: host主机 debian。
LB:virtualbox主机 debian。
RS1...n:virtualbox主机 debian。
拓扑结构为:
client ----------> LB -----------> RS1
vboxnet0 ip:192.168.56.1 eth0 ip:192.168.56.2 eth0 ip:192.168.0.2
netmask:255.255.255.0 netmask:255.255.255.0 netmask:255.255.255.0
gateway:192.168.0.1
eth1 ip:192.168.0.1 RS2
netmask:255.255.255.0 eth0 ip:192.168.0.3
netmask:255.255.255.0
gateway:192.168.0.1
.
.
.
RSn
这里需要注意的事:
LB virtualbox主机启用了两块网卡,eth0在virtualbox上的模式为host-only,专门连本地机器client;eth1在virtualbox上的模式为Internal,专门跟虚拟机间的系统相联。
RS virtualbox主机启用了一块网卡,在virtualbox上的模式为Internal,专门跟虚拟机间的系统相联。
配置LVS
在LB上的配置
1.添加realserver
ipvsadm -C //清除ipvsadm表 ipvsadm -A -t 192.168.56.2:8080 -s rr //使用ipvsadm安装LVS服务,rr为轮询方式 ipvsadm -a -t 192.168.56.2:8080 -r 192.168.0.2:8080 -m -w 1 //增加第一台realserver,-m为NAT方式,-w为优先级 ipvsadm -a -t 192.168.56.2:8080 -r 192.168.0.3:8080 -m -w 1 //增加第二台realserver /etc/init.d/ipvsadm save //默认保存到/etc/ipvsadm.rules
2.开启ip转发
echo "1" >/proc/sys/net/ipv4/ip_forward
注:永久修改要修改sysctl.conf
如果想开机保证能运行,需要在/etc/rc.local添加以下内容:
/etc/init.d/ipvsadm restart //确保ipvsadm启动 /etc/init.d/ipvsadm load /etc/ipvsadm.rules //加载规则 echo "1" >/proc/sys/net/ipv4/ip_forward //开启ip转发
在RS上的配置
1.在RS1、RS2…RSn上分别关闭ip转发
echo "0" >/proc/sys/net/ipv4/ip_forward
2.分别启动web服务
这里用的是resin-3.1.9,并对resin的首页进行了修改,使得可以分清具体访问的是哪个服务器。
测试
在LB上运行ipvsadm能看到初始数据为:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.2:http-alt rr -> 192.168.0.3:http-alt Masq 1 0 0 -> 192.168.0.2:http-alt Masq 1 0 0
在client的浏览器上多次访问http://192.168.56.2:8080 ,会看到页面有变化。 再次在LB上运行ipvsadm能看到类似以下数据:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.56.2:http-alt rr -> 192.168.0.3:http-alt Masq 1 0 10 -> 192.168.0.2:http-alt Masq 1 0 11
LVS+KeepAlived实现负载均衡
上面介绍了用LVS做负载均衡,但是有两个问题,一是如果RealServer中其中一台挂掉了,lvs不会自动的转发到正常的RealServer,而是继续转发到挂掉的RealServer上;二是因为只有一台loadBalancer,所以如果那台loadBalancer挂掉就等于整个网络挂掉了。
为了解决那两个问题,这里用到了KeepAlived,它主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
基于NAT方式
硬件需求与网络拓扑结构
从上图可以看到跟上一节只用LVS做负载均衡的拓扑结构差不多,只是LoadBalancer多了一台做Backup服务器。
基于上节的实验环境,只需要增加一个虚拟机,系统和网卡跟上节的LB服务器一样,现把这服务器称为BLB服务器,其网卡IP设置如下:
eth0 ip:192.168.56.3 netmask:255.255.255.0 eth1 ip:192.168.0.253 netmask:255.255.255.0
另外有两个特殊的IP地址是最需要注意的:
一个是整个集群对外统一使用的IP地址,我们称它为VIP(Virtual IP),这里我们假设它为192.168.56.254,所有Client都通过这个IP访问真实服务,这是可跟DNS绑定的IP。
另一个特殊的IP是RealServer的gateway默认网关,我们称为V-gate(Virtual gate),上节我们指定RealServer的gateway为192.168.0.1,其对应的是LoadBalancer服务器的IP,现在由于多了一台LoadBalancer,为了使两台LoadBalancer都可以用到这个IP,我们先把上节LB的eth1 ip改为192.168.0.254。
这两个IP会在下面的KeepAlived配置文件中配置。
配置KeepAlived
使用KeepAlived是不需要配置LVS的转发规则的,如果在上节中配置了LVS的转发规则,可以用以下命令清除掉:
ipvsadm -C
要实现LVS+KeepAlived负载均衡,只需要修改/etc/keepalived/keepalived.conf文件即可。
修改文件时需要注意的是,由于没有语法检错,所以要注意单词拼写,还有每个“{”前都要有空格。
LB上的keepalived.conf文件配置如下:
# Configuration File for keepalived global_defs { #每个load balancer 都有一个不同的ID lvs_id lvs01 } #不使用vrrp_sync_groups的话,如果机器有两个网段,一个内网一个外网, #每个网段开启一个VRRP实例,假设VRRP配置为检查内网,那么当外网出现问题时, #VRRP认为自己仍然健康,那么不会发送Master和Backup的切换,从而导致了问题。 #vrrp_sync_groups就是为了解决这个问题,可以把两个实例都放进一个Sync Group, #这样的话,group里面任何一个实例出现问题都会发生切换。 vrrp_sync_group VG1 { group { VI_1 VI_2 } } #这个是外网网段的VRRP实例 vrrp_instance VI_1 { state MASTER interface eth0 lvs_sync_daemon_interface eth0 #每个virtual_router_id都要唯一 virtual_router_id 51 #这个是MASTERT和BACKUP服务器竞争的优先级,习惯MASTERT大于BACKUP priority 150 #检测间隔,默认1s advert_int 1 #这是两个服务器的同步验证,有PASS和AH两种方式 authentication { auth_type PASS auth_pass 1111 } #这里指定VIP当MASTER和BACKUP切换时,这些IP会添加到相应服务器上 virtual_ipaddress { 192.168.56.254 #这个是我们上面说的VIP #如果有多个,可以继续添加 } } #这个是内网的实例 vrrp_instance VI_2 { state MASTER interface eth1 lvs_sync_daemon_interface eth1 virtual_router_id 52 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.1 #这个是我们需要的V-gate } } #下面添加LVS的转发规则 virtual_server 192.168.56.254 8080 { delay_loop 6 #调度规则,这里用rr指轮询方式 lb_algo rr #这里是负载均衡的方式,我们基于NAT方式 lb_kind NAT #这是对真实服务器健康检查的方式,这里用TCP方式 protocol TCP real_server 192.168.0.2 8080 { #真实服务器的优先级 weight 1 #用TCP方式检查 TCP_CHECK { connect_timeout 3 #连接超时时间 } } real_server 192.168.0.3 8080 { weight 1 TCP_CHECK { connect_timeout 3 } } }
BLB上的keepalived.conf文件配置:
跟LB上的配置几乎一样,只需要修改以下几点:
1.lvs_id改为lvs02
2.state改为BUCKUP
3.priority改为100,只要比MASTER小就可以。
测试
启动KeepAlived
在启动KeepAlived前要确保LoadBalancer服务器对应的LVS为MASTER和BACKUP,可通过以下指令来设置:
dpkg-reconfigure ipvsadm
还要确保ip转发已经启动,可通过以下指令:
echo "1" >/proc/sys/net/ipv4/ip_forward
通过以下指令启动LB和BLB下的keepalived服务:
/etc/init.d/keepalived start
通过以下指令可查看启动情况:
tail -f /var/log/messages
若启动成功会出现以下相似信息:
Feb 24 22:53:57 debian kernel: [ 876.649352] IPVS: sync thread started: state = MASTER, mcast_ifn = eth0, syncid = 51 Feb 24 22:53:58 debian Keepalived_vrrp: VRRP_Instance(VI_2) Transition to MASTER STATE Feb 24 22:53:58 debian Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE Feb 24 22:53:59 debian Keepalived_vrrp: VRRP_Instance(VI_2) Entering to MASTER STATE Feb 24 22:53:59 debian Keepalived_vrrp: VRRP_Group(VG1) Syncing instances to MASTER STATE Feb 24 22:53:59 debian Keepalived_vrrp: VRRP_Instance(VI_1) Entering to MASTER STATE
另外通过ip a命令可反应keepalived启动成功,分别在MASTER和BACKUP上运行ip a命令,会看到192.168.56.254和192.168.0.1出现在MASTER上,而不会出现在BACKUP上。
测试RealServer的健康状态检查
停掉ReslServer上的resin服务,或停掉网络,然后在MASTER上用ipvsadm命令查看,会发现对应IP的那条转发规则自动删掉,使用tail -f /var/log/messages查看,会得到如下信息:
Feb 24 01:53:11 debian Keepalived_healthcheckers: TCP connection to [192.168.0.3:8080] failed !!! Feb 24 01:53:11 debian Keepalived_healthcheckers: Removing service [192.168.0.3:8080] from VS [192.168.56.254:8080]
测试失败切换(FailOver)
在MASTER上使用/etc/init.d/keepalived stop命令把keepalived服务停掉,然后用ipvsadm命令查看,会发现所有规则被清空。
然后在BUCKUP上使用tail -f /var/log/messages查看,会得到如下信息:
Feb 24 22:53:57 debian kernel: [ 876.649352] IPVS: sync thread started: state = MASTER, mcast_ifn = eth0, syncid = 51 Feb 24 22:53:58 debian Keepalived_vrrp: VRRP_Instance(VI_2) Entering to MASTER STATE
然后在MASTER上使用/etc/init.d/keepalived start命令把keepalived启动,然后用ipvsadm命令查看,会发现转发规则又出来了,在BUCKUP用tail -f /var/log/messages查看,会看到又变回了BUCKUP STATE。
邮件提醒功能
当LoadBalancer服务器或RealServer服务器出现问题时,为了使我们能第一时间知道,我们可以让keepalived能过邮件通知我们哪个服务器出问题了。
只需要修改keepalived.conf文件即可,首先在global_defs里添加以下内容:
#这是定义需要发送提醒的邮箱 notification_email { wangyingjian@jobcn.com #若有多个可以继续添加 } #发件箱地址,可以随便定义 notification_email_from keepalived@jobcn.com #这里用到了jobcn的SMTP服务器,如果本机安装了sendmail服务,可以定义为127.0.0.1 smtp_server 192.168.60.131 smtp_connect_timeout 30
然后分别在实例VI_1和VI_2中添加如下内容:
smtp_alert
这样无论哪台服务器出现故障或恢复正常都会有邮件提示了。
注:由于两台LoadBalancer服务器的eth0用的是host-only模式,所以是不能访问192.168.60.131的邮件服务器,需要将它们更改为bridged模式,然后把IP改成相同网段的IP方可,同时keepalived.conf文件里的192.168.56.254(VIP)也要更改为相同网段的IP。
基于DR方式
硬件需求与网络拓扑结构
VS/DR 的工作流程下图所示:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。在VS/DR 中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后 的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现 报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
在VS/DR中,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
由于LB和RS都要在同一个物理网段上,所以基于上节的实验,IP按以下方式修改:
RS1: eth0 ip:192.168.56.4 RS2: eth0 ip:192.168.56.5 注:把它们的gateway都去掉。
这里需要注意的事:
LB、BLB、RS1、RS2的eth0在virtualbox上的模式都改为Bridged以便为外面的机器都能访问到。
配置KeepAlived
LB上的keepalived.conf文件配置如下:
# Configuration File for keepalived global_defs { #每个load balancer 都有一个不同的ID lvs_id lvs01 } #这个是外网网段的VRRP实例 vrrp_instance VI_1 { state MASTER interface eth0 #每个virtual_router_id都要唯一 virtual_router_id 51 #这个是MASTERT和BACKUP服务器竞争的优先级,习惯MASTERT大于BACKUP priority 150 #检测间隔,默认1s advert_int 1 #这是两个服务器的同步验证,有PASS和AH两种方式 authentication { auth_type PASS auth_pass 1111 } #这里指定VIP当MASTER和BACKUP切换时,这些IP会添加到相应服务器上 virtual_ipaddress { 192.168.56.254 #这个是我们上面说的VIP #如果有多个,可以继续添加 } } #下面添加LVS的转发规则 #注意:这里的virtual_server的端口跟real_server的端口必须相同 virtual_server 192.168.56.254 8080 { delay_loop 6 #调度规则,这里用rr指轮询方式 lb_algo rr #这里是负载均衡的方式,我们基于DR方式 lb_kind DR #这是对真实服务器健康检查的方式,这里用TCP方式 protocol TCP real_server 192.168.56.4 8080 { #真实服务器的优先级 weight 1 #用TCP方式检查 TCP_CHECK { connect_timeout 3 #连接超时时间 } } real_server 192.168.56.5 8080 { weight 1 TCP_CHECK { connect_timeout 3 } } }
BLB上的keepalived.conf文件配置:
跟LB上的配置几乎一样,只需要修改以下几点:
1.lvs_id改为lvs02
2.state改为BUCKUP
3.priority改为100,只要比MASTER小就可以。
配置RS服务器
在RS服务器上必须把VIP加到lo上,运行以下命令,或在/etc/network/interfaces文件里配置。
ifconfig lo:0 192.168.56.254 broadcast 192.168.56.254 netmask 255.255.255.255 up
测试
跟NAT模式的测试一样,不过与/proc/sys/net/ipv4/ip_forward里的值无关
发表评论
-
Windows下安装并设置Redis
2017-11-28 14:23 631版权声明:欢迎加入【开源技术交流群】: https:// ... -
由于安全狗导致网站访问出现302重定向问题
2015-08-06 18:14 1707网站开始的时候,碰到这种问题,开始没留意以为是浏览器导致的。后 ... -
windows下使用memcache并修改memcache最大使用内存
2015-02-27 22:42 778将memcache服务器安装包解压到C:\memcached ... -
nginx 日志文件切割
2014-12-13 08:23 835转载:http://www.cnblogs.com/beni ... -
nginx+tomcat7+memcached做集群以及session复制
2014-12-07 22:50 745首先:配置tomcat集群 nginx+ tomcat7 ... -
Memcached入门
2014-11-27 23:17 791Memcached是一个高性能的分布式内存对象缓存系统,用于 ... -
nginx + tomcat 配置,静态资源直接使用nginx
2014-11-26 22:34 977upstream tomcat_server { ... -
Nginx Location配置总结
2014-11-26 22:33 814语法规则: location [=|~|~*|^~] /ur ... -
Memche全站缓存
2014-11-13 17:23 916http://my249645546.iteye.com/bl ... -
煩惱的“java.lang.OutOfMemoryError:PermGen space"異常
2014-11-10 20:48 674最近在做一個jee的項目 ... -
nginx+tomcat实现负载均衡
2014-11-05 22:00 934作者:niumd Blog:http://ari.itey ... -
Tomcat 7优化前及优化后的性能对比
2014-11-05 09:52 1092Tomcat 7在我们日常开发、测试、生产环境都会使用到,但 ... -
resin 加花生壳搭建外网访问服务器
2012-10-08 20:44 1079花生壳发布WEB服务 -
resin 配置session过期
2012-03-23 10:29 1506Session的配置 <session ... -
nginx 解决session共享问题(jvm-route)方式
2012-02-28 13:45 2726前几天看到 http://code.google.com ... -
nginx.conf配置详细说明
2012-02-28 09:15 1316vim conf/nginx.conf#用户 用户组user ... -
nginx 解决session共享问题
2012-02-28 09:19 14481) 不使用session,换作cookie能把sessio ... -
java.lang.NoClassDefFoundError: com/caucho/make/PersistentDependency
2012-02-28 08:09 1773之前一直用resin-pro-3.0.22,这两天由于工作需要 ... -
玩玩负载均衡---在window与linux下配置nginx
2012-02-27 14:29 1420最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Cit ... -
squid 配置缓存服务器
2011-12-31 13:40 1611Squid for Windows 简介 是大家也许不知道, ...
相关推荐
本文档详细介绍了如何在Linux上利用LVS搭建基于NAT的负载均衡集群服务。以下是对该文档内容的详细解释: 1. **硬件需求和网络拓扑**: 在搭建LVS集群前,需要考虑合适的硬件资源,包括至少一台Director服务器...
lvs负载均衡集群是基于Linux操作系统的高可用性集群解决方案,通过将多个Real Server集成到一个虚拟的IP地址(Virtual IP,VIP)上,来实现对外提供服务的目的。下面将对lvs负载均衡集群的实验步骤进行详细的讲解。 ...
本讲座将介绍如何使用Piranha快速搭建LVS负载均衡集群。 首先,我们需要对CentOS虚拟机进行初始化设置。这包括确保sshd服务在开机时自动启动,以便远程管理。通过`/etc/init.d/sshd status`检查sshd服务状态,使用`...
总的来说,这篇文档为读者提供了关于LVS负载均衡集群系统的概念、架构和实施步骤的全面介绍,适合那些需要构建经济高效、可扩展的Linux集群系统的企业或个人参考。通过LVS,不仅可以提高服务的可用性,还能确保系统...
在《用LVS在Linux上搭建负载均衡集群服务》等文档中,会详细讲解如何配置和管理LVS,包括设置调度策略、健康检查以及故障切换机制。 2. **高可用性(High Availability, HA)**: 高可用性是指系统能够在长时间内...
### L4+L7 负载均衡 Keepalived+LVS+nginx搭建nginx高可用集群 #### 一、概述 随着互联网应用的不断发展,如何高效地处理大规模并发请求成为了现代Web架构设计的重要议题之一。在众多解决方案中,构建一个高可用、...
本文主要阐述如何在 Linux 系统下快速实现负载均衡,介绍了使用 LVS(Linux Virtual Server)搭建负载均衡集群的原理和实现方法。 一、负载均衡的定义和原理 负载均衡是指将外部请求分配到多台服务器上,以提高系统...
linux集群应用实战 通过LVS+Keepalived搭建高可用的负载均衡集群系统 第二讲
LVS(Linux Virtual Server)是基于Linux操作系统的一种高性能、高可用的负载均衡解决方案。它利用集群技术,通过IP负载均衡技术,实现了虚拟服务器的功能,从而提供了高可伸缩性、可靠性和可管理性的网络服务。LVS...
LVS(Linux Virtual Server)是一种基于Linux操作系统的高性能网络服务解决方案,主要用于构建大规模的服务器集群,实现负载均衡。与常见的应用层代理服务器如Nginx相比,LVS工作在更底层的网络层次——链路层...
这个文档"lvs+keepalived+nginx+tomcat实现高性能负载均衡集群.docx"将详细解释每个组件的配置细节、集群的架构图以及可能出现的问题及解决方案,帮助你更好地理解和实施这个高性能的负载均衡集群。
Linux服务器集群系统LVS(Linux Virtual Server)是基于IP层和基于内容请求分发的负载平衡调度解决方法,旨在提供高性能、高可用网络服务。LVS服务器集群系统可以实现可伸缩、高可用网络服务,通过检测节点或服务...
【搭建LVS集群实战负载均衡】的随堂笔记主要涵盖了LVS集群的理论知识和实际操作步骤,旨在帮助读者从零开始快速构建LVS负载均衡集群。以下是详细的知识点解析: 1. **LVS集群概述**: - 集群是一种由多台计算机...
《通过LVS+Keepalived搭建高可用的负载均衡集群系统》 在构建大型网络服务时,确保系统的高可用性和稳定性至关重要。LVS(Linux Virtual Server)配合Keepalived的解决方案,能有效实现这一目标。LVS是一种开源的...
基于LVS(Linux Virtual Server)和KEEPALIVED的负载均衡技术,可以实现高可用性和高性能的服务器集群。下面是搭建LVS+KEEPALIVED负载均衡的详细步骤和知识点: 一、 环境准备 1. 环境要求:LVS+KEEPALIVED需要在...
**LVS+Keepalived搭建高可用负载均衡集群** Keepalived是一个基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)的高可用性解决方案,与LVS结合使用可以实现主备切换。当主LVS节点发生故障时,...