第十一章 Hyper-V 副本

nick814 Hyper-v 2,961 次浏览 没有评论

 

Hyper-V 副本同样是一种高可用技术,和故障转移群集不同的是,Hyper-V 副本提供的是较低级别的高可用,其故障恢复时间要比故障转移群集稍长,但其拥有故障转移群集所没有的特性:Hyper-V 副本不是将保障业务持续运行放在第一的,而是保障数据在其他物理位置拥有单独的备份。也就是我们常说的”异地灾备”。相对故障转移群集而言,由于无需共享存储,因此实施 Hyper-V 副本的成本更低。对安全性要求严格的组织,可以将故障转移群集和 Hyper-V 副本组合起来一同使用,能够获得更好的安全性,以及尽可能的提升业务的连续性。

Hyper-V 副本是在 Hyper-V 2012/2012 R2 中出现的新功能,在 Hyper-V 2012 R2 中,Hyper-V 副本拥有一个较大的改进,即允许同时拥有多个 Hyper-V 副本。在上一代的 Hyper-V 2012 中,其只支持一条 Hyper-V 副本。例如,当北京机房作为主节点时,则只能存在上海机房一个备份节点。而在 Hyper-V 2012 R2 中,当北京机房作为主节点时,不仅上海机房可以作为备份节点,和其两层楼之隔的机房也可以作为其备份节点。多节点的 Hyper-V 副本可以让组织在性能和安全性之间做出多种衡量和选择。

11.1Hyper-V 副本概述

11.1.1Hyper-V 副本原理

Hyper-V 副本的原理非常简单,一个完整的 Hyper-V 副本至少需要两个支持 Hyper-V 角色的运行 Hyper-V 2012/2012 R2 的物理节点,其中一个为主服务器,作为数据的传送方存在,一般情况下,主服务器正常运行;一个为副本服务器,作为数据的接收方存在,一般情况下副本服务器上的虚拟机处于关机状态,仅占用副本服务器的硬盘空间,不占用 CPU 和内存资源。其架构如图 11-1 所示,典型应用即为异地灾备。

图 11-1Hyper-V 副本

11.1.2Hyper-V 副本工作方式

Hyper-V 副本支持四种复制场景:

  • 主服务器为群集,副本服务器为独立主机。
  • 主服务器为群集,副本服务器为群集。
  • 主服务器为独立主机,副本服务器为群集。
  • 主服务器为独立主机,副本服务器为独立主机。

需要注意的是,如果副本服务器为群集成员,则必须将副本保存在群集共享卷上,不支持将副本保存在群集成员的本地硬盘上。

11.2 部署 Hyper-V 副本

11.2.1 创建 Hyper-V 副本初始复制

在使用和运维 Hyper-V 副本之前,需要先创建 Hyper-V 副本初始复制。规定 Hyper-V 副本的保存位置、复制周期、复制频率等信息。

第 1 步,在 hv1.contoso.com 上,使用”新建虚拟机向导”,创建一个虚拟机,命名为

“Hyper-V 副本主服务器”,如图 11-2 所示,此处可以直接点击完成,使用快速创建。

图 11-2 创建虚拟机

第 2 步,修改需要被作为副本服务器的 Hyper-V 主机 hv4.contoso.com 的”Hyper-V 设置”,在对话框左侧选择”复制配置”,如图 11-3 所示。

图 11-3 启用复制配置第 3 步,开启该虚拟机,在该虚拟机上右键点击,选择”启用复制”,如图 11-4 所示。

图 11-4 启用 Hyper-V 副本

第 4 步,在弹出的”启用复制向导”中,于”开始之前”对话框,点击”下一步”继续,如图 11-5 所示。

图 11-5 启用复制向导之一

第 5 步,在”指定副本服务器”对话框,输入副本服务器的地址。此处可以直接输入 hv4 或 hv4.contoso.com,也可以点击”浏览”按钮,根据条件选择服务器,如图 11-6 所示,点击”下一步”继续。

图 11-6 指定副本服务器

第 6 步,在”指定连接参数”对话框,点选身份验证下的”使用 kerberos 身份验证”,如图 11-7 所示,其默认使用 80 端口进行数据通信,因此在服务器的防火墙上,需要对该端口的流量进行放行,如 Hyper-V 复制涉及到不同物理地域之间的互联,则还需要在所途径的交换机、防火墙、路由器上放行该端口流量。点选完毕后,点击”下一步”继续。

