VMware vSphere 5.1 群集深入解析(十三)

VMware vSphere

5.1

Clustering Deepdive


HA.DRS.Storage DRS.Stretched Clusters


Duncan Epping &Frank Denneman

Translate By Tim2009 / 翻译:Tim2009


目录

版权

关于作者

知识点

前言

第一部分 vSphere高可用性

第一章 介绍vSphere高可用性

第二章 高可用组件

第三章 基本概念

第四章 重新启动虚拟机

第五章 增加高可用灵活性(网络冗余)

第六章 访问控制

第七章 虚拟机和应用监控

第八章 集成

第九章 汇总

第二部分 vSphere DRS(分布式资源调度)

第一章 vSphere DRS介绍

第二章 vMotion和EVC

第三章 DRS动态配额

第四章 资源池与控制

第五章 DRS计算推荐

第六章 DRS推荐向导

第七章 DPM介绍

第八章 DPM计算推荐

第九章 DPM推荐向导

第三部分 vSphere存储DRS

第一章 vSphere存储DRS介绍

第二章 存储DRS算法

第三章 存储I/O控制

第四章 数据存储配置

第五章 数据存储架构与设计

第六章 对存储vMotion的影响

第七章 关联性

第八章 数据存储维护模式

第九章 总结汇总

第四部分 群集架构的扩展

第一章 群集架构的扩展

第二章 vSphere配置

第三章 故障排错

第四章 总结汇总

第五章 附录


第二部分 vSphere DRS(分布式资源调度)

第四章 资源池与控制

群集聚合ESXi主机的容量到一个大型的池中,并在资源提供者(ESXi主机)和资源消费者(虚拟机)提供一个抽象层,资源池创建一个额外的抽象层,提供共享资源池和隔离资源池的资源。

完全隔离和资源共享资源熟练的通过分配控制使用:预留,份额和限制,这些资源分配设置类似虚拟机的资源分配设置,已经在12章节解释过了,在资源池级别中如何设置工作?在虚拟机负载的情况下有什么影响?

根资源池

当启用DRS,根资源池是建立在集群级别,每当ESXi主机添加到DRS群集,主机的资源添加到根资源池,要求运行在ESXi虚拟化层的资源对群集不可用。

主机资源总数-虚拟化开销=群集可用资源

如果启用HA,满足HA故障切换所需的资源来自于根资源池,因为HA故障切换的虚拟机位于根资源池中,当查看资源池的容量时,运行所需要的虚拟化层的资源是不可见的,而预留的资源被标记为HA故障切换,以满足HA所需资源。

举个例子,如果群集由3台主机组成,群集上根资源池包含总计36GB的内存资源,每台主机提供12GB可用内存

图63:根资源池

资源池

作为一个群集从主机分配资源给虚拟机,主机扮演着资源的提供者,虚拟机扮演着资源的消费者,资源池扮演着这2个角色,因为他们消耗群集的资源,提供给虚拟机。

图64:资源提供者和消费者

有一个重要的事情要意识到,资源池既可以是资源的消费者也是提供者,从共享的角度来说因为这可能会影响你设计你的资源池。

膨胀或收缩资源池

资源池跨越整个群集,当添加主机到群集,它的资源立即被加入资源池使用,相反的,如果从群集中移除主机,该ESXi主机提供的资源将从群集中减去,该资源将不能被资源池和其子对象使用。

请注意,移除主机会将群集处于资源过量状态,过量的状态发生在当群集资源不能满足所有资源池的预留,在过量期间,分配给虚拟机的资源将减少。

本地主机资源池

使用资源池,你可以从群集中多层次的分区CPU和内存资源,池中的资源可以与其它的子对象进行共享,同时在不同的资源池之间提供隔离,资源池可以有两种类型的子对象:虚拟机或者资源池,究竟如何,这些资源是共享还是隔离?

虚拟机的负载由本地主机CPU和内存调度执行,资源池的需求设置将从群集的层面向ESXi主机的层面转换,在前面的章节中,DRS映射和镜像群集资源池树给每个主机,DRS通过本地主机资源池树分配资源,通过主机上活跃的虚拟机和它们的动态配额来分开可用资源,一旦资源池分配传播到本地主机资源池树,本地主机的CPU和内存调度程序将照顾实际资源分配。

提示

