这里为大家介绍有关集群及高可用的相关知识,并非深厚难懂的理论知识,只是对一些集群与高可用的内容作个普通,供初学者参考。 面对现在的信息化时代,信息资源的暴涨为终端客户带来了极大的方便:消息资源的获得、网上购物、娱乐等等。可想象一下,如果网络资源发生中断,一个小的或者不重要的网站来说,对公司没有影响力度的或者造成的损坏是低微的;但是对于像银行、淘宝、Google这类的企业来说,中断几分钟会造成多少的损失,(facebook曾因技术故障,导致数千万美元的损失)。故此,网络资源就必须保证高可用、高效性,甚至一些企业要求的可用性保证在1年到达99.999%,期间中断只限定在几分钟。
为了实现高可用性,从硬件设备冗余在到网络链路冗余再到服务进程之间冗余、负载; 实现高可用,负载是必须的;Windows下有NLB做集群负载,NLB可以实现数据库、邮件、Web负载、FTP等,我只弄过Web的负载至于具体如何实现的,大家自己Google查一下就知道了,很是简单。Linux下做负载的可是多的不可胜数、种类繁多,从文件系统群集、到软件群集等等,下面一一介绍:
文件系统群集,就是一种多台机器共同使用一个文件系统(可以想象同时使用一块磁盘),进行读写操作。目今为止,个人非常想要做有关gfs、hapood、ocfs这类的项目, Ocfs2(ocfs)群集系统这是oracle专有的系统,安装过oracle rac群集的势必多多少少都了解或知道。oracle linux使用的系统也是ocfs系统,该集群文件系统能冗余保护、 Oracle 数据库处于完全运转状态时进行主要的存储操作 — 无需停机即可添加、删除、甚至将磁盘组移到新的存储阵列、当添加或删除磁盘时,进行自动负载均衡和重新均衡; 这三种集群文件系统,其中Hadoop、Gfs做数据库挖掘、日志仓库、提供应用层的负载;ocfs2是oracle专用的,我用的最多是在oracle数据库方面,其他的暂且不知。 说过系统级别的负载集群,那么在说一下有关软件方面的集群(主要是linux方面的):linux集群除了使用文件集群系统做集群提供服务,软件主要或者常使用的有以下几种:F5、Lvs 、Nginx、Haproxy,他们最多的是提供Web网站做负载的,但是呢,也可以为数据库、一些应用程序做负载。 F5是通过硬件实现群集的,性能也是最好的,一台F5大概十几万;所谓物美价不廉。其次是Lvs又称Linux Virtual Server 即Linux虚拟服务器,在群集软件中性能最好。LVS是由章文嵩博士创立的,主要有VS/NAT、VS/TUN、VS/DR三种模式,其中NAT是最长用的,当然每个模式都有每个模式都有每个模式使用的条件,如果想要看详细的内容及配置,在其他文章写有详细的配置方法或者Google一下。说实话,我曾经做过LVS的小项目最后配置完后多了一台服务器,之后找相应文章发现在使用LVS+Keepalive做群集最好是在10台服务器以上,能发挥出最大的效果。 说到Nginx,有人就说:这不是提供网站服务么。对,但是也提供负载(其实apache也有提供负载的功能);Nginx的的配置不难而且提供的并发完全能满足小中型企业的日常需求的比Haproxy稍微差点(我不常使用Nginx做负载),如果配置得当提供的性能还是不错的。
Haproxy做负载,其实该负载和Nginx负载,他们都是基于3层协议(网络层,不像LVS基于底层,这也是LVS有性能好的原因吧)。最项目时,很多时候我都是考虑使用Haproxy+Keepalive或者Haproxy+heardbeat,网上有说,机器不多的时候,Haproxy做负载集群和LVS做负载集群的性能差不多而且出现的问题故障不是太多。 最后,再说一下后端的数据库高可用。数据库有mmsql、mysql、postgreSQL、oracle,这些是我熟悉的也是做项目时使用到的。其中,mmysql是我最初接触到的数据库,但是从来没有做过什么负载到目今为止,也没有做过负载;其次,mysql是最最常用的,它自己又群集而且配置简单(官方文档上说,很是消耗内存的)。一般常使用的,就是实现读写分离操作也就是主从关系,它的配置并不难。再次呢,Oracle的RAC,官方文档整整3大页。我从头看到尾就用了一上午,关于配置是很麻烦的,对于它的配置,可以见我的写的相关内容,而且我最最希望的是什么时候做做有关此类的项目。最后,PostgreSQL数据库这个数据库,是我进入公司后才接手的后期曾对它做了优化并提过采用群集解决cpu loading高的问题,但是到目今位置由于缺乏服务器也就采用其他方式了。
|