中小公司部署实施Linux集群网站经验

其实在许多小公司和小企业里,尤其是牵涉到电子商务和电子广告类的网站,他们的网站也要求作负载均衡高可用的Linux集群,但由于成本的制约,老板都会要求系统架构师设计的方案能够用最少的钱实现这个要求,作为系统架构师的我们,应该如何实现这个要求呢?

首先是机房的选择,如果公司有自己的机房那是最好不过的了;如果没有自己的机房,我建议大家放在BGP机房内托管,如果有选择的话,最好是选择带有硬件防火墙的机房,这样在安全方面也有保障;另外,我们如何选择服务器呢?在有了负载均衡高可用的集群环境后,我们完全可以自己组装服务器,这样在性价比上也是最高的。像IBM和DELL的品牌服务器,虽然质量有保障,但价格往往是老板不能够接受的。当然了,一切以稳定为前提和原则。

首先是负载均衡设备的选择。我们可以有二种选择,一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware 和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、 Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,小公司和小企业由于费用的问题,所以软件级别的负载均衡是第一选择。

至于负载均衡高可用架构,我首推是Nginx/HAProxy+Keepalived的架构,这时很多朋友就有疑问,说你为什么不选择基于 LVS+Keepalived的集群方案呢?这是因为我们部署的网站一般都会有动静分离、正则分发的需求,如果我们最前面选用 LVS+Keepliaved的架构,那么我们至少又要在中间加一层二级负载均衡的机器,这样比较耗机器,无形中也会增加整个网站的成本;另外,很多朋友都比较担心的一个问题,说Nginx/HAProxy+Keepalived的稳定性不如LVS+Keepalived,这个其实是误解;我们通过十几个项目的成功实施,再加上几年的观察期,发现这些软件级别的负载均衡器的稳定性确实很好,在高并发的情况下宕机的可能性微乎其微,而近段时间实施的一个商业网站,用的是HAProxy+Keepalived,在亿/日高并发流量的冲击下,HAProxy稳如磐石。LVS在性能方面是最好的,尤其是后面的节点 (如Web或MySQL数据库服务器)超过10台时,它的性能是最优异的。而小公司的并发和流量一般不是特别大,大概一天持续在100万/日之间,所以我这里也向大家推荐Nginx/HAProxy+Keepalived。

如果网站是放在IDC机房托管,而机房最前面也没有硬件防火墙防护时,这时候大家尽量做好流量监控的工作,我一般会在主 Nginx/HAProxy上安装MRTG+Nload软件来对流量进行监控,Nload可以对流量进行即时监控,它的安装也是很简单的,我们先安装好 RPMForege。RPMforge是Centos系统下的软件仓库,拥用4000多种的软件包,被Centos社区认为是最安全也是最稳定的一个软件仓库,地址为http://pkgs.repoforge.org/rmpforge-release。这个安装成功以后,我们可以通过命令yum -y install nload很轻松的安装nload。输入此命令后,nload软件会很直观的显示流量的即时状态,上半部分ncoming是进入网卡的流量,下半部分 Outgoing是从这块网卡出去的流量,每部分都有当前流量(Curr)、平均流量(Avg)、最小流量(Min)、最大流量(Max)、总流量 (Ttl)。由于此软件比较直观,我用它来取代之前的即时流量监控软件iptraf,Nload的工作界面如下所示:

 

 

许多对集群感兴趣的朋友经常问我,如果网站要部署负载均衡高可用的Linux集群方案,而公司又想用最节省成本的方式来实施的话,一般需要几台服务器呢?我的回答是四台,即2+2架构,最前面是二台Nginx/HAProxy+Keeplaived机器,后面是二台配置比较好的Web机器,MySQL数据库采用一主一从的方式,分别放在二台Web机器上,监控的Nagios部署在从Nginx/HAProxy机器上,流量监控我一般放主 Nginx/HAProxy,软件采用的是MRTG+Nload的方式,服务器之间的数据同步我采用的是rsync+inotify的方法,当然更多时候,我采用的是纯rsync方式,这样是避免网站有大文件发生改动的时候会产生频繁读盘的麻烦;当然了,如果大家的公司对文件服务器有更高要求的时候(比如图片类型的),我们可以考虑再增加二台服务器,做成DRBD+Heartbeat+NFS的方式;如果有海量文件需要存储的话,我们可以考虑用MFS,当然这样也是比较耗机器的。

像类似以上的小公司集群架构里,我们是如何解决session同步的问题呢?我们可以采用Nginx的ip_hash和HAProxy的 balance source机制,它们的原理比较类似,都会让某一客户机在相当长的一段时间内只访问固定的后端的某台真实的Web服务器,这样会话就会得以保持,我们在网站页面进行login的时候,就不会在二台Web服务器之间跳来跳去了,自然也不会出现登陆一次后网站又提醒你没有登陆,需要重新登陆的情况。

另外,小公司的Web服务器我们至少有二种选择:一种是Apache,另一种是Nginx,在流量和并发不大的环境下,我们完全可以选择 Apache作为我们的Web服务器,虽然它的抗并发能力不高,但它的稳定性是最好的,我的许多电子商务网站都是基于Apache;而大流量大并发的环境,我比较倾向于Nginx。

