热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧。在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案。那

 

随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧。在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案。

那么如何实施linux集群架构,才能既有效保证网站健康运行,又能节省运维成本呢?
下面依据近几年的运维经历,简单梳理下自己的一点感悟。

(1)
机房的选择
如果有自己公司的机房那是再好不过的了;如果没有,建议放在BGP机房内托管,如果有选择的话,最好是选择带有硬件防火墙的机房,这样在安全方面也有保障;
网站如若是放在IDC机房托管,而机房最前面也没有硬件防火墙防护时,要尽量做好流量监控的工作(尤其是nginx/haproxy负载机的流量),一般选用zabbix/cacti监控软件.
服务器的选择
一切以稳定为前提和原则,在价格能得到公司接受的情况下,可以选择像IBM和DELL的品牌服务器,质量有保障。
在服务器资源紧张的情况下,可以部署openstack虚拟化(kvm),虚拟机可以充当test机器,beta机器以及对内业务部署机,充分利用机器资源。

(2)负载均衡+高可用集群方案的选择
负载均衡实施
一种是通过硬件来实施
常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,优点是有专业团队来维护,缺点是花销太大,对于网络规模较小的企业网站来说没有必要;
一种是通过开源免费负载均衡软件策略实施
常用的是LVS、HAProxy、Nginx负载均衡,这些都是通过软件级别来实现,费用非常低廉,对于中小企业来说,鉴于成本问题,选择这一种比较靠谱。

高可用实施
首推是Nginx/HAProxy+Keepalived的架构,那么为什么不选择基于LVS+Keepalived的集群方案呢?
因为我们部署的网站一般都会涉及到动静分离、正则分发的需求,如果网站最前面选用LVS+Keepliaved架构,那么至少又要在中间加一层二级负载均衡的机器,这样比较耗机器,无形中也会增加整个网站的成本;

有人会认为Nginx/HAProxy+Keepalived的稳定性不如LVS+Keepalived,其实这是个误解!
通过近几年的观察期,加上十几个项目的成功实施,发现Nginx/HAProxy+Keepalived的负载均衡器的稳定性很好,尤其是Haproxy+keepalive在高并发的情况下宕机可能性微乎其微。
一个朋友的公司在近段时间实施的一个商业网站用的是HAProxy+Keepalived,在亿/日高并发流量的冲击下,HAProxy稳如磐石。
LVS在性能方面是公认最好的,尤其是后面的节点(如Web或MySQL数据库服务器)超过10台时,它的性能是最优异的。
中小公司的并发和流量一般不是特别大,每日pv持续在百万之内的,推荐使用Nginx/HAProxy+Keepalived。

负载均衡+高可用方案在节省成本的提前下,一般需要多少台服务器?
一般来说,中小网站采用2+2+2架构即可。最前面是2台Nginx/HAProxy+Keeplaived机器,后面是2台配置比较好的web机器;数据库2台,一主一从方式。

服务器之间的数据同步采用rsync+inotify实时同步方案。如果时效性不是那么高,可以采用纯rsync方式,结合crontab进行定时同步。

如果对文件服务器有更高要求比如图片类型,可以考虑再增加2台服务器,做成DRBD+Heartbeat+NFS方式;
如果有海量文件需要存储的话,还可以考虑用MFS,当然这样也是比较耗机器的。

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

如果是大型项目或网站可以考虑用memcached的方式。

session共享问题可以参考:http://www.cnblogs.com/kevingrace/p/6031356.html

(4)web服务选择Apache or Nginx
在网站流量和并发不大的环境下,完全可以选择Apache作为Web服务,虽然它的抗并发能力不高,但它的稳定性是最好的,许多电子商务网站都是基于Apache;
如果网站是大流量大并发的环境下,强烈推荐Nginx作为web服务。

(5)数据库方案:Master-Slave
中小型企业网站,Mysql数据库采用一主一从方案即可满足业务需求,然后看起来比较单一,但是事实证明,这种设计的稳定性也是非常靠谱的!
经验证,采用mysql一主一从方案好多年的网站,很少没有因为数据库的故障发生过丢数据现象。
网站上线的前期阶段,可以通过PHP程序,把后台的查询功能的入口选择Slave机器,这样可以大大减少主数据库的压力;
Slave机器并非仅仅只起一个备份和备机的作用,完全可以通过Php程序将后台的复杂查询转到从MySQL机器上。

 


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
author-avatar
mobiledu2502927067
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有