wangf15
作者wangf152016-11-15 13:55
技术经理, 长虹佳华

利用SVC实现对原始存储设备进行虚拟化管理

字数 12530阅读 8211评论 2赞 6

1 概述

此次SVC最佳实践是某公司存储整合项目,其一期实施工作的主要的目的是针对目前一台DS5100,一台HP EVA利用IBM SVC存储虚拟化设备,将原始存储设备进行虚拟化管理。

2 实施条件

为了使本次SVC实施工作能够顺利完成,建议在实施前确保下面列出所有的条件均满足要求。

2.1 主机端需求设计

本次实施工作所涉及的主机是Redhat Linux5.6和Windows2008。SVC对此操作系统、多路径管理软件、HBA卡型号都有一定的要求(具体要求可参照官网或相关产品手册)。

2.2 光纤交换机

为了保证SVC能够正常接入SAN网络,光纤交换机不但要满足版本需求,还必须有足够的空闲端口用于接入SVC和其他存储。

2.2.1 端口要求

SVC对总计需要8个交换机空闲端口,最少需要4个空闲端口,目前客户环境,新的SAN交换机能够满足端口需求。

2.2.2 版本要求

SVC对Cisco交换机的要求为:Cisco MDS、Cisco Nexus

2.3 存储系统

SVC对DS5100微码版本要求为:

07.30.21.xx、07.36.14.xx、07.36.17.xx、07.50.12.xx、07.50.13.xx、07.60.xx.xx、07.70.xx.xx、07.77.xx.xx。

3 SVC初始化及管理实施步骤

3.1 SVC总体安装步骤

基于IBM SVC的存储虚拟化具有通用性强、实施简单的特点,透明地加入客户原有SAN 是 SVC 的基本功能。本方案中SVC是整个SAN 网络的控制器,在SAN的分区上,逻辑上主要划分为Host Zone和Disk Zone,从而解除主机与存储设备的紧密耦合。它将整个SAN中的存储设备整合成一个巨大的存储池,可以充分利用所有的存储资源并按业务的需求分配存储空间、性能和功能。因此,通过SVC可以很方便的将目前的存储设备进行整合,建立统一的灾备管理和资源分配平台,可以按照应用/业务不断变化的需求来动态配置存储。

基于SVC的存储虚拟化的实施大致分为以下四个阶段:

  1. 前期准备:对XX公司开发测试环境现有状况和需求进行详细调查和讨论,收集系统现状,制定用户需求文档和实施方案。
  2. 现有SAN集中存储的虚拟化:现有SAN环境整合,将IBM SVC加入用户环境,实现对现有的虚拟化。
  3. 虚拟化存储空间的调整和优化:SVC实现对用户现有环境进行虚拟化后,根据应用/业务对存储空间的要求以及环境的变化,利用SVC对虚拟化的功能,进行动态、在线 调整和优化。
  4. SVC 功能演示和测试:在SVC的Cluster安装完成之后,需要对现有的存储进行整合,并整合的存储空间映射给服务器。经过SVC的整合后,服务器通过SVC对磁盘进行访问。系统SAN的逻辑示意图如下所示:

存储虚拟化第一阶段实施步骤及流程如下流程图所示:

3.2 SVC基本管理

A. 开机顺序:

1).光纤交换机
2).SVC管理控制台
3).SVC节点(通过UPS前面板电源按钮)
4).主机

B. 关机顺序:

1).主机
2).SVC节点(通过SVC前面板电源按钮)
3).SVC管理控制台
4).光纤交换机

C. SVC管理方式

一共有三种不同的方式来管理SVC:

  • 使用 System Storage Productivity Center (SSPC)
  • 使用SVC管理控制台
  • 使用PuTTY软件登陆SVC命令行控制台进行管理

D. SVC管理的IP需求

计划安装之前,必须考虑SVC cluster IP地址的需求来访问其他设备。我们必须规划IP地址分配、网络路由、网关和防火墙的配置以实现网络安全需求和访问需求。

E. SSPC的功能介绍

  • 管理配置SVC,维护SVC
  • 存储设备状态监控
  • 存储性能监控
  • 数据复制管理(TPC_R)
  • 状态报告/性能报告

