常规升级方式
VCS (vCenter Server for Windows)平滑升级到 vCSA (vCenter Server Appliance) ? 对不起,这种操作在6.0之前 官方文档是不存在的。
VCS 是运行在 Windows 之上的虚拟化管理程序,而 vCSA 是运行在 Linux 上的,且是由 VMWare 定制开发好的appliance ,这也是 vCSA 的 A。两者的管理功能在6.0后几乎一样,但却是使用的底层操作系统,中间件,数据库都有极大的不同,无法平滑升级,数据无法从 VCS 导出,然后导入到 vCSA ,当中涉及到太多利害关系了,光网络和数据库就够你喝一壶(ps:vCSA比VCS 部署和架构都简单,而且能省掉M$的License)虽然之前在Flings 上有大神做了一个 VCS to VCVA Converter 的转换程序,之后正式被官方集成生产——vCenter Server Appliance (VCSA) Migration Tool officially GAs w/vSphere 6.0 Update 2m
我的方式
VCS to VCVA Converter 很早之前我就做了实验去验证,那时候实验环境比较简单,所以试了两次后,便完成验证了。在接触到复杂的虚拟化环境后,我开始考虑到这个物件的不确定性了,每个环境的管理者的技术水平都不是同一水平的,因此环境变得不可捉摸,如果有别的物件如监控,备份的依赖 VCS ,那转换成 VCSA 就很可能发生不可预测的错误,转换失败虽然不会破坏 VCS 的数据,但转换过程需要把 VCS 关机 ,但做我们这一行,很忌讳服务器关机/重启,因为很可能就启动不了或者启动失败。整好,目前我管理的虚拟化环境VCS 5.5 有升级到 VCSA 的需求,而且环境巨复杂,简单的说一下:
- 有4个集群,有的集群多达 30 个 ESXI-HOST 主机,几乎是vSphere 5.5 的最高配置。
- 每个集群独立的 VDS (虚拟分布式交换机),总 VDP (分布式端口组)超过 200 个
- 每个 VDS 都关联了两个上联口
- 总 VM 数量超过 1000 个
每个 VM 的网卡都挂载了一个 VDP (分布式端口组),可怕吧·····
因此我在寻求一种平滑升级的方式,尽量的、原生的,可持续的完成VCSA 接管 VCS 的ESXI、VM、分布式虚拟网络配置等。
后来在 PowerCLI 上看到了可能
思路
利用跑业务流量的双网卡冗余特点,编写脚本实现精准切换端口组
- 先部署 VCSA6.0(已部署)
- 在 VCSA 上创建与 VC一样的集群架构,以及分布式交换机的端口组一致(脚本保证一致性)
- 通过脚本控制 VDS (分布式端口组)-> VSS (标准端口组)的精准切换(保证端口组的影响降到最低)
- 把 ESXI 注册到 VCSA 上,VM 绑定在 VSS,注册过程不受影响
- 通过脚本回切端口组(VSS -> VDS)
迁移图示
特点
除了第一步,其余步骤均是通过脚本实现以 ESXI 为单位逐台注册到 VCSA,随时可中断回滚,为了解决 VDS 与 VM 之间的关联关系,VM 先绑定在 VSS 上,脱离了对 VDS的影响。一切变更操作设计以保护VM链路不中断为原则;
整个变更中,基本上是管理上的调整,不会改变ESXI既定的物理网络配置
难点
因为涉及到 VM 网卡上的端口组配置变换,必须保证绝对的精准记录每个 VM 网卡上面的 连接的端口组名称是什么,新建的 VDP 的 VLAN 号必须要跟原来的端口组 VLAN 号一致。我的解决办法是,导出这些配置,然后根据导出的内容,在新建的 VSS 上创建相应的端口组,且端口组名称尽量还是要增加标识来区分,来维护全局唯一的规则,这样降低报错和变更风险。
风险
正在变更的ESXI上负载的VM在切换端口组的时候可能会有1~2个丢包的影响,类似情况就是双线冗余的业务链路断开了一线,正在使用该链路的流量会从另一个冗余的链路过来。
PowerCLI 脚本
需要在PowerCLI把新旧两个VC都Login上
公共参数
|
|
生成 HOST-VM-PG-VMNIC-LIST
靠人是记不住,也记不完的,所以要把目前的配置导出(VM、VMHOST、VMNAME、NICNAME、NICMAC、PGNAME、VLAN、VSSPG、VSSNIC 、VDSNIC、VDSNAME
)。
在新的VC创建对应的VDS以及VDPG
|
|
创建临时 VSW 标准虚拟交换机
|
|
重定向VM的NIC端口组至VSS端口组
|
|
移除/新建分布式交换机
|
|
添加ESXI到指定的位置
|
|
重定向VM的NIC端口组至VDS端口组
|
|
简单新建代替会死吗?
当我提出这个方案的时候,很多人问我的一个问题。
其实并不会死,指示会让你麻烦死。
首先,肯定不能直接在集群里移除ESXI,你只能断开连接这个ESXI
其次,未从 VDS 移除 ESXI ,ESXI 会残留这原来的VDS信息,直接去注册到别的 VDS ,你需要替换对应的端口组,但很不幸的告诉你,这个时候你已经无法看到VM的网卡原来关联的端口组名称是什么了,这会让你的运维带来困境。万一你选错关联的端口组。VM 的网络会中断。
运行好好的为什么升级?
通过从 VC5.5 升级到使用 VCSA6.0 可获得以下收益。
- 支持更大的集群规模,支持 64 个主机组成集群
- 为后续ESXi5.5 升级到 ESXi6.0 夯实基础
- 节约额外的授权费用(VC需要Windows,sql server授权,VCSA则不需要)
- 节省独占物理主机的运营成本
- 部署 VCSA 比 VC 要更快
- 日常运行效率更高
- 可获得虚拟机的高可用,数据保护,中高端存储的性能优势
- 灵活的增配VC资源
- 两个VC共享验证凭据,SSO单点登陆