图 11-7 指定连接参数

第 7 步,在”选择复制 VHD”对话框,勾选需要复制的虚拟硬盘,如该虚拟机存在多块虚拟硬盘,则此列表中将会出现多个选项,在实际生产当中,可以只对保存数据的磁盘进行复制,而不复制操作系统所在的磁盘,从而节省磁盘空间。如图 11-8 所示,点击”下一步” 继续。

图 11-8 选择复制 VHD

第 8 步,在”配置复制频率”对话框,可以选择三种复制频率,分别是 30 秒、5 分钟、 15 分钟,默认选项是”5 分钟”。配置复制频率功能是 Hyper-V 2012 R2 中新增的功能,是对

Hyper-V 2012 的一项小改进,如图 11-9 所示,点击”下一步”继续。

图 11-9 配置复制频率

第 9 步,在”配置其他恢复点”对话框,默认选择”仅保留最新恢复点”。可以修改为

“创建其他每小时恢复点”,此处可以设定恢复点所覆盖的范围和多长时间创建一个恢复点。以本例中的覆盖范围 24 小时,即可最多可以回朔到 24 小时以前的内容,此处所指的”恢复点”即为”快照”或”检查点”。如图 11-10 所示,点击”下一步”继续。需要注意的是,使用

“卷影复制服务(VSS)快照频率”功能,需要为虚拟机正确安装来宾集成组件。

图 11-10 配置其他恢复点

第 10 步,在”选择初始复制方法”对话框,默认选择”通过网络发送初始副本”和”立即启动复制”。用户可以根据实际的环境,选择是否采用移动介质来创建副本,也可以定制计划任务,确定复制的起始时间。如图 11-11 所示,点击”下一步”继续。

图 11-11 选择初始复制方法

第 11,在”摘要”对话框,可以检查之前的配置方法是否正确,如配置有误,可以点击

“上一步”返回修改。确认配置无误偶,点击”完成”,如图 11-12 所示。

图 11-12 摘要界面

第 12,在初始复制完成后,使用”Hyper-V 管理器”访问 hv4.contoso.com,可以看到已经多了一台处于关闭状态的虚拟机,其名称和 Hyper-V 副本主服务器名称一致,在”复制” 选项卡下,也可以看到这台虚拟机的主服务器为 hv1.contoso.com,副本服务器为 hv4.contoso.com,如图 11-13 所示。

图 11-13 完成初始复制

需要注意的是,成组的 Hyper-V 副本中,主服务器和副本服务器永远只会有最多一台机器处于开机状态,如果在在 Hyper-V 副本中已经有一台开启的虚拟机,而此时尝试去开启另外一台虚拟机时,则会出现如图 11-14 所示报错信息。

图 11-14Hyper-V 副本中只允许有一台虚拟机处于开机状态

Hyper-V 副本所组成的主服务器与副本服务器的关系是虚拟机之间的关系,而不是宿主机之间的关系。同一台 Hyper-V 主机上可以存在多组 Hyper-V 副本关系,在不同的 Hyper-V 副本关系中,Hyper-V 主机可以是主服务器,也可以是副本服务器,这一切只取决于 Hyper-

V 主机是否正确开启和配置 Hyper-V 副本功能。

11.2.2 Hyper-V 副本的计划内故障转移

Hyper-V 副本的计划内故障转移属于当主服务器正常运行时,由管理员主动发起的故障转移,其特点是主服务器和副本服务器均处于正常运行状态,实施计划内的故障转移,可以将现有运行的虚拟机由主服务器迁移到副本服务器。这种行为有些类似于无共享环境下的快速迁移,在业务连贯性上会带来一定的时间中断,但持续时间又不是特别长。

与实时迁移不同的是,由于在副本服务器上已经存在一份虚拟机的近期磁盘文件,迁移时无需拷贝一份完整的镜像到副本服务器上,因此 Hyper-V 副本的计划内故障转移整体所消耗的时间要比无共享环境下的快速迁移短,但是由于其故障转移阶段是在虚拟机关机状态下进行的,因此业务中断时间方面,一般会比无共享环境下的快速迁移长。

Hyper-V 副本的计划内故障转移可以利用在机房搬迁、服务器硬件更换,或其他需要停机较长时间的环节当中。

