这里为大家介绍有关集群及高可用的相关知识,并非深厚难懂的理论知识,只是对一些集群与高可用的内容作个普通,供初学者参考。
面对现在的信息化时代,信息资源的暴涨为终端客户带来了极大的方便:消息资源的获得、网上购物、娱乐等等。可想象一下,如果网络资源发生中断,一个小的或者不重要的网站来说,对公司没有影响力度的或者造成的损坏是低微的;但是对于像银行、淘宝、Google这类的企业来说,中断几分钟会造成多少的损失,(facebook曾因技术故障,导致数千万美元的损失)。故此,网络资源就必须保证高可用、高效性,甚至一些企业要求的可用性保证在1年到达99.999%,期间中断只限定在几分钟。
为了实现高可用性,从硬件设备冗余在到网络链路冗余再到服务进程之间冗余、负载;
要实现高可用性,可想一下:如果使用一台机子提供服务,该机器出现任何的问题就达不到高可用了,那么就需要增加多台机器,让他们共同提供相同的服务任意台机器down掉了,都不影响;物理网络间除了使用双网卡链路,交换机也要实现互相冗余,这样就实现了服务的可用性,但是有没有到达高可用呢?所谓的高可用,不仅仅单单让其提供服务还有服务有高效性。怎样实现高效性,比如同样提供Web服务,linux所提供的服务就比Windows的iis提供服务的性能高、并发量大;在比如都使用Linux系统提供服务,使用Nignx提供的比apache提供的服务性能高、并发量大、资源消耗少;所以说,高效性的实现是要更具具体现实情况而采用不同的方法的,要求不高的公司有时只要实现负载,就满足需求就是达到高可用了,你总不可能要求公司给你弄台F5去实现负载吧(前提公司属于中小型)。当然,你也可以展示你的才能对系统进行优化(可能效果性不佳,比如3台机器实现负载足够用了你采用6台甚至更高,或者对磁盘块、内存占用大小调整,公司的领导恐怕并不认可);但是对于一个要求高的公司或者提供服务出现瓶颈,这个时刻,你的调整就会起很大的作用。至于怎么实现高可用,至于对系统、软件资源性能有很深的了解,才能做到一针见血。
实现高可用,负载是必须的;Windows下有NLB做集群负载,NLB可以实现数据库、邮件、Web负载、FTP等,我只弄过Web的负载至于具体如何实现的,大家自己Google查一下就知道了,很是简单。Linux下做负载的可是多的不可胜数、种类繁多,从文件系统群集、到软件群集等等,下面一一介绍:
文件系统群集,就是一种多台机器共同使用一个文件系统(可以想象同时使用一块磁盘),进行读写操作。目今为止,个人非常想要做有关gfs、hapood、ocfs这类的项目,
GFS是谷歌为了存储海量搜索数据而设计的专用文件系统,一个GFS集群由一个master和大量的chunkserver构成,并被许多客户(Client)访问。Master和 chunkserver通常是运行用户层服务进程的Linux机器。只要资源和可靠性允许,chunkserver和client可以运行在同一个机器 上。这里留个链接:http://en.wikipedia.org/wiki/File:GoogleFileSystemGFS.svg
Hadoop文件系统,是有Apache基金会开发的,简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。Yahoo!实验室构建的该群集到达了4000个节点。
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做负载集群的性能差不多而且出现的问题故障不是太多。
在简要说一下,Keepalive、Headbeat、corosync,这些只是进行节点的状态检测,在一定时间内如果发现某个节点出现问题能自动实现资源的切换,具有心跳线的功能。 如果大家想知道的话,可以查找相应的资源也可以在本人博客里面找相关的配置内容。
最后,再说一下后端的数据库高可用。数据库有mmsql、mysql、postgreSQL、oracle,这些是我熟悉的也是做项目时使用到的。其中,mmysql是我最初接触到的数据库,但是从来没有做过什么负载到目今为止,也没有做过负载;其次,mysql是最最常用的,它自己又群集而且配置简单(官方文档上说,很是消耗内存的)。一般常使用的,就是实现读写分离操作也就是主从关系,它的配置并不难。再次呢,Oracle的RAC,官方文档整整3大页。我从头看到尾就用了一上午,关于配置是很麻烦的,对于它的配置,可以见我的写的相关内容,而且我最最希望的是什么时候做做有关此类的项目。最后,Postgresql数据库这个数据库,是我进入公司后才接手的后期曾对它做了优化并提过采用群集解决cpu loading高的问题,但是到目今位置由于缺乏服务器也就采用其他方式了。