ZStack 1.1 版本今天发布,欢迎大家下载试用。在该版本中,我们主要针对1.0 版本做了性能和稳定性相关的优化工作。 某些性能指标提升超过10倍,例如consoleproxy在管理节点重启后会立刻安装完毕. 此外,针对内网用户,ZStack 1.1 还提供了离线安装方法.用户只要预先安装CentOS 7.2 ZStack社区版,就可以完成ZStack离线安装.
新增功能
1.Ansible 优化
2.ConsoleProxy 重连API
3.API超时管理框架
4.垃圾自动回收
5.15M超小试用镜像--支持动态添加删除云盘和网络
6.更新虚拟路由(VirtualRouter)镜像
7.修改CentOS7.2 无法热迁移VM的Bug
安装升级
1.安装
2.离线安装
3.升级
4.Virtual Router Provider升级到Flat Network Porvider
1. Ansible优化
在1.1版本中,我们不再使用Ansible Playbook的方式去部署agent,而是直接使用了Ansible的原生SDK,为每个agent都定制了单独的部署程序,使得部署的稳定性和效率得到了较大的提高。
新的Ansible部署工具会自动检查系统依赖包的安装情况,只在有依赖包缺失的情况下才访问yum或apt源,避免了重启ZStack和升级ZStack过程中,由于访问外网抖动导致的物理机重连失败的问题,提高了系统的稳定性。新的部署工具也会检查Python依赖,解决了升级过程中consoleproxy依赖的websockify重复编译问题,升级consoleproxy的部署时间从原来的5分钟缩减到了4秒。
2. ConsoleProxy重连API
在1.1版本中,我们加入了console proxy的重连和查询API,用户不再需要通过重启ZStack来重新部署console proxy。
>>>QueryConsoleProxyAgent
{
"inventories": [
{
"createDate": "Mar 26, 2016 12:53:17 PM",
"description": "Console proxy agent running on the management node[uuid:ae80b109e9ca4f4c81191cd2ffe43000]",
"lastOpDate": "Mar 26, 2016 12:53:22 PM",
"managementIp": "172.20.12.46",
"state": "Enabled",
"status": "Connected",
"type": "ManagementServerConsoleProxy",
"uuid": "ae80b109e9ca4f4c81191cd2ffe43000"
}
],
"success": true
}
>>>ReconnectConsoleProxyAgent
{
"inventory": {
"ae80b109e9ca4f4c81191cd2ffe43000": true
},
"success": true
}
3. API超时管理框架
ZStack所有功能由大量相互独立的微服务实现,服务之间使用异步消息通信,通常一个API会涉及到多个消息以及跟Agent端的HTTP调用,超时管理成为一个难题。在1.1版本中,我们加入了统一的API超时管理框架,用户无需关心底层细节。在当前版本中,用户如果需要改变默认的API超时,暂时还需要通过zstack.properties文件来改变,例如需要改变AddImage的API超时为6个小时,需要在zstack.properties添加如下配置:
ApiTimeout.org.zstack.header.image.APIAddImageMsg= org.zstack.header.storage.backup.DownloadImageMsg, org.zstack.storage.backup.sftp.SftpBackupStorageCommands$DownloadCmd, org.zstack.storage.ceph.backup.CephBackupStorageBase$DownloadCmd; 6h
NOTE:目前我们为所有耗时的API都设置了默认3小时的超时时间,用户在如无特殊需要,不建议通过配置的方式进行修改。我们在1.2版本会新加超时管理API,用户可以直接通过API来设定相应操作的超时时间。
4. 垃圾回收机制
在1.1版本中,我们全面开启了跟虚拟机相关的垃圾回收器,可以自动回收由于网络故障、物理机故障导致的遗留资源,而不阻碍用户操作。
场景:
物理机网络失联导致用户无法删除该物理机上运行的虚拟机。在早前的ZStack版本中,用户需要等待物理机网络恢复后再执行删除操作。有了垃圾回收器后,用户可以直接删除虚拟机,后台会记录该删除操作。垃圾回收器会在物理机网络恢复后自动触发,执行未完成的操作。
目前已经启动的垃圾回收器包括云主机、云盘、快照,更多的垃圾回收器会在未来版本中逐一开放。
ZStack的垃圾回收器非常智能,支持时间轮询和事件触发,其中事件触发支持多种关联事件。例如在前面的例子中,如果管理员在物理机网络恢复前又删除了该物理机,垃圾回收器也会被触发,清除之前提交的删除该物理机上虚拟机的任务。
5. 新虚拟路由(Virtual Router)镜像
VirtualRouter image 更新到了 zstack-virtualrouter-1.1.0.qcow2 .我们除了更新了VirtualRouter 对应的services外,还提高了VirtualRouter的安全访问方式:
1.修改了virtual router 默认的密码,原先的默认密码是 password。以后用户无法用密码登录Virtual Router
2.使用了用户特别的 SSH public key。 这个public key是用户在安装ZStack的时候自动产生的,可以保证每个用户都是用不同的SSH key。 用户可以使用私有的 SSH private key从Virtual Router的管理网络登录。 该SSH private key 默认存放在管理节点: /usr/local/zstack/apache-tomcat/webapps/zstackWEB-INF/classes/ansible/rsaKeys/id_rsa
用户可以下载并替换原有VirtualRouter Image:
cdn.zstack.io/community/downloads/zstack/1.1/zstack-virtualrouter-1.1.0.qcow2
替换原有VirtualRouter的方法是:
1.从UI上下载新的VirtualRouter image,例如命名为 zstack-vr-1.1-image
2.从镜像服务器删除老的VirtualRouter Image
3.删除老的VirtualRouter Offering
4.创建新的VirtualRouter Offering,并且选择新下载的zstack-vr-1.1-image做为VirtualRouter Offering的镜像。其他网络配置不变。
5.从UI面板的Virtual Router菜单中删除现有的VirtualRouter VM
6.选择使用VR的L3网络重新创建一个普通VM,ZStack就会使用新的Virtual Router镜像创建一个新的虚拟路由。
6. 15M超小试用镜像--支持动态添加删除云盘和网络
在1.1我们为ZStack专门构建了一个只有15M的测试镜像,支持网络、SSHD,用户可以用它来做一些基本测试。相比于之前的1.0的测试镜像,该镜像支持了动态添加删除云盘和网络。下载链接:
cdn.zstack.io/community/downloads/zstack/1.2/zstack-image-1.2.qcow2
感谢Robert Yang(@linuxer)提供该镜像!
7. 修复CentOS7.2 物理机无法热迁移VM的bug
CentOS7.2 修改了热迁移VM的libvirt的相关代码,导致如果用户没有显示的设置物理机Hostname的情况下,云主机无法热迁移。ZStack以及给RedHat报告了问题。 不过在ZStack 1.1中,我们做了特别的改动来避免CentOS7.2 的这个bug。
8. 安装
你可以通过下面方式安装:
wget http://cdn.zstack.io/community/downloads/zstack/1.1/zstack-installer-1.1.0-rc1.bin -O zstack-installer-1.1.0.bin
bash zstack-installer-1.1.0.bin -R aliyun
这里-R aliyun参数指定使用阿里云的源进行安装,你也可以使用-R 163使用网易的源。我们推荐使用阿里云的源
9. 离线安装 ZStack
针对内网用户,以及访问Internet速度较慢的用户.ZStack 1.1 提供了离线安装方式. 用户若需要离线安装ZStack,需要在目标管理节点和计算节点上安装CentOS 7.2 ZStack社区版.
然后在下载了第8步中的 zstack-installer 之后,你可以通过下面方式快速完成离线安装:
bash zstack-installer-1.1.0.bin -o
具体的离线安装教程和CentOS 7.2 ZStack社区版请阅读: ZStack离线安装教程
10. 升级
一如既往的,我们支持一键无缝升级:
wget http://cdn.zstack.io/community/downloads/zstack/1.1/zstack-installer-1.1.0-rc1.bin -O zstack-installer-1.1.0.bin
bash zstack-installer-1.1.0.bin -u
多节点升级中的zstack.war 可以从如下链接获取: cdn.zstack.io/community/downloads/zstack/1.1/1.1.0/zstack.war
11. 用Flat Network Provider替换Virtual Router Provider
如果你的网络模式是扁平网络,并且使用的是Virtual Rotuer Provider作为网络提供商,你可以使用1.0的Flat Network Provider替换它,这样你就不再需要virtual router VM来充当DHCP服务器了。假定你要替换网络提供商的L3网络的UUID是1a82c2691978476fa6cefa36bb9d4bfd,参考以下步骤:
11.1 获得当前L3网络的网络提供商UUID
>>>QueryNetworkServiceL3NetworkRef l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd
{
"inventories": [
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
"networkServiceType": "DNS"
},
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
"networkServiceType": "DHCP"
}
],
"success": true
}
11.2 从L3网络上卸载Virtual Router Provider
>>>DetachNetworkServiceFromL3Network l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd networkServices='{"5d21ea0f39c04d6fb68cfaf5a37db4ad":["DHCP","DNS"]}'
{
"inventory": {
"createDate": "Jan 30, 2016 3:01:03 PM",
"dns": [
"8.8.8.8"
],
"ipRanges": [
{
"createDate": "Jan 30, 2016 3:01:04 PM",
"endIp": "192.168.201.199",
"gateway": "192.168.200.1",
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"lastOpDate": "Jan 30, 2016 3:01:04 PM",
"name": "ipr-dk7p",
"netmask": "255.255.252.0",
"startIp": "192.168.201.180",
"uuid": "ec5fd87dd80243fdabeeace847c04427"
}
],
"l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142",
"lastOpDate": "Jan 30, 2016 3:01:03 PM",
"name": "l3-etpz",
"networkServices": [],
"state": "Enabled",
"system": false,
"type": "L3BasicNetwork",
"uuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
},
"success": true
}
注意这里的参数networkServices是一个map, key是第一步里返回的networkServiceProviderUuid,value是第一步里返回的networkServiceType
11.3 获得Flat Netwok Provider的UUID
>>>QueryNetworkServiceProvider type=Flat
{
"inventories": [
{
"attachedL2NetworkUuids": [
"9ec8cad681d1424fa7eda2447edae142"
],
"createDate": "Jan 30, 2016 11:56:32 AM",
"description": "Flat Network Service Provider",
"lastOpDate": "Jan 30, 2016 11:56:32 AM",
"name": "Flat Network Service Provider",
"networkServiceTypes": [
"DHCP",
"Userdata"
],
"type": "Flat",
"uuid": "17864f985e584a9ba4cd81de215212ce"
}
],
"success": true
}
11.4 获得承载L3网络的L2网络的UUID
>>>QueryL3Network fields=l2NetworkUuid, uuid=1a82c2691978476fa6cefa36bb9d4bfd
{
"inventories": [
{
"l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142"
}
],
"success": true
}
11.5 加载Flat Network Provider到L2网络
>>>AttachNetworkServiceProviderToL2Network l2NetworkUuid=9ec8cad681d1424fa7eda2447edae142 networkServiceProviderUuid=17864f985e584a9ba4cd81de215212ce
{
"inventory": {
"attachedL2NetworkUuids": [
"9ec8cad681d1424fa7eda2447edae142"
],
"createDate": "Jan 30, 2016 11:56:32 AM",
"description": "Flat Network Service Provider",
"lastOpDate": "Jan 30, 2016 11:56:32 AM",
"name": "Flat Network Service Provider",
"networkServiceTypes": [
"DHCP",
"Userdata"
],
"type": "Flat",
"uuid": "17864f985e584a9ba4cd81de215212ce"
},
"success": true
}
11.6 加载Flat Network Provider的服务到三层网络
>>>AttachNetworkServiceToL3Network l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd networkServices='{"17864f985e584a9ba4cd81de215212ce":["DHCP","Userdata"]}'
{
"inventory": {
"createDate": "Jan 30, 2016 3:01:03 PM",
"dns": [
"8.8.8.8"
],
"ipRanges": [
{
"createDate": "Jan 30, 2016 3:01:04 PM",
"endIp": "192.168.201.199",
"gateway": "192.168.200.1",
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"lastOpDate": "Jan 30, 2016 3:01:04 PM",
"name": "ipr-dk7p",
"netmask": "255.255.252.0",
"startIp": "192.168.201.180",
"uuid": "ec5fd87dd80243fdabeeace847c04427"
}
],
"l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142",
"lastOpDate": "Jan 30, 2016 3:01:03 PM",
"name": "l3-etpz",
"networkServices": [
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "17864f985e584a9ba4cd81de215212ce",
"networkServiceType": "DHCP"
},
{
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"networkServiceProviderUuid": "17864f985e584a9ba4cd81de215212ce",
"networkServiceType": "Userdata"
}
],
"state": "Enabled",
"system": false,
"type": "L3BasicNetwork",
"uuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
},
"success": true
}
11.7 删除virtualroute, 删除virtual router offering
>>>QueryVirtualRouterVm
{
"inventories": [
{
"allVolumes": [
{
"createDate": "Jan 30, 2016 3:06:50 PM",
"description": "Root volume for VM[uuid:c5a966cb87d644649952daf683f89e26]",
"deviceId": 0,
"format": "qcow2",
"installPath": "/zstack_ps/rootVolumes/acct-36c27e8ff05c4780bf6d2fa65700f22e/vol-8eeaa9cb4c1045a2825f8815fed69d72/8eeaa9cb4c1045a2825f8815fed69d72.qcow2",
"lastOpDate": "Jan 30, 2016 3:06:59 PM",
"name": "ROOT-for-virtualRouter.l3.1a82c2691978476fa6cefa36bb9d4bfd",
"primaryStorageUuid": "4bff4e2d266f480ead596752d14ff3b5",
"rootImageUuid": "7bed05aa8ace4e5e8d6c55b284b66fb5",
"size": 467206656,
"state": "Enabled",
"status": "Ready",
"type": "Root",
"uuid": "8eeaa9cb4c1045a2825f8815fed69d72",
"vmInstanceUuid": "c5a966cb87d644649952daf683f89e26"
}
],
"allocatorStrategy": "LeastVmPreferredHostAllocatorStrategy",
"applianceVmType": "VirtualRouter",
"clusterUuid": "10409d3e33b249c19746022930a541c7",
"cpuNum": 1,
"cpuSpeed": 2,
"createDate": "Jan 30, 2016 3:06:50 PM",
"defaultRouteL3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"hostUuid": "415fa093b34e4a3d873368104b127115",
"hypervisorType": "KVM",
"imageUuid": "7bed05aa8ace4e5e8d6c55b284b66fb5",
"instanceOfferingUuid": "9cec7bd6324445a184351ffb7d32f970",
"lastHostUuid": "415fa093b34e4a3d873368104b127115",
"lastOpDate": "Jan 30, 2016 3:07:20 PM",
"managementNetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"memorySize": 536870912,
"name": "virtualRouter.l3.1a82c2691978476fa6cefa36bb9d4bfd",
"platform": "Linux",
"publicNetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"rootVolumeUuid": "8eeaa9cb4c1045a2825f8815fed69d72",
"state": "Running",
"status": "Connected",
"type": "ApplianceVm",
"uuid": "c5a966cb87d644649952daf683f89e26",
"vmNics": [
{
"createDate": "Jan 30, 2016 3:06:50 PM",
"deviceId": 0,
"gateway": "192.168.200.1",
"ip": "192.168.201.195",
"l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
"lastOpDate": "Jan 30, 2016 3:06:50 PM",
"mac": "fa:4c:01:68:77:00",
"metaData": "7",
"netmask": "255.255.252.0",
"uuid": "c44e856aa88a42bc85ec30ce8c334c6c",
"vmInstanceUuid": "c5a966cb87d644649952daf683f89e26"
}
],
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
}
],
"success": true
}
>>>DestroyVmInstance uuid=c5a966cb87d644649952daf683f89e26
{
"success": true
}
11.8 重连所有有VM运行的host
>>>QueryHost
{
"inventories": [
{
"availableCpuCapacity": 7180,
"availableMemoryCapacity": 1997570048,
"clusterUuid": "4282fb61aa55458ea160de138e130298",
"createDate": "Jan 30, 2016 2:51:13 PM",
"hypervisorType": "KVM",
"lastOpDate": "Jan 30, 2016 3:03:20 PM",
"managementIp": "192.168.200.187",
"name": "host1",
"state": "Enabled",
"status": "Connected",
"totalCpuCapacity": 7182,
"totalMemoryCapacity": 2098233344,
"username": "root",
"uuid": "402f8304a50c410486e023512492316b",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
},
{
"availableCpuCapacity": 14363,
"availableMemoryCapacity": 8321593344,
"clusterUuid": "10409d3e33b249c19746022930a541c7",
"createDate": "Jan 30, 2016 3:03:14 PM",
"hypervisorType": "KVM",
"lastOpDate": "Jan 30, 2016 3:03:52 PM",
"managementIp": "192.168.200.150",
"name": "host2",
"state": "Enabled",
"status": "Connected",
"totalCpuCapacity": 14364,
"totalMemoryCapacity": 8371924992,
"username": "root",
"uuid": "415fa093b34e4a3d873368104b127115",
"zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
}
],
"success": true
}
>>>ReconnectHost uuid=402f8304a50c410486e023512492316b
{
"success": true
}
>>>ReconnectHost uuid=415fa093b34e4a3d873368104b127115
{
"success": true
}
Please enable JavaScript to view the comments powered by Disqus.