dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2177
  • 铜币13448枚
  • 威望5905点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:2324回复:0

百万pv项目与虚拟化

楼主#
更多 发布于:2013-04-08 09:41
也谈架构:百万pv项目与虚拟化


一 说明
100万pv的项目网站,说大不大,说小又具备了一定规模,最近公司网站的xxx项目从物理机迁移到了VMware虚拟化平台,这里总结下该项目的网站架构,如有不妥之处还肯请老鸟多指点,新同学可以当作简单的参考资料!

二 项目架构介绍
2.1 公司xxx项目开始于2007年,目前日均pv 200万左右,峰值流量(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 )
 
四 成本对比
<strong>XXX项目     服务器数量  机位数量    耗电量 
     
物理机       13 台        14       约10安 
     
虚拟化       5  台         6       约4安</strong>

扩展
此文资料来自公司线上某项目,这里我们讨论了网站架构与虚拟化,如有不妥之处还肯请老鸟多指点,新同学可以当作简单的参考资料.

#
结束
更多请:
linux 系统运维  37275208
vmware 虚拟化  166682360
#
本文出自 “dongnan” 博客,请务必保留此出处http://dngood.blog.51cto.com/446195/764387
游客

返回顶部