也谈架构:百万pv项目与虚拟化
一 说明
100万pv的项目网站,说大不大,说小又具备了一定规模,最近公司网站的xxx项目从物理机迁移到了VMware虚拟化平台(ESXI),这里总结下该项目的网站架构,如有不妥之处还肯请老鸟多指点,新同学可以当作简单的参考资料!
二 项目架构介绍
2.1 公司xxx项目开始于2007年,目前日均pv 100万左右,峰值流量(BGP)60Mbit左右,haproxy 负载均衡器峰值并发4000左右,xxx项目共占用两个机柜 14u机位,共计13台 由12台Dell 1950 与 1台Dell 2950组成,
包括
1 台 CDN 源站服务器
1 台 haproxy 负载均衡器
4 台 iis web服务器
2 台 memcache 缓存服务器
2 台 lucene 检索服务器
1 台 SqlServer 主数据库服务器
2 台 SqlServer 从数据库服务器
2.2 网站架构
xxx项目逻辑上可以分为5层
1 CDN 层,为提高用户体验度,公司网站全部使用商用CDN来加速网站,cdn 源站服务器用于存储用户或者CMS发布的静态文件。
2 代理层,使用haproxy 反向代理IIS服务器,haproxy 拥有强大的负载均衡能力与健康检查功能,提供友好的监控页面。
3 应用层,IIS 服务器适用于.net ,同理如果你使用php|jsp 那么就要换成 apache|nginx|tomcat 等等。
4 缓存层,memcache lucene 都是为了减轻数据库压力而存在的。
5 数据库层, SqlServer 数据库由1主(写)2从(读)组成。
2.3 网站架构拓扑图
2.4 架构存在的问题
a CDN 源站单点问题,不考虑费用的情况下这个可以考虑双机HA,或者将 xxximg.xxx.com 合并到主站CDN源服务器
b haproxy 单点问题,这个已经通过haproxy + keepalived 方式解决
c 其实有些经验的朋友都能看出来,缓存层中无论是 memcache 还是 lucene 都是为了减轻数据库压力而存在的,目前数据库是1主(写)2从(读)在缓存层服务器的帮助下,负载并不高,不过一旦缓存服务器崩溃,数据压力立刻增加!
三 项目虚拟化
3.1 为什么要进行虚拟化?
1 xxx项目的服务器已经运行近5年原计划考虑升级服务器配置,或者更换新的服务器代替老旧的服务器,但是不能忽略成本这个重要的因素!
2 XXX机房目前中国IDC行业数一数二的角色,但是它的机柜资源非常紧张,以我们公司为例四个月前向其申请新的机柜,至今还在“排队”等待!
3 XXX机房限制机柜用电量,比如每机柜限制在6.8安,所以老旧服务器耗电量是一个问题!
4 集中管理与集中控制,可以使用Vmware Vcenter 集中管理Vmware ESXI 主机,举个例子:如果我要重启一台服务器只需要在Vcenter直接reboot ESXI主机即可,非常方便!
3.2 虚拟化后服务器数量
1 台 CDN 源站服务器(保持不变)
4 台 Vmware ESXI 服务器
3.3 虚拟机划分
- haproxy01 sql_master sql_slave01 sql_slave02
- iis01 iis02 iis03 iis04
- memcache01 memcache02 lucene01 lucene02
- haproxy02
- --------------------------------------------------------
- Esxi-1 Esxi-2 Esxi-3 Esxi-4
3.4 虚拟化注意事项
线上ESXI 服务器配置:
- Dell R610 1U
- cpu *2 XEON 5620
- mem 32GB
- disk *4 300G 10k sas
- perc 6i raid 10
线上虚拟机资源分配:
- haproxy 2 vcpu/2GB mem/30GB vdisk/ #耗网络(相对)
- iis 4vcpu/6GB mem/60GB vdisk/ #耗cpu+内存
- memcache 2vcpu/10GB mem/30GB vdisk/ #耗内存
- lucene 4vcpu/10GB mem/80GB vdisk/ #耗内存
- sqlserver 4vcpu/10GB mem/100GB vdisk/ #耗cpu+内存+IO
注意事项从四个方面考虑,包括
1. 处理器性能:为虚拟机分配资源要考虑服务器类型,不建议为虚拟机分配过多的vcpu"够用则好",否则将导致此虚拟机抢占资源太多,会影响同一宿主机上的其它虚拟机的正常共作 。
2. 内存容量:分配内存与分配cpu大致相同“够用则好”,不过不要忘记为ESXI主机预留一定内存用于ESXI自身开销,线上ESXI主机一般预留1GB至2GB内存。
3. I/O资源:结合实际i/o使用情况,建议一台ESXI主机虚拟机数量小于6个,以线上服务器为例,一般一台ESXI主机在3-4台虚拟机之间,当然这个不是绝对的,比如线上另一台mysql 从库服务器独享 ESXI主机全部资源。
4. 网络资源:由于几台虚拟机共享ESXI主机网络设备,所以高带宽高流量的服务要注意,可以将ESXI主机的某个网卡独享给每台虚拟机
最后我们可以看到 ,虚拟机部署是按照不同服务类型来分摊到每个一ESXI主机上的,而不是把全部的鸡蛋放在一个篮子里面,这样做的原因是如果服务器硬件造成的故障,线上服务影响到最小限度;其次,分析不同服务类型占用的资源不同再对虚拟机作出调整,比如 haproxy 很省资源,只分给其 2 vcpu/2GB mem/30GB vdisk/ 。
不适用于虚拟化
目前来讲,假如系统 负载/IO/cpu/内存/网络 等较小,都可以迁移至虚拟化平台,但是 IO/cpu/内存/网络 等等要求极高,
例如"繁忙"的数据库 或者本项目中的 cdn源站服务器(磁盘),虚拟化就需要三思而后行了,当然为了方便集中管理,可以将ESXI主机全部资源分给此虚拟机,此虚拟机独享ESXI全部资源 (VMware vsphere 5 )
四 成本对比
- XXX项目 服务器数量 机位数量 耗电量
- 物理机 13 台 14 约10安
- 虚拟化 5 台 6 约4安
结束
此文资料来自公司线上某项目,这里我们讨论了网站架构与虚拟化,如有不妥之处还肯请老鸟多指点,新同学可以当作简单的参考资料,如有疑问欢迎到此讨论(你懂得) 37275208!
本文转自 dongnan 51CTO博客,原文链接:http://blog.51cto.com/dngood/764387