第 1 步,在已开启了 Hyper-V 副本的虚拟机的”主服务器”方(hv1.contoso.com)右键点击,依次点击”复制”→”计划的故障转移”,如图 11-15 所示。

图 11-15 在主服务器端开启计划的故障转移

第 2 步,在弹出的”计划的故障转移”对话框中,点击”故障转移”按钮,如图 11-

16 所示。

图 11-16 准备进入故障转移

需要注意的是,在使用计划的故障转移时,位于主服务器上的虚拟机必须关机,如果虚拟机未关机,则会出现如图 11-17 所示的错误。

图 11-17 进入计划的故障转移必须关闭主服务器的虚拟机。

第 3 步,计划的故障转移开始实施,其消耗的时间会根据需要复制的数据大小不同而有所区别,如图 11-18 所示。

图 11-18 开始计划的故障转移

第 4 步,在计划内的故障转移结束后,该窗口会自动关闭,在”Hyper-V 管理器”中切换到 hv4.contoso.com 上,可以看到作为副本服务器的虚拟机已经启动起来了,如图 11-

19 所示。

图 11-19 计划的故障转移结束

11.2.3 Hyper-V 副本的故障转移

Hyper-V 副本的故障转移是当灾难发生时,已经无法正常连接主服务器时,由副本服务器主动发起的故障转移。和计划内的故障转移一样,发起故障转移同样要求主服务器上的虚拟机处于关机状态。

第 1 步,在副本服务器 hv4.contoso.com 上右键点击该虚拟机,在弹出菜单中依次选择”复制”→”故障转移”, 如图 11-20 所示。

图 11-20 开始故障转移

第 2 步,在弹出的”故障转移”对话框中,可以选择已经存在于副本服务器上的多个恢复点,确定需要使用哪个时间段的快照,如图 11-21 所示。

图 11-21 选择故障转移的可用恢复点

第 3 步,故障转移完成后,可以看到作为副本服务器 hv4.contoso.com 上的虚拟机已经启动起来了,如图 11-22 所示。

图 11-22 完成故障转移

Hyper-V 副本的故障转移可以在灾难发生时挽回大多数的数据损失(在最近的恢复点和主服务器损坏的时间段所产生的数据会丢失)。相对故障转移群集而言,Hyper-V 副本提供的是一种异地灾备的解决方案,故障转移群集能够保证业务的连续运行,但由于物理位置的集中放置,对于各种灾难情况,故障转移群集并不能很好的解决。因此 Hyper-V 副本和故障转移群集是相辅相成的两种技术,两者组合使用可以提供更好的数据安全保护能力。

11.2.4 Hyper-V 副本的反向复制

Hyper-V 副本的反向复制实施需要满足三个基本条件:

  • 已经创建 Hyper-V 副本关系。
  • 已经通过计划的故障转移或故障转移,在副本服务器上开启虚拟机。
  • 在副本服务器上才拥有该选项。

Hyper-V 副本的反向复制可以调整 Hyper-V 虚拟机的主服务器和副本服务器的关系,能够将两者对调。

第 1 步,在完成计划的故障转移或故障转以后,于副本服务器 hv4.contoso.com 上右键点击该虚拟机,依次选择”复制”→”反向复制”,如图 11-23 所示。

图 11-23 开启反向复制

第 2 步,在弹出的”反向复制向导”中,于”开始之前”对话框,如图 11-24 所示,点击”下一步”继续。

图 11-24 进入反向复制向导

第 3 步,在”指定副本服务器”对话框,输入原主服务器的地址 hv1.contoso.com,或使用”浏览”按钮,选中服务器地址。如图 11-25 所示,点击”下一步”继续。

图 11-25 指定副本服务器

第 4 步,在”指定连接参数”对话框,点选身份验证类型下的”使用 kerberos 身份认证”。如图 11-26 所示,点击”下一步”继续。

图 11-26 指定连接参数

第 5 步,在”配置复制频率”对话框,使用默认的频率 5 分钟,如图 11-27 所示,点击”下一步”继续。

图 11-27 指定连接参数

第 6 步,在”配置其他恢复点”对话框,选择创建其他每小时恢复点,覆盖范围和复制频率分别为 24 和 4,如图 11-28 所示,点击”下一步”继续。

