云机:用友公有云平台虚拟机系统薛正华用友集团演讲人介绍薛正华,博士,副研究员,用友公有云技术总监。中国计算机学会高级会员,大数据专委会委员。近十年一直专注于大规模计算系统、并行计算和大数据工作。mail:xuezh@yonyou.com微博:、提纲用友公有云CSP概况云资源管理系统总体架构云机1、CSP定位为企业用户提供丰富的、可以灵活搭建的应用集合,让用户按需组建适合于自己的业务和管理系统;为开发伙伴(ISV)提供先进的技术支撑和强大的应用集成能力,让开发伙伴充分发挥自己的特长,获取商业价值;为第三方咨询顾问提供各种数据分析工具和基于知识件的解决方案设计工具,帮助他们为企业提供知识服务,让咨询顾问从专业服务中获取商业价值;CSP用户应用数据ISV(企业应用)企业用户第三方咨询顾问资源下一代企业计算YonyouSoftwareCorporationCSP平台框架CSP平台组织1、提纲CSP概况云资源管理总体架构云机云资源管理系统功能架构CSP概况云资源管理总体架构云机架构存储实战问题分享两个辅助系统常见的两种系统架构——计算存储松耦合常见的两种系统架构——计算存储紧耦合CSP云资源管理线上系统——云机—架构•大(高扩展):计算、存储分离,所有千台虚机的操作系统文件与物理服务器分离,均置于后台大容量存储中,通过高速网络实现物理机和存储的动态绑定。实现系统动态扩展(计算不够加计算,存储不够加存储)•快(高性能):双层负载均衡(双层:计算节点调度、映像存储系统调度及聚合读写)。•稳(高可用):利用分布式并行文件系统的高可用特性,解决虚机高可用问题;计算节点内部任何软硬件发生故障,能快速恢复(不需拷贝映像、可动态挂载)。单个存储节点的软硬件出现任何故障,保障虚机数据不丢,同时服务不断。•安全(隔离):通过企业级VLAN技术,实现管理系统、虚机业务系统、虚机与存储连接系统三网隔离,实现不同云主机租户间的业务隔离。•便宜(高性价):摒弃高端设备,采用廉价、稳定设备构建高性能、大型计算系统,支持大规模云计算资源,提供高质量IaaS服务。•简单(易用):用户使用界面干净、简单,系统运维方便快捷。CSP云资源管理线上系统——云机—目标及技术选型最大挑战:IO问题CSP云资源管理线上系统——云机—物理拓扑结构存储节点2VPN+DNS+YUM存储节点1内部云主机美国研发人员192.168.200.XVPN本地研发人员存储节点3存储节点...172.18.16.1/23外部云主机ControlTier+SVNVPN客户本地维护人员VPNVPNpuppet+cobblerNTP+LDAP监控服务器rsyslog+flumehadoop3台计算节点1计算节点2计算节点3172.18.16.1/23172.18.2.1/23172.18.2.1/23MYSQLMYSQL172.18.2.196172.18.2.1/23Dlink1024p100M管理卡总控服务器S5800S5500公司所有的内网IP可以直接访问虚拟机的对内业务IP公司需要通过VPN进行内部服务器IP访问PGSQLPGSQL内网监控服务器计算节点...计算节点4套网络•带外管理•带内管理•存储网•业务网CSP概况云资源管理总体架构云机架构存储实战问题分享两个辅助系统CSP云资源管理线上系统—云机—统一的文件、块、对象存储主要目的:一套存储满足多类需求,减少运维工作。GlusterFS可以做到:•文件存储:主要提供虚机的操作系统映像存储,虚机映像通过文件系统协议挂载到物理机上(前面已介绍)•块存储:利用Cinder,为虚机提供挂盘服务,虚机可以基于虚拟盘,格式化出满足需求的文件系统(ext3、xfs、ext4、ntfs等)•对象存储:基于Restful协议的存储服务CSP云资源管理线上系统—云机—大规模引发的IO问题映像存储服务:双层万兆级聚合带宽双层万兆网络聚合磁盘聚合(单节点12盘,每盘140MB左右)无元数据(Hash一致性算法)高性能30个千兆计算节点(测试环境),3000个并发进程同时写,带宽达到了3万Mbps可扩展加减盘,加减节点多磁盘聚合、多节点网络聚合能力(万兆)高可靠坏盘、坏节点服务不断CSP云资源管理线上系统—云机—多类型应用IO方案多应用类型IO问题•在性能、数据安全、容量损耗寻求平衡•根据应用特点提供映像存储模式•多种组合•文件系统(软Raid)•底层硬件(硬Raid)•Raid模式•磁盘分组CSP概况云资源管理总体架构云机架构存储实战问题分享两个辅助系统批量创建虚机出现部分失败问题描述:当并发创建100/200个vm时,会有大量的vm创建不成功,rpc抛出大量timeout原因分析:rpc的默认timeout以及pool_size都比较小,如解决办法1.相应增加pool_size的大小2.相应增加timeout的时间3.多个消息服务器达到效果:经过测试,相应增大上述参数,timeout及虚拟机创建不成功有明显改善(如pool_size=100,response_timeout=1200时并发创建100个均成功且没有timeout)CSP云资源管理线上系统—云机—大规模引发的批量创建问题一次少见的网络闪断,部分计算节点上的部分虚机OS出现ReadOnly为什么会ReadOnly:操作系统为了保护自身,避免损坏文件系统,采取措施:文件系统readonly为什么是部分计算节点(这些节点发生了什么状况)???更诡异的是,为什么同一节点上有些VM正常,有些不正常???通过分析计算节点以及存储节点日志信息猜测:出问题的虚机在网络故障时,正在写数据!CSP云资源管理线上系统—云机—文件系统readonly问题验证猜测:CSP云资源管理线上系统—云机—文件系统readonly问题1.断开一台存储网络,所有虚机正常运行(高可用机制),符合预期判断;2.断开客户端网络,虚机中,凡是有写操作或者创建/删除文件等元数据操作的,都会触发readonly;错误重现了!!!解决网络闪断方法:延长timeout时间网络在Timeout时间内恢复后,写操作继续,并不会退出出现Readonly后如何恢复???故障恢复办法:/etc/fstab文件内容改不了,因为ReadOnlymount-oremountrw/(无效)试图修复文件系统:fsck-text4-a/dev/mapper/app--node--v--o-root在虚机里面这么做非常危险!!!可能会导致文件系统损坏目前比较稳妥的办法是reboot,启动时系统会提示自动修复CSP云资源管理线上系统—云机—文件系统readonly问题Raid10-Raid5在线调整三部曲:第一次,磁盘猜错误删数据,找回数据完全恢复,时间00:00-16:30(最后一个虚机)第二次,失去挂载,恢复时间00:00-5:00(最后一个虚机)第三次,完全透明迁移,虚机无感知,恢复时间00:00-00:00CSP云资源管理线上系统—云机—文件系统-Raid在线迁移脑裂(splitbrain):互为备份的两份数据集不再同步数据,发生了数据不一致现象。文件系统不知道谁的数据是对的为什么会出现脑裂CSP云资源管理线上系统—云机—文件系统损坏VM1—VM8VM10—VM20VM1—VM8VM10—VM20VM1—VM8VM10—VM20C1:网络暂断,恢复后,发现数据不一致,我选了S1C2:网络恢复后,发现数据不一致我选了S2C1&&C2:我们共享卷V1共享存储卷V1计算节点C1存储节点S2计算节点C2存储节点S1脑裂(splitbrain)可能会引起一个严重问题:文件系统损坏!!!1.无法启动。于是把内核文件换掉CSP云资源管理线上系统—云机—文件损坏故障2.文件丢失。于是开始检查文件系统是否完整3.使用虚拟机文件挂载工具guestfs读取虚拟机文件:guestfish--ro-adisk2.qcow2发现根目录文件系统不全,文件出现了丢失。。。。CSP云资源管理线上系统—云机—文件损坏故障解决办法发现虚拟机无法启动了比对两个互备文件系统节点的数据,发现同一虚拟机映像文件在另外一个存储节点上的数据访问时间更新,把另外一个存储节点的数据映像文件拷贝出来,在测试环境上实验启动成功,数据经检验也是完整的。删除问题虚机映像,消除引起脑裂的文件把拷贝出来的正确的映像重新放到生产环境上,两存储节点的对应数据重新获得同步启动虚机,成功。vmshutdownbylibvirt某些计算节点上的某些虚拟机自动关机,查看日志:2013-08-1901:31:23.502+0000:shuttingdownqemu:terminatingonsignal15frompid12852PID12582isthelibvirtddaemon经过多次排查分析,是由于该虚拟机运行状态和nova数据库状态不一致,nova定时检查状态时发出错误的关机指令。nova运行机制分析:正常流程:CC发出关机指令给RMQ,nova-compute接收到该消息,通过RMQ发出关机指令并回复给CC,Compute收到更改DB状态的消息;nova-compute,修改DB里对应数据状态,改完后回复CC。在跟踪调式时发现,消息在10+秒内就会超时失效,可能由于前期数据迁移时,nova发出大量消息给消息中心,nova-api未能及时响应消息中心的消息,导致后续消息过期失效,导致很多虚拟机与nova数据状态不一致。处理方案:在DB里手工调整虚拟机状态为stopedshutoff,重新执行novastopinstance_id&&novastartinstance_id后,虚拟机正常运行,经观察该虚拟机未再发生shuttingdown。CSP云资源管理线上系统—云机—libvirt自动关机清除界面显示虚机状态为ERROR或BUILD的虚机1)简单情况novalist|grepERROR查找问题虚拟机列表novashowinstance_id查看问题虚拟机ssh到对应的计算节点,tail-f-n50/var/log/nova/compute.lognovadeleteinstance_id通常第一次执行后,compute.log报找不到虚拟机对应文件的错误,第二次执行只是提示在删除对应实例时虚拟机文件消失了,执行通过。Success!2)略微复杂:novadeleteinstance_id指令无效查日志:172.**.*.*novadeleteinstance_id报错,errorcode1libvirtclientsocketclosed.经分析,由于其中一台虚拟机instance_0000021edisk文件损坏,nova-compute定时updatestatus会检查disk文件qemu-imginfoxx/disk,如果文件损坏会导致qemu-imginfodiskI/Oerrorraiseerrorcode1.对于目前nova版本来看,nova/virt/libvirt/driver.py对磁盘损坏的异常并未捕获,直接抛出,导致nova-compute服务异常(errorcode1libvirtclientsocketclosed)。保障虚机恢复后,手工删除问题虚机的所在目录,重启Nova服务novadeleteinstance_id执行通过。CSP云资源管理线上系统—云机—UI与实际系统状态不一致现象:虚拟机无法登入正在运行的虚拟机无法登入新启动的虚拟机无法获取IP地址分析:由于该计算节点hostname修改,计算节点的nova-network认为自己是个新节点,重新为其中一个网桥br522分配了IP地址,而原有对应该网桥的虚拟机对应的数据未更新,计算节点上的dhcpserver指向br522之前的IP地址解决方案:手工修改DB的数据表fixed_ips中对应计算节点的信息,恢复原有hostname的数