在vSphere 5.0中,vCenter专门管理资源池结构,在vSphere 4.0中,改变本地主机资源池

结构会覆盖vCenter上的管理资源池结构,vCenter的主机视图中和主机上的实际资源架构不匹配,也会造成无法预料的影响。

当已经交由DRS来管理资源时,为了防止用户直接连接主机修改资源设置,不会对资源修改的操作才能允许执行,在这种情况下,所有的资源设置为只读,vCenter显示以下信息。

图65:主机管理

划分资源

相对于本地主机资源调度, DRS计算所有虚拟机在每次调用期间(默认PollPeriodSec=300)的动态配额目标,与本地调度器的主机CPU毫秒级调度和内存的分钟级调度相比,DRS划分资源的粒度会更粗一些。概念上每个主机接收的资源目标是基于虚拟机的动态配额资源之上的。

例如,在DRS调用期间,本地主机内存调度负责分配可用内存,本地主机内存调度使用自上而下的传递资源池树来计算每个资源池节点的需求,如果资源需求少于或者等于提供的资源,每个虚拟机的配额将等于需求,如果需要大于内存供应,动态分配将进行调整,在配额计算之后,内存调用自上而下为每个资源池和它们虚拟机的内存传递计算的新目标,本地主机内存此时允许资源池将内存分配给它们的目标。

资源池不是一个文件夹

了解了资源是怎样被划分到资源池树,怎样使资源池不被当做一个文件夹架构使用。通常,我们遇到的环境中资源池作为vCenter视图“群集与主机”下一个文件夹,因为它帮助管理识别虚拟机之间的关系,为此目的使用资源池会在vCenter和ESXi主机上产生不必要的负载从而影响到虚拟机的性能。

基本设计原则

不要使用资源池作为主机和群集视图中的文件夹架构,但可以使用相应的文件夹视图。

资源池的树结构

在群集中没有正式的限制资源池的数量,但是,每个主机资源池,它可以支持的数量有限制,该限制是一个复杂的公式,根据主机可以支持的虚拟机,可以依据虚拟机或者整理最高限额数配置,DRS不会在单个主机上实例化所有资源池,但我们建议每个群集不超过2048个资源池。

对于主机,用户创建的池的最大资源池树深度为8,每个ESXi主机内部是4级,这些内部的资源池独立于DRS资源池中,为了避免复杂的比例份额计算和复杂的DRS动态配额计算,我们建议资源池的深度不要超过2,扁平状的资源池树非常容易管理,并能够降低在动态配额计算期间的开销。

基本设计原则

尝试保持资源池树的最小深度。

资源池资源分配设置

资源分配设置适用于资源池,尽管与虚拟机的情况类型,但它们的行为有些不同。

表13:资源池资源分配设置

