标签:haproxy mysql 架构 couchbase fastdfs
目录
2.4.1 LVS+KEEPLIVED+SQUID+HAPROXY+JBOSS集群...5
当前一种先进实用的架构设计
李万鸿
对用JAVA开发的项目来说,根据“成熟稳定、先进科学、实用可靠“的原则,可以使用这样一种架构,采用多个集群来保证系统的高性能、高可靠性、伸缩性、可维护性和安全的需要,服务器可以线性扩展,使用开源免费软件和廉价服务器,提供极高的性价比。
系统应用架构采用门户、应用系统、业务逻辑和基础资源4层。
1. 开发语言、工具:JAVA 、eclipse。
2. 技术架构采用STRUTS2+SPRING3+HIBERNATE3。
3. 采用自动测试工具进行严格测试,保证代码质量,如:QTP、ROBERT、LOADRUNNER等。
4. 软件环境:maven、SVN(git)、jetty,JDK6。
5. 硬件环境:cpu:P3 2.8GHZ以上 Memory:3G以上。
硬件环境:
服务器端: 推荐配置为16G内存以上,CPU为2.8GHZ以上配置,硬盘容量为500G以上的服务器。
通信网络: 网络协议为HTTP、TCP/IP。
软件环境:
服务器端:
? 数据库服务器:mysql5.6。
? Web服务器:jboss7
? 服务器采用华硕服务器。
? 服务器操作系统: linuxcentos6.5.
? 浏览器:Internet Explore8.0或以上版本、360浏览器6及以上版本。
? NAS存储,42T,RAID5,用于存储数据。
屏幕分辨率推荐为:1024*768或以上。
1) Lvs+keepalived-1.2.8 ,2台集群做互联网访问的入口。
2) Squid3.3用2台集群进行页面缓存。
3) HAPROXY1.4+keepalived-1.2.8用3台集群进行WEB服务器负载均衡和动静分离。
4) jboss服务器进行3台集群,每台硬盘500G。
5) mysql数据库用haproxy进行4台主从集群和负载均衡。
6) 用2台couchbase2集群进行数据缓存。
7) 用2台fastdfs3集群存储图片。
8) 用1台Lucene4.7搜索服务器。
9) 用4台activeMQ集群传递消息。
10)ngios3.5监控服务器,发生异常时可发邮件和短信。
这个架构先进实用,消除了数据库I/O瓶颈,大大提升了性能,而且支持服务器线性扩展,具有极强的伸缩性,可以支持7X24每分钟数万至数十万的访问量。具体配置可以根据需要灵活处理。
用LVS+KEEPLIVED双机通过一个VIP(vitual IP)对对个squid缓存服务器进行负载均衡,Squid缓存服务器通过haproxy为jboss服务器进行缓存,haproxy+keeplived双机对jboss服务器集群进行负载均衡调度。
MySQL支持双主的设置,即两个MySQL节点互为主备,不过虽然理论上,双主只要数据不冲突就可以工作的很好,但实际情况中还是很容发生数据冲突的,比如在同步完成之前,双方都修改同一条记录。因此在实际中,最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的,因为这样做之后,切换主备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接切换主备会很容易。
双主在设置时,只需将上面的一段设置复制一份,分别写入两个MySQL节点的配置文件,但要修改相应的server-id,auto-increment-offset和master-host。auto-increment-offset就是为了让双主同时在一张表中进行添加操作时不会出现id冲突,所以在两个节点上auto-increment-offset设置为不同的值就好。 在两个节点上都为对方创建用户。
Mysql用2主多从,提供高性能服务,主数据库提供对数据库的写操作,从数据库进行读操作,实现了读写分离和数据库备份。从数据库可线性扩展。
用haproxy+keeplived双机对slave数据库进行负载均衡,提供对数据库的读操作。
Fastdfs集群保存图片等文件,可动态线性扩展。
通过master-slave+network breokers方式建立activeMQ消息集群,支持负载均衡,同时又保证消息的可靠性。采用消息集群可以在系统之间或系统内进行消息传递,实现分布式异步通讯。
负载均衡器(调度器)是一种采用各种分配算法把网络请求分散到一个服务器集群中的可用服务器上去,通过管理进入的Web数据流量和增加有效的网络带宽,从而使网络访问者获得尽可能最佳的联网体验的硬件设备。
1、负载均衡器的工作层次:
1)工作于tcp/udp层实现底层协议的负载均衡,请求在内核中实现转发;
2)工作于应用层,支持特定的应用协议实现应用层的负载均衡,请求在用户空间中。
工作于tcp/udp层的性能要比工作于应用层的负载均衡器的好得多,若请求数量没超过应用层负载均衡器的容量,应使用应用层的负载均衡器,它能直接于前端更好的解决请求。
2、http/https协议层的负载均衡器
2) 应用层:apache,nginx,haproxy,lighttpd,varnish,squid
3、mysql协议层的负载均衡器
1)tcp/udp层:lvs
2)应用层:haproxy,数据库专用连接池能实现读写分离。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层。
HAProxy提供高可用性、负载均衡、动静分离以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。Haproxy比nginx性能更好。
MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MariaDB是mysql原开发团队的杰作,google公司已转为使用MariaDB。
Mysql成熟实用,稳定可靠,已在业界得到广泛的使用,mysql的性能比postgre优异,通过实际测试,可以看到mysql比postgre更强。
Mysql提供主从复制功能,主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器。在主从服务器上分开处理用户的请求,读的话,可以直接读取备机数据,可获得更短的响应时间。用从服务器做数据备份而不会占用主服务器的系统资源。采用haproxy对从数据库进行负载均衡,提供高性能的读操作。
实践证明,mysql-proxy,amoeba,master-master-manage、mysqlcluster的性能不稳定,不建议使用。
Memcache基本上已经是开发的标配了,但是对于Memcache集群,很多线上部署仍然是很单薄的。
几个存在的问题:不健壮、数据不安全、配置变更可能导致存取异常、后备数据的一致性。鉴于存在以上问题,Memcache的开发团队开发了Membase,支持多台服务器集群,数据的切片和复制,有效的提高了服务稳定性和数据的安全性,并且支持数据的持久存储。代码的稳定性不够好,在部分线上业务上使用了Membase,后来因为几次莫名的存取操作缓慢,只能又撤销回到Memcache。之后,Membase团队与CouchDB团队合并,推出二合一的产品: Couchbase。
Couchbase的最大特点:
1,完全继承Memcache,原生支持所有Memcache操作;
2,继承了Membase的特性,支持集群和数据持久化及线性扩展;
3,继承了CouchDB的文档性质,支持通过View对数据进行操作。这个View的特性,提供了以往memcache所不具备的便利性,但是同Mongodb相比又很简单原始,感觉不是一种普遍需求的功能。编程使用couchbase和使用memcached一样。
Couchbase比redis做缓存更好,redis一旦重启,速度非常慢,10G数据需要半个小时。
Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行。
Squid是一个缓存internet数据的一个软件,可缓存html页面和图片等,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。
Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面。ActiveMQ的集群方式主要由两种:Master-Slave和BrokerCluster。
总之,这是一个先进实用的架构,采用了haproxy、lvs、keeplived进行负载均衡,使用couchbase、squid进行缓存,使用mysql数据库主从方式,使用lucene搜索,使用activeMQ传递消息等技术,他们的配置要进行优化,提供了HA、HP的服务性能,能满足大多数项目的实际需要,值得采纳。
本文借鉴了网上的文章,在此表示感谢,愿和大家一起在探索科学架构的征途上留下闪光的脚印!
2014-06-28
标签:haproxy mysql 架构 couchbase fastdfs
原文地址:http://blog.csdn.net/buddha17/article/details/35550895