现在有一个Hyper-v的集群,可以解决宿主机出现故障导致的可用性降低问题,但是对于勒索病毒攻击和系统本身出现问题却无效,所以需要另外建一个Hyper-v服务器,然后将集群中的虚拟机定时复制到这台hyper-v服务器上做容灾。
hyper-v有解决方案,可以实现单机-单机,集群-集群,单机-集群的各种组合方式。
整个配置下来,期间遇到的四个拦路虎:
第一只虎: Hyper-v副本复制代理的问题
集中要配置复制,需要添加故障转移集群中的Hyper-v副本代理角色,设置一个ip地址和名称。这一步不难,难的是你创建好了副本代理角色后,你无法启动这个角色。
原因也很简单,需要你的集群服务器要有添加域计算机的权限。只要在与控制的computer 这个OU上设置委派,赋予这个集群服务器添加计算机的权限就可以了。
请与域管理员合作以确保:
- 群集标识“OA_CLUSTER$”具有创建计算机对象权限。默认情况下,所有计算机对象是在与群集标识“OA_CLUSTER$”相同的容器中创建的。
- 尚未达到计算机对象配额。
- 如果存在现有的计算机对象,请使用“Active Directory 用户和计算机”工具验证群集标识“OA_CLUSTER$”是否具有该计算机对象的“完全控制”权限。
原来是自己偷懒,在主机上面的hosts文件中添加了计算机名和实际备份机的名称不一致,所以和证书不匹配了。
第二只虎: 证书问题
同一个域内信任域内,可以采用Kerberos验证,如果是不同域或工作站方式,则需要采用证书方式。
创建证书需要先下载工具,makecert的下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=8279
Makecert的常用参数的用途如下,大致看明白就可以了。
-n x509name
指定主题的证书名称。在双引号中指定此名称,并加上前缀 CN=;例如,"CN=myName"。
-pe
将所生成的私钥标记为可导出。这样可将私钥包括在证书中。
-sk keyname
指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。
-sr location
指定主题的证书存储位置。Location 可以是 currentuser(默认值)或 localmachine。
-ss store
指定主题的证书存储名称,输出证书即存储在那里。
-eku oid[,oid]
将用逗号分隔的增强型密钥用法对象标识符 (OID) 列表插入到证书中
-r
创建自签署证书。
-sky keytype
指定主题的密钥类型,必须是exchange、 signature或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。
-sy type
指定主题的 CryptoAPI 提供程序类型。
首先在主服务器上创建证书,其实先创建谁这个不重要,你喜欢重备份机先创建也可以。
1.主服务器创建证书
因为是集群,所有创建的证书的应该包含 Hyper-v副本代理的FQDN,还有集群中节点服务器的证书
---创建根证书
makecert -pe -n "CN=1strootCA" -ss root -sr LocalMachine -sky signature -r "1strootCA.cer"
---创建Hyper-v副本代理的证书,并指向根证书
makecert -pe -n "CN=<1stHCAgent.innpro.com>" -ss my -sr LocalMachine -sky exchange -eku 1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2 -in "1strootCA" -is root -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 1stAgentCA.cer
---创建节点1的证书
makecert -pe -n "CN=<hyper-7B2ViMG.innpro.com>" -ss my -sr LocalMachine -sky exchange -eku 1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2 -in "1strootCA" -is root -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 1stnode1CA.cer
---创建节点2的证书
makecert -pe -n "CN=<hyper-EAJJNDG.innpro.com>" -ss my -sr LocalMachine -sky exchange -eku 1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2 -in "1strootCA" -is root -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 1stnode2CA.cer
证书创建完成后,需要将这些证书导出,创建私钥,然后拷贝到对端。
MMC ---添加删除管理单元--证书---选择计算机账户,选中刚才创建的根证书,导出cer文件。选择其他证书,输入密钥,将以上的证书导出成文件pfx证书。
2,副本服务器导入证书
将导出的文件复制到副本服务器上。
certutil -addstore -f Root "c:\windows\system32\1strootCA.cer",也可以通过MMC直接导入。
MMC ---添加删除管理单元--证书---选择计算机账户,选中证书文件,将以上的证书导入,注意cer的证书导入到胜任的根证书目录下,pfx证书导入到个人证书下面。
同样我们还要
3,副本服务器创建证书
makecert -pe -n "CN=bakRootCA" -ss root -sr LocalMachine -sky signature -r "bakCA.cer
makecert -pe -n "CN=Hyper-backup" -ss my -sr LocalMachine -sky exchange -eku 1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2 -in "bakRootCA" -is root -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 bakRootCA.cer
4.主服务器上导入副本服务器证书
把副本服务器上的证书拷贝到主服务器上导入。
MMC ---添加删除管理单元--证书---选择计算机账户,选中证书文件,将以上的证书导入
第三只虎: 证书吊销检查
证书配置完成后,就可以在Hyper-v Manager中配置复制了,但是你选择证书后,系统会提示;证书通不过吊销检查。
这就需要修改注册表禁止证书的吊销检查
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\FailoverReplication" /v DisableCertRevocationCheck /d 1 /t REG_DWORD /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Replication" /v DisableCertRevocationCheck /d 1 /t REG_DWORD /f 下面这个值系统本身是有的,只要将值修改为1就可以。
修改后,选择证书就不再提示出错消息。
第四只虎:无法与副本服务hyper-v的端口443建立连接
继续配置复制直到完成,没有想到还是出现如下错误,确定防火墙的443端口已经打开了,所以不是简单的错误,为解决这个问题化了很长时间,最后发现其实和证书有关系。
1.错误:与服务器的连接意外终止(事件日志 Hyper-V-VMMS 32000 0x00002EFE)
2.错误:Hyper-V 无法为虚拟机“DomainA”启用复制: 已处理证书链,但是在不受信任提供程序信任的根证书中终止
最后发现原来是自己搭建的时候,证书一会儿导入一会儿删除,最后备份机导出的根证书删除后没有在主机的信任更目录下重新导入导致的,在备份机上重新导出根证书,在生产机上重新导入。
3.错误:当主机飘到另外一个节点的时候,复制无法成功
注册证书的时候及关闭证书吊销检查,这些动作需要在另外的一个节点上也要进行。
4.错误:如果虚拟机里面配置了Iscsi,复制时无法进行。
解决方法:将iscsi配置到宿主机上,然后通过映射的方式实现
搞定。
可以看到主机快速复制到备份机器上的速度是非常快的。设置复制的时候保留24个小时的还原点,应该是比较安全的,相当于我们有了一瓶的后悔药。