3.3 开始配置SVC

 本章是在SVC 5.1版本上的常见操作步骤的截图,SVC6.1区别较大,可以参考SVC6.1的红皮书。在SVC上电后,通过SVC节点前面板的方向按钮:配置IP, MASK,GATE,并注意记录随机生成的密码。

1.At the service panel of that node, click and release the Up or Down navigation button continuously until Node: is displayed.

2.Click and release the Left or Right navigation button continuously until Create Cluster? is displayed.

3.Click the Select button. If IP Address: is displayed on line 1 of the service display, go to step 5. If Delete Cluster? is displayed in line 1 of the service display, this node is already a member of a cluster. Either the wrong node was selected, or this node was already used in a previous cluster. The ID of this existing cluster is displayed in line 2 of the service display.

4.If the wrong node was selected, this procedure can be exited by clicking the Left,( 0mLly84N)Right, Up, or Down button (it cancels automatically after 60 seconds).If it is certain that the existing cluster is not required, follow these steps:

a) Click and hold the Up button.
b) Click and release the Select button. Then release the Up button. This deletes the cluster information from the node. Go back to step 1 and start again.
5.Click the Select button.

6.Use the Up or Down navigation button to change the value of the first field of the IP Address to the value that has been chosen.

7.Use the Right navigation button to move to the next field. Use the Up or Down navigation buttons to change the value of this field.

8.Repeat step 7 for each of the remaining fields of the IP address.

9.When the last field of the IP address has been changed, click the Select button.

10.Click the Right button. Subnet Mask: is displayed.

11.Click the Select button.

12.Change the fields for Subnet Mask in the same way that the IP address fields were changed.

13.When the last field of Subnet Mask has been changed, click the Select button.

14.Click the Right navigation button. Gateway: is displayed.

15.Click the Select button.

16.Change the fields for Gateway in the same way that the IP address fields were changed.

17.When changes to all Gateway fields have been made, click the Select button.

18.Click the Right navigation button. Create Now? is displayed.

19.When the settings have all been verified as accurate, click the Select navigation button. To review the settings before creating the cluster, use the Right and Left buttons. Make any necessary changes, return to Create Now?, and click the Select button. If the cluster is created successfully, Password: is displayed in line 1 of the service display panel. Line 2 contains a randomly generated password, which is used to complete the cluster configuration in the next section.

注意,需要记录下来这个密码,后续配置需要输入该密码。

20.After the Password: display times out, if the cluster is created successfully, Cluster: is displayed in line 1 of the service display panel. Also, the cluster IP address is displayed on line 2 when the initial creation of the cluster. is completed.

出现CLUSTER NAME证明配置成功,可以通过GUI进行后续的配置。

3.4 通过SVC Console连接SVC Cluster

3.4.1 在SVC Console打开IE输入http://172.16.0.104:9080/ica

3.4.2 点击Add SAN Volume Controller Cluster。

3.4.3 输入10.0.0.51,勾上Create(initialized) Cluster,点击OK

3.4.4 输入admin和记录下来的CLUSTER随机密码。

3.4.5 选择Continue

3.4.6 输入Superuser的密码passw0rd,SERVICE密码passw0rd,CLUSTER名称”SVC_CLUSTER1”,SERVICE ip 10.0.0.51,光口的速度,并允许密码重置。(具体信息参考3.1章节)

3.4.7 完成上述参数设置后,点击”Create New Cluster”

3.4.8 SVC Cluster成功创建,点击Continue

3.4.9 选择 “Capacity Licensing”,点击Go

3.4.10 设置好参数后,点击”Set License Settings”

3.4.11 点击Continue

3.4.12 整个SVC Cluster的初始化全部成功完成。下一步,添加SVC Node节点。

3.5 SVC Cluster增加节点

3.5.1 打开 SAN Volume Controller Console

3.5.2 点击CLUSTER

3.5.3 下拉菜单选择LAUNCH THE SAN VOLUME CONTROLLER CONSOLE

3.5.4 选择Work with Nodes,选择Add a Node,点击Go

3.5.5 输入Node的名称node2,点击OK。Node就被加入。

3.5.6 确认Node被成功加入,如下图所示。

另一方面,为了管理SVC,需要在工程师的笔记本上安装SVC的控制台软件。使用控制台软件的图形界面完成cluster的基本配置(包括节点配置,用户配置等)。全部配置正确完成后,SVC的初始化工作即告完成。

3.6 DS5100存储虚拟化管理