图 11-28 配置其他恢复点

第 7 步,在”摘要”对话框,检查配置信息是否有误,如图 11-29 所示,点击”完成”结束反向复制向导。

图 11-29 摘要界面

第 8 步,在反向复制结束后,检查位于原副本服务器 hv4.contoso.com 上的虚拟机,发现其主服务器已经变为 hv4.contoso.com,而副本服务器变为 hv1.contoso.com,如图 11-30 所示。

此时处于开机状态的依然是 hv4.contoso.com 上的虚拟机,反向复制只复制主副关系,不对虚拟机状态进行改变。

 

图 11-30 反向复制结束

11.2.5Hyper-V 副本同时进行故障转移与反向复制

在主服务器和副本服务器同时健康运行并可访问的时候,可以一次操作,同时运行故障转移和反向复制。该功能主要使用在设备更新,原有的旧服务器由生产服务器变为备份服务器,通过同时进行故障转移和反向复制,可以将数据复制到新服务器的同时,即时改变两者的复制关系。

第 1 步,在已开启了 Hyper-V 副本的虚拟机的”主服务器”方(hv1.contoso.com)右键点击,依次点击”复制”→”计划的故障转移”,如图 11-31 所示。

图 11-31 启动计划的故障转移

第 2 步,在”计划的故障转移对话框”,同时勾选”故障转以后将复制方向更改为相反的方向”和”在故障转以后启动副本虚拟机”,如图 11-32 所示,点击”故障转移”,等待计划的故障转移结束。

 

图 11-32 勾选特定选项

第 3 步,在”计划的故障转移”结束后,检查位于 hv4.contoso.com 上的虚拟机,发现其主服务器已经变为 hv4.contoso.com,而副本服务器变为 hv1.contoso.com,如图 11-33 所示。

图 11-33 故障转移结束,主服务器和副本服务器关系

11.2.6 为故障转移群集开启 Hyper-V 副本功能

位于故障转移群集下的 Hyper-V 主机是无法直接使用 Hyper-V 副本的。打开”Hyper-V 管理器”,配置 Hyper-V 设置:可以看到由于 Hyper-V 副本的设置呈灰色,无法直接配置,如图 11-34 所示。

图 11-34 故障转移群集下的 Hyper-V 主机无法直接使用 Hyper-V 副本

如果希望为故障转移群集下的 Hyper-V 主机主机开启 Hyper-V 副本功能,则需要创建单独的 Hyper-V 副本角色。

第 1 步,打开”故障转移群集管理器”,连接之前章节创建的故障转移群集HyperVHA.contoso.com,在”角色”上右键点击,选择”配置角色”,如图 11-33 所示。

图 11-35 配置故障转移群集角色

第 2 步,在弹出的”高可用向导”中,于”选择角色”对话框,选择”Hyper-V 副本代理”,如图 11-36 所示,点击”下一步”继续。

图 11-35 选中 Hyper-V 副本代理

第 3 步,在”客户端访问点”对话框,输入 Hyper-V 副本代理的名称,此处定义为”HyperVre”,同时定义该角色的 IP 地址,由于 HyperVHA.contoso.com 这个故障转移群集由 hv2.contoso.com 和 hv3.contoso.com 两台 Hyper-V 主机组成,同时这两台主机都是双网卡配置,因此此处会有两个网卡地址的输入选项。可以根据需要勾选一个或多个网络,以决定 Hyper-V 副本代理角色位于哪个网络中。配置如图 11-36 所示,点击”下一步”继续。

图 11-36 选中 Hyper-V 副本代理

第 4 步,在”确认”对话框中,可以检查配置信息是否无误,主要是检查网络名称和IP 地址是否填写错误,如图 11-37 所示,点击”下一步”继续。

图 11-37 确认 Hyper-V 副本代理的配置

第 5 步,经过短暂的等待后,完成 Hyper-V 副本代理的配置后,自动进入”摘要”对话框,此时点击”完成”,结束 Hyper-V 副本代理的配置。如图 11-38 所示。

图 11-38 完成 Hyper-V 副本代理配置

第 5 步,返回”故障转移群集管理器”,在”角色”下已经可以看到新的 Hyper-V 副本代理角色,如图 11-39 所示。

图 11-38 完成 Hyper-V 副本代理配置