份额(share

份额确定了资源池或者虚拟机与同类型相对比的优先级,同类型的资源池或者虚拟机可以存在同一级别的资源池或虚拟机中,即共享一个父域。

通过对比父域总份额和分配份额来决定优先级,例如,在创建一个4000 CPU份额的资源池,如果它是唯一的对象(子集),其父域(群集)将只有4000 CPU份额,由于资源池拥有所有的份额,其有资格使用群集的所有CPU资源。

在图66中,资源池2被添加到群集中,并配置了8000 份额,群集发行不止8000份额,将增加份额到12 000,资源池1的份额从100%稀释到33%,在最坏的情况下,资源池1有权使用33%的群集资源,最坏的情况所有的虚拟机要求100%的资源,达到其配置大小的临界值。

份额是动态配额计算的一部分,在计算动态配额时,预留和限制优先权高过份额,但是并不意味着份额不重要。

提示

份额不是一个简单的资源加权系统,在下面的章节中,我们解释了在最坏的场景中份额的工作情况,每个虚拟机配置需要100%的资源,系统过载,争用发生。在现实的场景中,这种情况(希望)不会经常发生,正常的操作过程中,不是每个虚拟机都处于活动状态,

也不是每一个活跃的虚拟机使用率是100%,活动和资源争用是决定活动虚拟机动态配额的两个因素,为了便于表述,我们试图尽可能避免变量因素,尽可能在每个实施案例中避免最坏的场景发生。

图66:资源池1和资源池2份额比例

资源池份额

资源池份额与其它资源池或者同一父域下资源里的虚拟机相关,重要的是了解vCenter怎样规划内部资源池。

CPU和内存的值能应用于资源池也同样应用于虚拟机,默认情况下,资源池的大小就像一个配置了4CPU和16GB RAM的虚拟机,根据所选的共享水平,预定义的份额将被发布,类似于虚拟机,三个份额级别可以供选择:高,中或者低,指定的份额值比例为4:2:1,客户也可以自定义设置,用来指定不同的相对关系。

表14:份额级别预览

当资源池中的虚拟机处于同一级别(层),那么必须谨慎,虚拟机可以比预期早结束更高的优先级

例如,在vSphere 5中,最大的虚拟机可以配置32个vCPU和1TB内存,如果虚拟机配置的份额处在较高的水平,它可以拥有多达64 000个CPU份额及2 080 000个内存份额,图67描述了一个资源池和一个虚拟机在正常的份额级别的分成比例。

图67:资源池和32vCPU,1TB虚拟机的份额分成比例

基本设计原则

这也是不建议在同一级别(层)的资源池部署虚拟机的原因。

同级竞争

作为份额根据关系级别来确定资源池和虚拟机的优先级,重要的是决定哪些对象优先完成。

图68:同级级别

在图68所描绘的场景中,多个同级别存在,资源池1和资源池2是群集的子集,因此在相同的级别水平,资源池3和VM1是资源池1的子集,它们也活跃相同的级别水平,资源池2的VM在活跃在各自同级水平,VM2和VM3的同级,他们会竞争资源池3提供的资源,它们会比较彼此的份额,VM1和VM3的份额不能做比较,因为他们来自不同的父域,没有同级竞争。

份额在特定的级别(层)中代表这优先级,但是其父域的级别关系决定了资源可用的总量

在图69所示的例子中,群集资源被分成资源池1和资源池2,资源池1基于份额接收群集资源的33%,资源池1分为资源池3和VM1,两个子集根据对等份额各拥有资源池1的50%的资源,这来自于资源池1的50%的资源占群集总资源的16.5%,16.5%的资源是资源池的,算上虚拟机资源合计占群集总资源的33%,资源池3的资源分为VM2和VM3,资源池3的子集拥有不对等的资源份额,在最坏的情况下,VM2用完来自于资源池3的67%的资源,也就反过来等于群集资源的11%。

图69:群集资源分配

虚拟机和资源池同级(层)

虚拟机和资源池同级会影响子集层资源池的分配,本节说明了为什么虚拟机放置到资源池同级的位置被认为一个错误的配置,如图70所示,VM1和资源池3资源争用,基于它们的份额值,都可以收到父域50%的资源,资源池3获得的资源分配到子资源池,相反,VM1为了自身利益会利用资源分配。

在前面的例子中,两个活动的虚拟机在资源池3中,其资源分配给这2个虚拟机,当添加更多的虚拟机到资源池中,每个虚拟机的份额值被摊薄,而VM1的份额值保持不变。

图70:份额摊薄

混合在同一层次的虚拟机和资源池,可能会在分层级中产生比例不平衡的情况,从而影响后续层的资源分配。

份额级别不是资源级别

份额级别在父级别的设置并不会继承到子对象,当一个虚拟机被关联到一个资源池,它会保留其份额水平,如果自定义的份额级别的虚拟机被移动到资源池中,如果虚拟机配置的份额过低或者过高,会提示产生错误。

虚拟机的CPU资源份额远低于资源池中虚拟机的CPU的资源份额。凭借目前的份额设置,资源池可以分配虚拟机0%的CPU,您确定这是您想要做的吗?

当创建一个虚拟机或资源池时,vCenter默认分配正常(Normal)份额,与其父域的份额级别无关,在图71中,VM1有4000份额,导致高(High)份额,而资源池3配置了正常(Normal)份额,尽管他们的份额水平不同,资源池3和VM1都拥有4000份额,都在基于份额总量竞争,而不是基于份额级别,份额的数量和份额的级别有关联但不同,当份额级别简单方便的生成值时,份额的数量就很重要。

图71:份额级别

总结:所有的份额一样,没有谁比别人更重要:4000份额=4000份额

资源池优先论

当资源池用于群集资源的分层,群集动态配额向子层资源池资源,在每一个层面上,同级资源竞争,在每一个子级别稀释剩余可用资源。但是,每个同级由该级别中竞争者的数量来确定可用资源总量,这意味着一些资源池内的配置了低份额的虚拟机能够抢占资源池内配置高份额的虚拟机的资源,虚拟机在图72中都配置相同,他们的规格是按照群集的动态配额比例调整。

图72:基于资源池份额值的虚拟机动态配额

从资源池设置到主机-本地资源分配

资源池的份额怎样影响虚拟机的负载,正如之前提到的,DRS反映了每个主机的资源池层次结构和基于活动虚拟机通过主机-本地资源池树来划分配额资源以及他们的份额数量和他们当前的利用率,一旦资源分配设置被传播到主机-本地的资源池树,本地主机的CPU和内存调度程序将照顾实际资源的配置。

例如,一个包含两个主机的群集有一个资源池,配置了正常(Normal)CPU份额级别,在这里,资源池1拥有4000份CPU,四个虚拟机运行在该资源池里配置如下:

图73:单个资源池配置

假设所有的虚拟机工作负载都相等也稳定,DRS将平衡跨主机和虚拟机创建以下资源池的映射:

表15:资源池1虚拟机的份额配置

图74:主机-本地资源池映射

VM1,VM2,VM3加起来的份额为4000,这等于资源池总量的一半。

在这个例子中,主机-本地资源池树分配资源池1中4000份资源中的2000份,DRS放置VM1,VM2和VM3在ESXi-01上就是这个原因,而VM4运行在ESXi-02上,接收另一半资源池的份额。

在这一点上,我们创建资源池2,资源池2配置了高(High)份额级别,接收8000CPU份额,虚拟机是资源池2的成员,配置同资源池1的虚拟机相同。

表16:资源池2虚拟机份额配置

图75:份额比例结果

资源池2所在的ESXi 01的主机本地资源池树被更新,资源池2配置的份额为资源池1的2倍,增加到4000份额,,由于资源池2拥有6000份额里的4000,得到了66.6%的ESXi主机资源。

由于资源池的比例为67%比33%,当发生资源争用,本地资源将调度分配更多的资源给资源池2,资源分配给资源池2被分布到基于层级的虚拟机中,这意味着,虚拟机VM5在资源争用的情况下可以分配到资源池2的50%资源,这意味着33%的ESXi主机资源。

群集或者资源池的资源分配选项卡包含份额百分比一栏,此列显示的百分比是分配给对象的资源,此值关系到父域发布的整个份额数量,因此只适用于特定的层次。

要强调的是,这个例子使用的虚拟机有同样的负载和稳定性,在正常条件下,一些虚拟机比其它虚拟机有更改的利用率,作为活动的资源利用率它是动态配额计算的一部分,当划分资源池的份额时活动的负载、资源跨主机和本地资源池树是需要被考虑的。

此外,虚拟机的利用率经常改变,在DRS调用之后通常会影响到资源分配。

池级别资源预留

设置预留保证资源池中的永久可用物理资源,因为预留在份额之前被接受,在争用期间资源被预留保护不被回收,设置资源池级别的预留确保了子对象的资源可用性。

预留资源与资源池的关联性适用于资源池中所有的虚拟机,资源池级别预留不会含蓄的定义子层的预留,但是可以“借”一部分保护资源,因为资源池的预留资源不会变成一个静态的子层的设置,通过预留资源保护可以实时的为子层浮动。

资源池预留基于每个子对象的动态配额之间进行预留划分,在第12章中,动态配额基于配置规格,资源本地设置,需求和争用水平。

因为它是基于动态的配额,活动性和争用级别在获得保护资源中起了很大的作用,通过使用虚拟机的动态配额,资源池预留有一个动态本质和更多有巩固的公平的概念,预留资源按照要求在虚拟机之间被划分,未使用的资源将会回到资源池,准备被其它的虚拟机使用。

让我们来仔细看看这个行为,A的预留内存在资源池1中设置为12GB,资源池包含4个虚拟机,每一个配置了4GB内存,没有虚拟机配置预留,VM2和VM3被配置成低(LOW)级别的份额,VM1正常(Normal)份额,VM4高(High)配额,图76显示了在早上8:00,资源池分配保护内存给每个虚拟机的情况,VM1和VM3都比较忙,VM2和VM4都运行着比较轻的负载。

图76:早上8:00的资源池资源分配

尽管VM3配置了低份额,可用资源和缺乏争用,导致允许VM3接收4GB的保护内存,换句话说,所有的内存页都被存入物理内存中。

图77显示了11点的环境,在这个特定时间,VM1,VM3和VM4高度利用,资源池的预留资源基于份额被分配和利用到每个虚拟机,这意味着VM4的份额最高资源池将分配最多的内存给VM4,VM1根据资源池需求得到3GB,其余的保留内存分配给VM2和VM3,当VM3高度利用,动态配额比VM2高,因此可以分配到3GB预留资源。

图77: 11点的资源池资源分配

在19:00(图 78),所有的系统处于空闲状态,除了VM2,它运行着备份系统,当资源池满足了其它虚拟机的资源配额,还有足够的资源可用,所有的内存被分配给VM2满足其需求。

图78: 19:00资源池资源分配

预留资源池的动态特性可能不适合某些虚拟机:虚拟机级别的预留更适合于物理资源有保障的情况下。

资源池子对象级别预留

如果资源池的子对象配置了预留,预留没有被DRS动过,DRS依赖于主机级别的调度和主机级别的资源池来完成DRS级别资源池,来强制执行资源池和虚拟机级别的资源设置,DRS通过虚拟机级别的预留直接访问主机,这样使用主机级别的CPU和内存调度加强预留。

任何虚拟机级别的预留是从资源池级别的预留数中撤回,并减少预留资源给同级,通过虚拟机预留物理资源分配,仅适用于虚拟机和同级之间不共享资源或者虚拟机和资源池在一个父域池。

图79:虚拟机预留

基本设计原则

设置每个虚拟机的预留仅仅虚拟机有资源保证的情况下。

预留激活

虚拟机预留只有在虚拟机电源开启的时候生效,资源池级别预留从这一刻起配置,无论子域虚拟机是否获得,因为这是瞬间激活,预留立即减少池中未被预定的资源,如果预留不能兑现,DRS和VMkernel都不能开启虚拟机,另外虚拟机级别的预留,VMkernel需要未预定的内存来提供给主机上的虚拟机的开销,配置资源池级别的预留能影响群集中虚拟机的整合率。

基本设计原则

我们建议正确的资源池级别规格尺寸来避免池中未预定的资源不必要的减少,而是根据当前虚拟机的需求调整资源池级别预留。

内存预留开销

对于每一个正在运行的虚拟机,ESXi为虚拟开销预留物理内存,ESXi需要这些额外的空间来为内部的VMkernel数据架构虚拟机框架缓存,并未内存转换表提供映射(映射物理内存到虚拟内存),2种虚拟机开销存在:

静态开销

静态开销是最小的开销,是指的虚拟机启动阶段的开销需求,DRS和主机-本地内存调度使用这个值来为接入控制和vMotion计算服务,目标ESXi主机必须能够容纳虚拟机的预订和静态开销,否则vMotion将会失败。

动态开销

一旦虚拟机被启动,虚拟机监控(VMM)要求额外的内存的空间,VMM将提出需求,但是VMkernel不提供给它,如果VMM不能获得额外的内存空间,虚拟机将继续提供功能,但会导致性能下降,VMkernel对待预留的开销和虚拟机内存预留一样,一旦它在被使用就不会被收回。

当开启资源池中的虚拟机,池中的预留资源必须可用,如果没有池级别的预留资源,资源池需要从父域那分配未预定的资源,为了允许资源池检索未预定的资源,需要开启资源池的扩展预留设置。

内存开销预留影响

开启一台虚拟机需要的未预定资源数量包括虚拟机级别的预留加上内存开销预留,接入控制将阻止虚拟机的电源开启如果需要的未预定资源数量不可用。

基本设计原则

当设计群集和资源池结构时,需要考虑内存的开销预留。

vSphere资源池管理指南列出了虚拟机的内存开销,下表列出的表摘录于资源管理指南,是最常见的一些开销。

表17:虚拟机内存开销

从4.1版本到5.X版本对减少内存开销的改善是巨大的,例如8vCPU的虚拟机,4096MB的虚拟内存,其中平均内存开销接近561.52MB,在vSphere 5的开销降低到76.78MB。

了解了每个新版本ESXi的内存开销可能有所不同的事实,当升级新版本的时候可以记住这些,验证虚拟机内存开销的文档和检测制度内存预留的资源池。

内存开销预留显示为资源池预留中

当虚拟机通电,内存负载预留被添加到资源池预留的总数量中,如果资源池被配置没有预留,总内存开销预留总量显示为资源池的摘要中。

规格大小

尽管VMkernel需要少量内存来满足虚拟机的内存开销预留,当允许许多虚拟机就需要大量的内存,虚拟机正确的规格可以节省大量的预留和非共享内存

扩展预留

扩展预留选项允许资源池从父域资源池获取未预定的资源,以满足虚拟机级别和内存的开销预留。

当扩展预留设置被启用,接入控制考虑父域资源池树的可用容量来满足虚拟机级别的预留,如果扩展内存设置不被启用,接入控制只考虑资源池的可用资源来满足预留。

图80:扩展预留工作流

为了验证是否满足预留,资源池中每添加一个活动虚拟机的虚拟机级别的预留和静态开销预留,计算的结果不能超过资源池级别的预留,除非扩展预留被检查。

穿过父域树

接入控制仅考虑父域中的未预定资源,而不考虑同级的,在资源池配置了限制或者扩展预留没开启未预定资源的搜索停止,如果请求的分配的资源比父域资源池限制的资源多,请求就会被拒绝,虚拟机将无法启动。

图81:穿过父域树

基本设计原则

为了有可用的预留内存来满足内存开销预留,如果资源池级别没有设置预留,那么请启用扩展预留。

预留是没有限制的

在资源池级别的预留定义了保护的物理资源数量,它不定义物理资源的最大数量,子对象分配的资源可以超过指定的预留,但是,分配额外的资源是基于份额值,这将无法保证所需的可用资源。

图82:预留和份额

预留和份额

在图82中,资源池1配置了12GB的内存预留,但是虚拟机的总配置内存数量超过了预留(配置内存+内存开销预留=+/- 17GB),资源池1的最大分配数量的内存是所有虚拟机的配置内存加上其他的内存开销预留。

资源池1配置了12GB的内存预留,依靠份额获得了5GB来满足虚拟机的资源需求,资源池有同等的份额数量,提供资产同等的机会获取资源,由于虚拟机不同的活动性,资源池1接收到5GB,同时资源池2接收到1GB,尽管在这个场景中并没有基于份额的同等分配,但资源池都获得它们需要的资源,16GB的80%的需求等于12.8GB。

限制

限制定义了可用物理资源分配的最大数量,限制是一个很好的方式指定物理资源利用率的边界,限制阻止了资源池分配物理资源超过配置数量,尽管他们可用,设置资源池或者虚拟机的限制不仅仅影响虚拟机的性能,还能够对环境中的剩余部分产生负面影响。

资源池相关的限制适用于资源池里所有的子对象,资源池级别的限制不会暗中定义子对象层的限制,而是调整任何子对象能够利用的最大资源量,因为资源池限制不会变成子对象的静态设置,限制会使每个子对象的可用资源实时波动,意味着虚拟机的动态配额的波动取决于资源池内部的资源级别争用。

资源池的限制在子集间划分,它是基于每个子对象的动态配额,在第12章提到,动态配额是基于配置大小,资源分配设置,需求和争用级别,因为分配是基于动态配额,实际活动水平和争用级别在可用资源中扮演着非常重要的部分。

限制,预留和内存开销预留

限制必须等于或者超过配置的预留,如果虚拟机配置了预留,预留直接从资源池中未预定的内存池中减去,为了开启虚拟机,vCenter必须预定虚拟机的内存预留数量和内存开销。

基本设计原则

当计算资源池的限制时,预留和内存开销预留都需要考虑在内。

扩展预留和限制

正如上一节中,使用可扩展预留来为虚拟机分配未保留的内存,虚拟机内存开销预留维护了资源池里的虚拟机,如果资源池不能提供足够的未预定资源,它将会透过原始的资源树来分配未预定资源。

然而,当资源池级别设置了限制,资源池不能够分配物理资源超过限制资源,尽管扩展预留设置允许资源池分配额外的未预定资源,限制参数将禁止从资源池中分配比限制资源更多的物理资源。

你可能感兴趣的:(VMware vSphere 5.1 群集深入解析(十三))