3.6.1 存储虚拟化实施步骤

  1. 全量备份当前的数据
  2. SVC设备加电检查并升级微码
  3. 设置SVC,建立SVC Cluster
  4. 在host zone和disk zone创建之前,首先在交换机上备份并保留原有的zone配置文件
  5. 连线、为使SVC能接入目的LUN,创建Zone、在目的存储上划分LUN Masking
  6. 验证SVC能够接入目的存储上的LUN和收集必要的信息
  7. 停止应用,卸载卷组,删除磁盘,部署SVC的多路径驱动
  8. 重新连线,划分Zoning和在SVC上为主机配置LUN Masking
  9. 主机寻找到通过SVC提供的LUN
  10. 重新启动主机和应用,并检查目的LUN

3.6.2 SVC存储管理最佳实践

后端存储规划配置需要遵循以下规则:

存储子系统允许多条冗余路径来提高数据带宽性能。推荐存储子系统的每一个控制器都有一条链路连接到每一个交换机,但不是必须的。例如,DS4000的控制器A可以只连接到交换机A,或者同时连接到交换机A和交换机B,同时,DS4000的控制器B可以只连接到交换机B,或者同时连接到交换机A和交换机B

在一个SVC cluster中的所有节点必须看到同样多的存储子系统端口。如果两个节点看到存储控制器的端口不同,则会显示为降级状态。此情况常见于不正确的zoning配置。当不正确的逻辑卷映射出现时,也会导致这种报错。

总体来说,我们仍然可以像没有使用SVC一样配置存储子系统,但是推荐遵循以下特殊要求:

  • 磁盘:使用大容量磁盘时需要注意避免转速过低影响负载,推荐使用RAID-5 ,但 RAID-10 也是有效的
  • Array大小:对于DS4000/DS5000,推荐使用8+P 或者 4+P 来配置RAID-5 ,当使用SVC4.2.1或以上版本是支持SATA 盘 ,推荐一个array上创建一个lun,整个array的空间不超过2TB,存储子系统的光纤口上至少有一个lun被映射给SVC,当存储子系统添加逻辑卷时,建议在SVC上把识别的新逻辑卷加入到已有的MDGs,而不是新建额外的小MDGs
  • 最大支持64个WWNNs:EMC DMX/SYMM, 所有的HDS 和SUN/HP HDS clones 每个光纤端口就使用一个WWNN;在SVC看来一个口就是一个单独的存储子系统,IBM, EMC Clariion, HP, 每个存储子系统仅使用一个WWNN;每个控制器会带有多个不同的WWPNs
  • DS8K 使用4口或者8口的主机适配卡: 每张卡只使用端口1,3或者端口2,4 ,能为SVC提供8或16个接口 , 针对40个以下的ranks,使用8个端口, 针对40个以上的ranks,使用16个端口

3.6.3 Vdisk配置最佳实践

一个virtual disk只能属于一个MDG,也只能属于一个I/O group。 当我们创建一个VDisk时,首先我们必须确定它属于哪个MDG 和哪个I/O group。

  • 一个外部存储的所有Mdisk定义在同一MDG中
  • MDG定义了存储子系统提供的哪些逻辑卷来组成Vdisk
  • I/O group(两个node组成一个I/O group)定义了哪个SVC节点给vdisk提供I/O 通路
  • 为了实现最优性能,将VDisks 分散在同一个SVC cluster的不同节点上,这样会保证SVC cluster每个节点的负载均衡
  • I/O group considerations,当我们在某个I/O group里面每创建一个VDisk,默认的它会将VDisk的优先访问节点在此I/O group的两个节点中来回切换,我们也可以自行指定优先访问节点,即使每个VDisk有8条通路,所有的I/O也只会从优先访问节点上通过,因此只有4条路径是真正被使用的,另外4条只有当遇到链路故障或节点升级切换时做备份使用
  • 创建image模式的Vdisk时:当来自于外部存储的Mdisk已经有数据时,我们需要image模式的Vdisk。 对于image模式的Vdisk,主机将直接访问到的是Mdisk中的数据。 因此image模式的Vdisk LBA值和Mdisk的LBA值是完全相同的,容量也是相同的,Mdisk必须不属于任何的MDG。Image 模式的Vdisk容量最小可以是512字节。

3.7 自动分层(easytier)配置