MySQL在这里我用的就是一主一从的设计,虽然很多朋友觉得这种设计比较简单,但事实证明,它也最稳定的。我的电子商务网站也是采用这种架构,几年下来,从没有因为数据库的故障发生过丢单现象,网站上线的前期阶段,我们可以通过PHP程序,把后台的查询功能的入口选择Slave机器,这样可以大大减少主数据库的压力;另外,从MySQL机器并非仅仅只起一个备份和备机的作用,我们完全通过PHP程序将后台的复杂查询转到从MySQL机器上。当然了,MySQL的主从复制状态监控也是非常重要的,我一般是通过Nagios和SHELL脚本双监控的方式。

如何能帮企业节约和省钱,这其实也是系统管理员/架构师的一项工作职责,希望大家在工作中能领悟到这点。

时间: 2024-09-20 11:54:23

中小公司部署实施Linux集群网站经验的相关文章

资深web开发程序员建站经验分享

web|web开发|建站|经验分享|程序员 我的历程:C - C++ - HTML - ASP - ASP.NET -JSP - PHP - XHTML(DIV+CSS) - 美工 设计工具:...(非web语言的不算了) - DreamWeaver + Editplus + Eclipse(JSP的时候) + ZEND(PHP时代) + PS(美工设计时代) 不知道有没有人和我类似现在做网站策划规划比较多点,主要在网站设计方面,讲究简为美的观点.现在写代码直接用EDITPLUS了,包括页面和C

5年奋斗历程 分享我的建站经验及创业经验

中介交易 SEO诊断 淘宝客 云主机 技术大厅 时间过得真快,转眼间毕业出来就快五年了,与网站结缘也差不多五年了.这五年当中确实有很多感慨,其中有惊喜.有失落.有激情也有迷惘.有时不敢想象这时间为什么过得这么快,以至于想起都害怕,怕什么?怕自己一无所成,怕虚度年华,怕达不到自己的理想境地.五年了- 虽然感觉没有什么收获,可我仍然还在坚持,因为我相信会有那么一天,我会成功,我会实现自己的理想! 现在说说我的创业历程吧,我是04年毕业的,出来工作最多也就一年多点,其余时间都在自己创业. 第一过程:销

我的建站经验:网站从无到有(二)

中介交易 SEO诊断 淘宝客 云主机 技术大厅 上一篇是讲的如何建立一个新站,有兴趣的朋友可以去我空间看看.这一篇讲述如何快速的提高网站的流量,如何对网站进行一些基本的SEO优化.我也是个新手,所以我只是把自己的一些建站经验写出来和大家分享,和大家共同探讨. 我的站上线也才1个半月的时间,到现在为止,最高ip为273,最低ip为39.在一些seo高手面前,是有些可笑,但对于一些刚刚入门的站长来说,可能一年都做不到300IP/天.做SEO可以对程序不了解,但是一定要懂基本的html,网站标题,网站

java-jasperreports-5.5.部署在linux上

问题描述 jasperreports-5.5.部署在linux上 Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:123) at net.sf.jasperreport

maven项目部署在linux上的jar包问题

问题描述 maven项目部署在linux上的jar包问题 昨天吧写好的程序部署在linux上准备测试.发现找不到hibernate3.0.6.jar 看后发现, 这个jar包是引用在本地磁盘上的一个jar包.如:G:xxxx/xxxx/xx/hibernateXX.jar ,但是maven的jar包也已经打包到lib下放到程序包的同级目录下.可能linux上没有盘符, 而maven里找jar包的是通过pom文件找jar包的.pom文件里面写的是G:xxxxxxx.hibernateXX.jar

如何将javaweb项目部署到linux下

以下是对将javaweb项目部署到linux下的方法进行了详细的分析介绍,需要的朋友可以过来参考下   一般都在windows下开发的,现在部署到linux下:1,将项目达成war包(用eclipse,项目右键-->Export-->选择war file) 2,将tomcat(用winSCP当然你也可以用secureCRT,用securCRT需要建立sftp(即上传文件的目录),用put tomcat命令)考到ilunx对应的目录下 3,然后将项目的war包放到tomcat的webapps目录

使用logback 写入日志,部署到linux服务器上后失败问题?

问题描述 使用logback 写入日志,部署到linux服务器上后失败问题? 使用logback 写入日志,在本地测试时可以的,部署到linux服务器上后,写入失败,连日志文件都没有生成,是怎么回事? 解决方案 是不是权限问题,能不能访问对应的目录等 解决方案二: 有可能是路径的问题,仔细看看linux上和windows上路径设置是不一样的

web服务部署到linux上后,文件上传路径如何修改呢?

问题描述 web服务部署到linux上后,文件上传路径如何修改呢? 在windows下开发的时候,我的文件上传保存路径为 d:/www/xx/,项目部署到linux上后,应该如何修改上传路径呢?如果不修改,我发现也可以上传,但是文件会上传到tomcat7/bin/目录中,给人感觉非常混乱.我希望能放在指定的文件夹中.谢谢! 解决方案 参考:http://www.enkj.com/help/newscontent/70983 你的路径用 /upload/xxx 就会根据你定义的目录相对路径找到 解

java web项目部署到Linux后访问WEB-INF/classes文件下一个文件的问题

问题描述 java web项目部署到Linux后访问WEB-INF/classes文件下一个文件的问题 java web项目部署到Linux服务器上,其中有一个模板下载的请求连接,模板文件就是放在src下面编译后放在classes文件夹下.现在问题是访问这个下载链接时,项目日志报异常了No such file or directory.是不是我这个java应用没有访问这个文件的权限呢?怎么才能让它能访问呢? 解决方案 No such file or directory 有记录具体的路径信息吗?文