第 6 步,完成以上操作后,还需要对 Hyper-V 副本代理进行委派,方便后期正在其他主机上去调用和 Hyper-V 副本代理。

在域控制器上,打开”Active Directory 用户和计算机”,在相应的 OU 下找到需要操作的计算机账户 HyperVre,右键点击需要委派的计算机账户,选择”属性”,在”属性”对话框中,切换至”委派”选项卡,依次委派所有涉及的 Hyper-V 主机和 Hyper-V 故障转移群集的”Hyper-V Replica Service”服务,如图 11-39 所示。

图 11-39 委派”Hyper-V Replica Service”服务

完成委派后,可以等待组策略刷新生效,或手动重启所有涉及的 Hyper-V 主机生效。

11.2.7 扩展复制

扩展复制是 Hyper-V 2012 R2 所带来的新功能,其解决的是 Hyper-V 副本在 Hyper-V 2012 中只能存在一条的问题。

使用扩展复制需要如下条件:

  • 已经创建 Hyper-V 副本关系。
  • 在副本服务器上才拥有该选项。

第 1 步,在副本服务器 hv4.contoso.com 上右键点击该虚拟机,依次选择”复制”→

“扩展复制”,如图 11-40 所示。

图 11-40 准备扩展复制

第 2 步,弹出”扩展复制”向导,在”指定副本服务器”对话框,输入副本服务器地址即可。此处可以使用上一小节创建的故障转移群集下的 Hyper-V 副本代理。Hyper-V 副本代理除了必须运行在故障转移群集之上外,和普通的 Hyper-V 副本没有任何区别。

在副本服务器处输入 Hyper-V 副本代理的其中一个节点的名称 hv2.contos.com,此时弹出错误提示,告知用户该节点无法作为 Hyper-V 副本服务器使用,必须使用故障转移群集的 Hyper-V 副本代理地址。点击”更新”按钮,可以自动变更为新地址。如图 11-41 所示,点击”下一步”继续。

图 11-41 指定副本代理服务器

第 3 步,点击更新后,依然弹出错误提示,告知用户该 Hyper-V 副本代理未进行配置,点击”配置服务器”,进行接下来的配置。如图 11-42 所示,此图示在配置完成后不会再次出现。

图 11-42 准备配置 Hyper-V 副本代理

第 4 步,在弹出的”Hyper-V 副本代理配置”对话框,需要注意三个地方:

  • 必须勾选启用此群集作为副本服务器。
  • 在”身份验证和端口”下,勾选”使用 kerberos
  • 在”授权和存储”处,必须指定副本文件的默认存储位置为群集共享卷(CSV),如指定本地磁盘,则该配置页无法保存。

配置完成后,如图 11-43 所示,点击”确定”完成配置。

图 11-43 Hyper-V 副本代理配置

第 5 步,点击”下一步”后,进入”指定连接参数”对话框,此处可以直接点击”完成”,以默认配置快速完成 Hyper-V 副本复制的配置,如图 11-44 所示,在生产环境中,如有特殊需求,则可以点击”下一步”修改每一个阶段的参数,直至配置结束。

图 11-44 以默认配置快速完成扩展复制

第 6 步,配置完成后,检查位于 hv4.contoso.com 上的原副本服务器的”复制”选项卡,则发现增加了一条扩展复制状态的信息,如图 11-45 所示。

图 11-45 检查扩展复制关系 1

第 7 步,在 hv2.contoso.com 上检查 Hyper-V 副本的复制关系,可以发现主服务器为 hv4.contoso.com,副本服务器为 hv2.contoso.com,如图 11-46 所示。

图 11-46 检查扩展复制关系 2

第 8 步,在 hv4.contoso.com 上右键点击该虚拟机,依次选择”复制”→”查看复制运行状况”,可以看到扩展复制也确实如上一步所显示的一样。如图 11-47 所示。

图 11-47 检查扩展复制关系 3

整个扩展复制的关系是如”糖葫芦”一样的,hv4.contoso.com 作为承载扩展复制的环节,同时拥有主服务器和副本服务器两个角色:

hv1.contoso.com(主)→hv4.contoso.com(同时为主、副本)→hv2.contoso.com(副本)扩展复制可以使用的场景很多,需要注意的是,使用多节点的扩展复制主要是为了保护极端情况下的数据安全,同时由于额外投入了更多硬件,因此实施成本较高。