自动分层技术是一项为优化布置数据提供出众效率的关键存储技术。固态盘(SSD)相对于传统机械硬盘驱动器(HDD)的性能,通过I/O Monitoring监控到最需要高I/O性能的数据(如数据库的日志文件),通过The Easy Tier Process技术动态的把有需求的数迁移至SSD 上,让存储系统根据数据的访问频度和性能要求,自动地将需要高 IOPS 的数据迁移到SSD 上,而无须用户的干预。其中,其监控检测的最小粒度是16MB,最大8192MB。

3.7.1启用SVC/Storwize V7000 Easy Tier完整功能的条件:

  • 不需要购买新许可,基于新版本6.1的基本功能
  • 将SSD 固态盘的MDisks 添加到一个包括普通磁盘MDisk的 Storage Pool 中。
  • Easy Tier 启动 measuring (统计 Volume extent 的使用情况) 和 managing (根据统计信息适当迁移 extent ) 功能,管理所有Volume。

3.7.2 评估功能

  • 没有SSD固态盘,也可以使用Easy Tier 的 measurement 功能
  • SVC/Storwize V7000 可以生成一个性能概要文件,该文件可以复制并用于分析
  • 生成的数据可以帮助了解是否需要SSD固态盘,以及哪些存储池更适合优化
  • IBM Storage Tier Advisor Tool (STAT) 可以分析 SVC/Storwize V7000 的性能概要文件

3.7.3 GUI管理Easy Tier

以下介绍如何通过SVC GUI管理界面使用Easy Tier。

  1. 在存储池界面我们可以看到,Easy Tier出于未激活状态;
  2. 默认情况下所有mdisk都会显示为Hard Disk Drive,尽管是SSD mdisk;
  3. 在mdisk上点击右键,选择select Tier,可以更改mdisk的属性;
  4. 选择Solid-State Drive;
  5. 现在mdisk就设置成功了;
  6. 现在我们可以看到,这个存储池的Easy Tier属性已经变为激活状态了。

3.8 精简配置(Thin-provisioned)

精简配置技术,又称“虚拟资源调配”,是一项对存储资源的自动分配和利用,以避免磁盘空间被无限制索取的技术。光纤硬盘提供的虚拟卷可以设置自动扩展“精简配置卷“的大小,当达到其设定的阀值后,自动扩展卷空间。

精简配置性能要求:由于精简配置需要额外的I/O操作来读写元数据,这样就增加了SVC node的负载,所以出于性能的考虑,我们不推荐用户在高性能要求的应用环境,或者是很高写I/O负载的情况下使用精简配置。

4 SVC数据迁移设计

4.1 实施建议

SVC的数据迁移功能主要有两种,一种是VDM,一种是Data Migaration,前者可以在两个MDG里面保留两份数据,后者只能把数据从一个MDG迁移到两个MDG。为了保持数据的安全,建议采用VDM方式。

4.2 接入SVC设备并初始化

实施流程如下图:

SVC包含两个节点,每个节点有4个光纤端口,分别连接到4个fabric中。而SVC的电源是通过UPS提供,需要连好UPS的电源,以及UPS与SVC节点之间的线缆。在SVC设备上电后,首先登录交换机,在各fabric中找到SVC的两个端口,创建一个新zone将这两个端口包含在内(SVC Cluster通信用)。SVC Cluster的初始化需要通过SVC节点前面板的方向钮和选择钮进行操作,包括配置Cluster Name,IP地址,子网掩码以及网关等,并注意记录随机生成的管理员密码。另一方面,为了管理SVC,需要在工程师的笔记本上安装SVC的控制台软件。使用控制台软件的图形界面完成cluster的基本配置(包括节点配置,用户配置等)。全部配置正确完成后,SVC的初始化工作即告完成。

X 回退保护机制:如果在配置过程中发现SVC节点故障,使得初始化工作无法完成,则需要收集SVC日志,寻求更高级别技术支持,并停止初始化过程。如有必要,删除SVC内部zone,恢复存储网络的初始配置。回退过程不会对已有系统造成任何影响。

4.3 HP存储纳入SVC管理

本阶段主要利用SVC的image模式vdisk功能,逐一将目前HP存储内的卷进行虚拟化,即通过SVC将HP的卷映射给主机,而主机对HP卷的读写访问首先会经过SVC处理。实施前请确保各操作系统版本和驱动版本满足SVC要求。

实施步骤如下图:

部分实施步骤说明:

  • 停止应用,卸载卷组,删除磁盘:停止应用主要包括停止HACMP(如有配置),确认客户的应用软件,数据库等服务均已关闭,并umount文件系统,删除相关fcs设备及磁盘。
  • 修改光纤交换机ZONING配置:在每个fabric上删除原系统与HP存储之间的ZONE对应关系,并建立两个新的ZONE,I. 主机与SVC之间的zone;II. SVC与HP存储之间的zone;这些新zone只要包含所有对应的端口即可。
  • 调整HP存储映射信息:删除原有主机HBA卡的定义,使原主机不再直接访问HP存储。与此同时,使用mkvolgrp命令将该系统对应的volume加入svc_grp,使用mkhostconnect命令建立SVC的端口定义,并将svc_grp映射到SVC端口。
  • SVC识别HP存储的LUN:在SVC上重新detect mdisk,并核对映射过来的volume数量以及LUN ID。将新发现的mdisk改名,以减少误操作可能。
  • SVC建立Image Mode Vdisk并映射给主机:1. 将每个新的Mdisk创建为Image Mode Vdisk;,2. 根据前端主机的HBA WWPN,在SVC上建立Host;3. 创建vdisk到host的映射,将image mode vdisk重新分配回原主机。
  • 主机重新识别设备并恢复应用:1. 主机重新认盘,确认路径识别正确;2. 重新加载卷组,重启数据库和应用,确认数据正确;

X 回退保护机制

在本阶段实施过程中,可能出现的问题以及回退方法如下

  1. 确保全量备份当前系统的数据。
  2. 保存原始ZONING配置信息,为回退做准备。
  3. 如果HP存储不能识别SVC,需要检查ZONING配置,不能解决则恢复原有ZONING,重新启动应用。
  4. 如果SVC不能识别HP存储映射的LUN,需要检查ZONING配置,以及HP存储的映射配置,不能解决则恢复原有ZONING,重新启动应用。
  5. 如果主机内无法识别SVC提供的vdisk,需要检查ZONING配置,检查SVC上的映射配置,如果无法解决则恢复原有ZONING,重新启动应用。

在本阶段操作过程中,SVC不会修改HP存储卷上的数据,因此发现任何问题无法解决时,只需恢复原有ZONING配置即可,回退后主机仍然使用以前的方式直接访问HP存储的数据。

4.4 HP存储数据迁移到DS5100

在本阶段中,SVC将同时管理HP存储与DS5100的卷以便进行数据迁移。为了减少迁移过程对HP存储的性能影响,计划使用vdisk mirror方式将HP存储各volume的数据同步到DS5100对应的volume上。这一过程支持在线迁移模式,不需要停止客户应用,并且对前端应用透明。具体实施步骤如下图:

部分实施步骤说明:

  • 修改交换机Zone配置:在每个fabric中建立一个新zone,包括该fabric中所有的DS5100端口和SVC端口。
  • 修改DS5100映射配置:使用mkvolgrp命令将对应的volume加入svc_grp,使用mkhostconnect命令建立SVC的端口定义,并将svc_grp映射到SVC端口。
  • SVC识别DS5100的LUN:在SVC上重新detect mdisk,并核对映射过来的DS5100 volume数量以及LUN ID。将新发现的mdisk改名,以减少误操作可能。
  • SVC增加image mode vdisk copy:在SVC上已有的每一个HP存储上的image mode vdisk,增加一个同样是image mode的copy,这个新增的copy需指定为来自DS5100的某个相应的mdisk。

在增加vdisk copy的过程中,可以指定SVC的后台数据同步速率。需要根据用户应用的繁忙程度和期望同步时间进行调整。每个vdisk的数据同步默认速度为2 MB/s(可以)。同步速度可以通过syncrate参数进行设定,最低为128 KB/s,最高可达64 MB/s 。具体参数的设置可参考下表:

  • 确认同步完成:使用SVC管理界面或lsvdisksyncprogress命令,确认所有的vdisk同步完成,各copy均为sync状态。此时DS5100中已拥有和HP存储完全相同的数据。

X 回退保护机制