11.2.8 测试故障转移

由于同一组 Hyper-V 副本中,只能有一台虚拟机处于开机状态,所以如果希望检察副本服务器传输的数据是否正确,是无法直接查看到的。为了检验副本服务器工作是否正

常,Hyper-V 2012/2012 R2 提供了”测试故障转移”功能,可以帮助用户验证虚拟机内的数据。

第 1 步,在副本服务器上,右键点击虚拟机,依次选择”复制”→”测试故障转移”,如图 11-48 所示

图 11-48 运行测试故障转移

第 2 步,在弹出的”测试故障转移”对话框中,可以选择恢复点进行测试故障转移。

选中所希望使用的恢复点后,点击”测试故障转移”,如图 11-49 所示。

图 11-49 选择合适的恢复点,测试故障转移

第 3 步,稍过等待后,”Hyper-V 管理器”中会增加一台”原名称-测试”的虚拟机,这台虚拟机是由原副本服务器的快照所产生的差异磁盘而构建的,此时将该虚拟机开机进行测试即可,如图 1 所示 11-50 由于该虚拟机的网络适配器未连接虚拟交换换机,因此不用担心该虚拟机启动后,会对局域网内正在工作的虚拟机造成影响。

图 11-50 产生新的虚拟机,对其开机测试即可

第 4 步,测试完成后,关闭该虚拟机,于原副本服务器上的虚拟机上右键点击,选择”停止测试故障转移”,如图 11-51 所示。

图 11-51 停止测试故障转移

第 5 步,系统弹出告警窗口,告知接下来会删除”原名称-测试”的虚拟机,点击”停止测试故障转移”,完成删除虚拟机和恢复正常复制的状态。如图 11-52 所示。

图 11-52 停止测试故障转移告警

11.2.9 删除复制

在某些情况下,可能需要删除 Hyper-V 副本的复制关系。如某台虚拟机因业务开展需要下线、变更或扩容,此时需要删除 Hyper-V 副本的复制关系。

第 1 步,在副本服务器上,右键点击虚拟机,依次选择”复制”→ “删除复制”。需要注意的是,必须同时在主虚拟机和副本虚拟机上都进行一次这种操作,如果包含扩展复制,在扩展服务器上也要进行删除操作。如图 11-53 所示。

图 11-53 停启动删除复制

第 2 步,如果在开启了扩展复制的副本服务器上进行删除复制操作,则会弹出如下提示,可选”删除扩展的复制”或”删除所有复制”,如图 11-54 所示。如果未开启扩展复制,则此处无可选项,仅有”删除复制项”按钮。

图 11-54 停启动删除复制

第 3 步,在所有主服务器和扩展服务器上删除复制后,可以在”Hyper-V 管理器”中看到,”复制”选项卡已经没有 Hyper-V 副本信息了。删除复制关系后,Hyper-V 的虚拟机依然存在,如不需要,则必须手动删除,如图 11-55 所示。

    
 

 

图 11-55 完成删除复制

11.3 小结

本章主要对 Hyper-V 的异地灾备技术”Hyper-V 副本”进行了介绍,值得注意的是,

Hyper-V 副本的实现非常简单,但逻辑关系需要用户经过多次尝试以加深理解。Hyper-V 副本的主服务器和副本服务器、故障转移这些的操作步骤一定不能出错。由于 Hyper-V 副本的数据与主服务器是异步同步的关系,因此数据会存在少许差异。在灾难情况下的恢复可能会存在少许数据的丢失,这一点是在部署 Hyper-V 副本之初就要考虑到的。

而何时进行故障转移,以及反向复制,则需要有严格的规章制度进行规范,如果操作失误,本来是由 A 主机复制到 B 主机,结果将数据由 B 主机复制到了 A 主机,误操作无形中会造成数据的丢失。

Hyper-V 副本是一项覆盖广泛的技术,对系统环境的要求很低,不仅可以在独立

Hyper-V 主机中使用,也可以在故障转移群集中使用。并且当副本服务器运行正常时,仅消耗副本服务器的硬盘空间,如果仅仅是作为一种异地灾备技术存在,只需要为副本服务器配置较大容量的硬盘即可,无需在 CPU、内存方面投入庞大投资。

 

 

 

 

发表评论

Go