在本阶段实施过程中,可能出现的问题以及回退方法如下

  1. 如果DS5100不能识别SVC,需要检查ZONING配置,不能解决则恢复原有ZONING,取消数据同步。
  2. 如果SVC不能识别DS5100映射的LUN,需要检查ZONING配置,以及DS5100的映射配置,不能解决则恢复原有ZONING,取消数据同步。
  3. 如果数据同步过程出错,需要检查SVC到HP存储和DS5100的连接,排查错误后可以恢复数据同步。如果无法解决则删除DS5100对应的copy,取消数据同步。

在本阶段操作过程中,SVC不会修改HP存储卷上的数据,因此发现任何问题无法解决时,只需恢复原有配置即可。回退后主机仍然只通过SVC访问HP存储的数据。

4.5 主机直接访问DS5100

每套系统在HP存储与DS5100上的数据同步完成后,可以去掉SVC,使主机直接访问DS5100。由于调整主机对应的Zone,因此用户需要停机进行操作。具体实施步骤如下图:

部分实施步骤说明:

  • 停止应用,删除磁盘:与前面相同,包括停止HACMP(如有配置),确认客户的应用软件,数据库等服务均已关闭,rmdev删除相关fcs设备及磁盘(包括vpath)。
  • SVC剥离HP存储copy:使用splitvdiskcopy命令,使HP存储对应的copy从现有vdisk中剥离,成为新的vdisk(但是与DS5100对应的vdisk有相同的数据)。
  • SVC删除DS5100 vdisk:由于原有的vdisk中仅剩DS5100对应的copy,而这些vdisk都是image mode,因此可以在SVC上使用rmvdisk命令将这些image mode vdisk删除,从而使SVC脱离IO处理路径,让主机能够直接访问位于DS5100上的这些volume。完成这步操作后,SVC上也会自动删除这些vdisk到主机的映射。
  • 修改DS5100 Zoning配置:在每个fabric中删除SVC和DS5100的Zone,同时删除主机到SVC的Zone,创建主机到DS5100的Zone。
  • 调整DS5100映射信息:使用rmhostconnect命令删除SVC对应的主机定义;
  • 清空svc_grp,为相应的volume创建一个新的volgrp;使用mkhostconnect命令建立主机定义,并把新建的volgrp映射给该主机。完成后,刚才从SVC中删除的DS5100卷将能够被主机直接访问。
  • 主机重新识别设备并恢复应用:1. 重新认盘,使用datapath命令确认路径识别正确;2. 重启数据库和应用,确认数据正确;
  • SVC删除HP存储vdisk:主机成功恢复应用并确认正确后,SVC上的HP存储卷已经无用。使用rmvdisk命令删除这些vdisk。
  • HP存储删除映射配置:在HP存储上使用rmhostconnect命令删除volume到SVC端口的映射。
  • 修改HP存储Zoning配置:在每个fabric中删除HP存储和SVC之间的Zone。
  • SVC确认删除:在SVC上重新检测mdisk。此时HP存储和DS5100的映射信息均已删除,SVC将检测不到这两台设备所提供的相应mdisk。此时SVC会报错,直接关闭相应的错误信息即可。

X 回退保护机制

在本阶段实施过程中,可能出现的问题以及回退方法如下

如果主机无法识别DS5100提供的volume,需要检查ZONING配置,检查DS5100上的映射配置,如果无法解决则重新创建主机到SVC的ZONE,在SVC上将HP存储对应的Vdisk映射给主机,尽快重新恢复应用。至此一套系统的迁移工作完成,数据已经通过SVC的Vdisk Mirror功能,从HP存储转移到DS5100上在全部系统迁移完毕后,

最后还有一些收尾工作:

4.6 新旧主机切换

需要客户确认新的主机环境已经搭建完成,确认操作系统安装已完成,确认数据库软件安装已完成,确认应用程序安装已完成,建议创建一份生产数据拷贝来测试新环境,确认新的主机环境完全可以兼容旧环境后,再进行新旧主机的切换。切换的主要动作,就是将原来DS5100给旧服务器的映射,修改为映射给新的服务器,并在新主机中启动应用系统。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

6

添加新评论2 条评论

caocanxxpcaocanxxp软件开发工程师, MM
2019-10-17 16:41
谢谢分享!!!
真情难收真情难收网络工程师, 武汉大学
2017-02-14 09:40
不错。。。现在正在了解SVC的相关知识。
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

相关文章

相关问题

相关资料

X社区推广