数据库集群原理
Ⅰ 数据库中的集群和F5
分布式数据库系统分布式数据库系统有两种:一种是物理上分布的,但逻辑上却是集中的。这种分布式数据库只适宜用途比较单一的、不大的单位或部门。另一种分布式数据库系统在物理上和逻辑上都是分布的,也就是所谓联邦式分布数据库系统。由于组成联邦的各个子数据库系统是相对“自治”的,这种系统可以容纳多种不同用途的、差异较大的数据库,比较适宜于大范围内数据库的集成。
----- ----
分布式数据库系统(DDBS)包含分布式数据库管理系统(DDBMS)和分布式数据库(DDB)。在分布式数据库系统中,一个应用程序可以对数据库进行透明操作,数据库中的数据分别在不同的局部数据库中存储、由不同的 DBMS进行管理、在不同的机器上运行、由不同的操作系统支持、被不同的通信网络连接在一起。
一个分布式数据库在逻辑上是一个统一的整体,在物理上则是分别存储在不同的物理节点上。一个应用程序通过网络的连接可以访问分布在不同地理位置的数据库。它的分布性表现在数据库中的数据不是存储在同一场地。 更确切地讲,不存储在同一计算机的存储设备上。 这就是与集中式数据库的区别。从用户的角度看,一个分布式数据库系统在逻辑上和集中式数据库系统一样,用户可以在任何一个场地执行全局应用。就好那些数据是存储在同一台计算机上,有单个数据库管理系统(DBMS)管理一样,用户并没有什么感觉不一样。
分布式数据库系统是在集中式数据库系统的基础上发展起来的,是计算机技术和网络技术结合的产物。分布式数据库系统适合于单位分散的部门,允许各个部门将其常用的数据存储在本地,实施就地存放本地使用,从而提高响应速度,降低通信费用。分布式数据库系统与集中式数据库系统相比具有可扩展性,通过增加适当的数据冗余,提高系统的可靠性。在集中式数据库中,尽量减少冗余度是系统目标之一.其原因是,冗余数据浪费存储空间,而且容易造成各副本之间的不一致性.而为了保证数据的一致性,系统要付出一定的维护代价.减少冗余度的目标是用数据共享来达到的。而在分布式数据库中却希望增加冗余数据,在不同的场地存储同一数据的多个副本,其原因是:①.提高系统的可靠性、可用性当某一场地出现故障时,系统可以对另一场地上的相同副本进行操作,不会因一处故障而造成整个系统的瘫痪。②.提高系统性能系统可以根据距离选择离用户最近的数据副本进行操作,减少通信代价,改善整个系统的性能。
分布式数据库具有以下几个特点:
(1)、数据独立性与位置透明性。数据独立性是数据库方法追求的主要目标之一,分布透明性指用户不必关心数据的逻辑分区,不必关心数据物理位置分布的细节,也不必关心重复副本(冗余数据)的一致性问题,同时也不必关心局部场地上数据库支持哪种数据模型.分布透明性的优点是很明显的.有了分布透明性,用户的应用程序书写起来就如同数据没有分布一样.当数据从一个场地移到另一个场地时不必改写应用程序.当增加某些数据的重复副本时也不必改写应用程序.数据分布的信息由系统存储在数据字典中.用户对非本地数据的访问请求由系统根据数据字典予以解释、转换、传送.
(2)、集中和节点自治相结合。数据库是用户共享的资源.在集中式数据库中,为了保证数据库的安全性和完整性,对共享数据库的控制是集中的,并设有DBA负责监督和维护系统的正常运行.在分布式数据库中,数据的共享有两个层次:一是局部共享,即在局部数据库中存储局部场地上各用户的共享数据.这些数据是本场地用户常用的.二是全局共享,即在分布式数据库的各个场地也存储可供网中其它场地的用户共享的数据,支持系统中的全局应用.因此,相应的控制结构也具有两个层次:集中和自治.分布式数据库系统常常采用集中和自治相结合的控制结构,各局部的DBMS可以独立地管理局部数据库,具有自治的功能.同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。当然,不同的系统集中和自治的程度不尽相同.有些系统高度自治,连全局应用事务的协调也由局部DBMS、局部DBA共同承担而不要集中控制,不设全局DBA,有些系统则集中控制程度较高,场地自治功能较弱。
(3)、支持全局数据库的一致性和和可恢复性。分布式数据库中各局部数据库应满足集中式数据库的一致性、可串行性和可恢复性。除此以外还应保证数据库的全局一致性、并行操作的可串行性和系统的全局可恢复性。这是因为全局应用要涉及两个以上结点的数据.因此在分布式数据库系统中一个业务可能由不同场地上的 多个操作组成.例如, 银行转帐业务包括两个结点上的更新操作。这样,当其中某一个结点出现故障操作失败后如何使全局业务滚回呢?如何使另一个结点撤销已执行的操作(若操作已完成或完成一部分)或者不必再执行业务的其它操作(若操作尚没执行)?这些技术要比集中式数据库复杂和困难得多,分布式数据库系统必须解决这些问题.
(4)、复制透明性。用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成。在分布式数据库系统中,可以把一个场地的数据复制到其他场地存放,应用程序可以使用复制到本地的数据在本地完成分布式操作,避免通过网络传输数据,提高了系统的运行和查询效率。但是对于复制数据的更新操作,就要涉及到对所有复制数据的更新。
(5)、易于扩展性。在大多数网络环境中,单个数据库服务器最终会不满足使用。如果服务器软件支持透明的水平扩展,那么就可以增加多个服务器来进一步分布数据和分担处理任务。
分布式数据库的优点:
(1)具有灵活的体系结构 。
(2)适应分布式的管理和控制机构。
(3)经济性能优越 。
(4)系统的可靠性高、可用性好 。
(5)局部应用的响应速度快。
(6)可扩展性好,易于集成现有系统。
分布式数据库的缺点:
(1)系统开销大,主要花在通信部分。
(2)复杂的存取结构,原来在集中式系统中有效存取数据的技术,在分成式系统中都不再适用。
(3)数据的安全生和保密性较难处理。
分布式数据库系统的目标
分布式数据库系统的目标,也就是研制分布式数据库系统的目的、动机,主要包括技术和组织两方面的目标.
1.适应部门分布的组织结构,降低费用。
使用数据库的单位在组织上常常是分布的(如分为部门、科室、车间等等),在地理上也是分布的.分布式数据库系统的结构符合部门分布的组织结构,允许各个部门对自己常用的数据存储在本地,在本地录入、查询、维护,实行局部控制.由于计算机资源靠近用户,因而可以降低通信代价,提高响应速度,使这些部门使用数据库更方便更经济。
2.提高系统的可靠性和可用性。
改善系统的可靠性和可用性是分布式数据库的主要目标.将数据分布于多个场地,并增加适当的冗余度可以提供更好的可靠性.一些可靠性要求较高的系统,这一点尤其重要.因为一个地出了故障不会引起整个系统崩溃.因为故障场地的用户可以通过其它场地进入系统.而其它场地的用户可以由系统自动选择存取路径,避开故障场地,利用其它数据副本执行操作,不影响业务的正常运行.
3.充分利用数据库资源,提高现有集中式数据库的利用率
当在一个大企业或大部门中已建成了若干个数据库之后,为了利用相互的资源,为了开发全局应用,就要研制分布式数据库系统.这种情况可称为自底向上的建立分布式系统.这种方法虽然也要对各现存的局部数据库系统做某些改动、重构,但比起把这些数据库集中起来重建一个集中式数据库,则无论从经济上还是从组织上考虑,分布式数据库均是较好的选择.
4.逐步扩展处理能力和系统规模
当一个单位规模扩大要增加新的部门(如银行系统增加新的分行,工厂增加新的科室、车间)时,分布式数据库系统的结构为扩展系统的处理能力提供了较好的途径:在分布式数据库系统中增加一个新的结点.这样做比在集中式系统中扩大系统规模要方便、灵活、经济得多。
在集中式系统中为了扩大规模常用的方法有两种:一种是在开始设计时留有较大的余地.这容易造成浪费,而且由于预测困难,设计结果仍可能不适应情况的变化.另一种方法是系统升级,这会影响现有应用的正常运行.并且当升级涉及不兼容的硬件或系统软件有了重大修改而要相应地修改已开发的应用软件时,升级的代价就十分昂贵而常常使得升级的方法不可行.分布式数据库系统能方便地把一个新的结点纳入系统,不影响现有系统的结构和系统的正常运行,提供了逐渐扩展系统能力的较好途径,有时甚至是唯一的途径。
①数据库系统与应用 赵致格编着 清华大学出版社p. 260
②数据库原理及应用 张晋连 编着 电子工业出版社P.13
Ⅱ 数据库集群的应用
一.基于实时数据同步技术
基于此技术构造的数据库集群是市场上的新兴力量,它又具有两类,分别是:
a.具有独立网关
下面以DBTwin为例来说明其技术特点。
DBTwin采用了冗余设计原理,对于来自客户端的请求,请求被分成两类:查询请求和数据更新请求。对于数据更新请求,集群内部各节点之间保持数据的实时同步一致;对于数据的查询请求,则可以在集群各节点之间负载均衡执行。它的特点是:
a) 负载均衡的单元是客户端的每个独立请求,这点除了Oracle RAC集群,是市场上独有的。
b) 实时冗余一致的多份数据,从理论上讲实现了数据的零丢失。
c) 由于可以做到数据零丢失,因此在系统发生任意故障条件下,可蔽漏昌以做到系统的对外服务不停止。
d) 此系统使用了专用高速数据同步技术,根据测试,数据同步速度能sql Server的镜像相等。
e) 此系统的缺点是数据同步需要花费代价,节点数量受到限制,一般2到4个节点为宜。
f) 此系统从宏观上提升了整个系统的性能。
b.将调度节点集成于数据库引擎
下面以Moebius来说明其技术特点。
任何在数据库和应用程序之间引入的中间件都同时引入了单点故障点,如果中间件(网关)出现了故障,则数据库集群就会形同虚设。因此Moebius在集群中的每个节点上都存在于嵌入于数据库引擎的分发代理,当前负责调度的分发代理出现故障时,分发代理会故障转移到集群中的其他节点,从而避免了使用网关架构所引入的单点故障点,除此之外,该类产品的特点是:
a) 负载均衡是基于每个客户端的独立请求,默认规则是将查询优先分发到集群中负载低的服务器,也可以自定义规则,将某些特定业务分发到集群中的某一台,比如将报表相关的查询分发给集群中的特定服务器。
b) 采用Share-Nothing架构,对数据进行冗余,从而保证了数据的安全性
c) 数据库同步机制采用日志Redo的方式,在日志同步之前对日志进行压缩,保证了同步效率
d) 在集群中任意节点出现故障时,会被自动剥离出节点,由剩余运行正常的节点继续提供服务,从而保证了最小停机时间
e) 负载均衡集群从宏观上提高了吞吐量和性能
f) 该类集群不需要特殊的存储设备,可以使用廉价的本地存储,但由于数据冗余,因此相较于Share-Disk架构而言,需要更多的存储空间
c.没有独立网关
当前市场上也存在下列一种基于数据实时同步的集群,其拓扑结构如下图所示:
此系统由于没有独立的集群网关,因此本质上简化成了数据库的实时备份系统,与实际的备份系统不同的是,它是工作在数据库应用层。此系统的特点:
a) 没有独立的集群网关,通过主节点的转发来实行查询的负载均衡。在系统压力大的情况下,集群主机会形成性能瓶颈,无论是CPU、内存还是网络带宽,也可能是OS等系统内核资源,都容易因到达临界状态而形成瓶颈。
b) 各节点数据实时一致,对于数据容错有利。
c) 对客户端没有二进制透明。
d) 负载均衡单元是数据库连接。也就是说,在客户端登陆数据库的时候,静态地指定连接到某个集群节点,此后此连接上的全部请求一律发送到该数据库上,因此在特殊情况下,可能会出现这样的场景:所有客户端的连接集中在集群主机上,这时候,集群主机不但承担了客户端的所宏扒有查询,还需要实时同步数据到所有的集群从机,即集群主机的CPU为100%,而集群别的节点CPU可能为0%,这样整个系统的性能会受到严重影响。
e) 由于使用的是分布式事务机制(MSDTC)确保数据的实时一致性,搜搭因此数据同步的性能比较慢,根据测试,会比SQL Server镜像慢好几倍。
f) 同样地,此集群的节点数量也受到限制,也是以2到4个节点为宜。
Ⅲ 什么是MySQL集群带你全面掌握MySQL集群原理
如果Master收桥瞎到所有 Slave的OK消息,它就会向所有Slave发送提交消息,告诉Slave提交该事务;
如果Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;
如果Slave收到取消请求,它们就会撤销所有改变并释放所占有的资源,从而中止事务,然后向Masterv送敏吵空事务已中止的确认。
随着计算机和信息技术的迅猛发展和普及,行业应用系统的规模迅速扩大,行业应用所产生的数据量量呈爆炸式增长,类似于MySQL集群这样的技术得到了广泛的运用,MySQL集群原理的运用就显得尤其重要。
动力节点的MySQL集群教程 ,对于MySQL集群技术的应用场景有着详细的介绍,能够有效帮助我们学以致用, 教程主要从MySQL集群架构解析到架构部署再到集群架构测试,一步步带你部署企业级的MySQL数据库集群项目,熟悉各个环节技术点,提升数据库架构设计能力。
https://www.bilibili.com/video/BV1Rg4y1i7VR
http://www.bjpowernode.com/?toutiao
•001.MySQL集群视频教程:主从复制介绍
•002.MySQL集群视频教程:主从复制结构
•003.MySQL集群视频教程:主从复制流程原碰败理
•004.MySQL集群视频教程:多实例安装
•005.MySQL集群视频教程:多实例链接
•006.MySQL集群视频教程:一主多从-配置
•007.MySQL集群视频教程:-一主多从测试
•008.MySQL集群视频教程:双主双从配置
•009.MySQL集群视频教程:双主双从测试
•010.MySQL集群视频教程:多数据源-环境搭建
•011.MySQL集群视频教程:多算数据源实现
•012.MySQL集群视频教程:修复MySLQ主从复制
•013.MySQL集群视频教程:多数据源的问题
•014.MySQL集群视频教程:动态数据源
•015.MySQL集群视频教程:动态数据源执行流程
•016.MySQL集群视频教程:SpringBoot集成多数据源
•017.MySQL集群视频教程:SpringBoot集成多数据源问题
•018.MySQL集群视频教程:SpringBoot集成动态数据源
Ⅳ 如何保证数据库集群中id的唯一性,假设每秒钟并发20万次
用雪花算法的工具类,1秒内可以生成26万不重复的值,数据库的主键不要自增,手动设置
java">packageentity;
importjava.lang.management.ManagementFactory;
importjava.net.InetAddress;
importjava.net.NetworkInterface;
/**
*<p>名称:IdWorker.java</p>
*<p>描述:分布式自增长ID</p>
*<pre>
*Twitter的SnowflakeJAVA实现方案
*</pre>
*核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:
*1||0------00000---00000---000000000000
*在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,
*然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),
*然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。
*这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),
*并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。
*<p>
*64位ID(42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
*
*@authorPolim
*/
publicclassIdWorker{
//时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动)
privatefinalstaticlongtwepoch=1288834974657L;
//机器标识位数
=5L;
//数据中心标识位数
=5L;
//机器ID最大值
=-1L^(-1L<<workerIdBits);
//数据中心ID最大值
=-1L^(-1L<<datacenterIdBits);
//毫秒内自增位
=12L;
//机器ID偏左移12位
=sequenceBits;
//数据中心ID左移17位
=sequenceBits+workerIdBits;
//时间毫秒左移22位
=sequenceBits+workerIdBits+datacenterIdBits;
=-1L^(-1L<<sequenceBits);
/*上次生产id时间戳*/
=-1L;
//0,并发控制
privatelongsequence=0L;
privatefinallongworkerId;
//数据标识id部分
privatefinallongdatacenterId;
publicIdWorker(){
this.datacenterId=getDatacenterId(maxDatacenterId);
this.workerId=getMaxWorkerId(datacenterId,maxWorkerId);
}
/**
*@paramworkerId
*工作机器ID
*@paramdatacenterId
*序列号
*/
publicIdWorker(longworkerId,longdatacenterId){
if(workerId>maxWorkerId||workerId<0){
(String.format("workerIdcan'tbegreaterthan%dorlessthan0",maxWorkerId));
}
if(datacenterId>maxDatacenterId||datacenterId<0){
(String.format("datacenterIdcan'tbegreaterthan%dorlessthan0",maxDatacenterId));
}
this.workerId=workerId;
this.datacenterId=datacenterId;
}
/**
*获取下一个ID
*
*@return
*/
publicsynchronizedlongnextId(){
longtimestamp=timeGen();
if(timestamp<lastTimestamp){
thrownewRuntimeException(String.format("Clockmovedbackwards.Refusingtogenerateidfor%dmilliseconds",lastTimestamp-timestamp));
}
if(lastTimestamp==timestamp){
//当前毫秒内,则+1
sequence=(sequence+1)&sequenceMask;
if(sequence==0){
//当前毫秒内计数满了,则等待下一秒
timestamp=tilNextMillis(lastTimestamp);
}
}else{
sequence=0L;
}
lastTimestamp=timestamp;
//ID偏移组合生成最终的ID,并返回ID
longnextId=((timestamp-twepoch)<<timestampLeftShift)
|(datacenterId<<datacenterIdShift)
|(workerId<<workerIdShift)|sequence;
returnnextId;
}
privatelongtilNextMillis(finallonglastTimestamp){
longtimestamp=this.timeGen();
while(timestamp<=lastTimestamp){
timestamp=this.timeGen();
}
returntimestamp;
}
privatelongtimeGen(){
returnSystem.currentTimeMillis();
}
/**
*<p>
*获取maxWorkerId
*</p>
*/
(longdatacenterId,longmaxWorkerId){
StringBuffermpid=newStringBuffer();
mpid.append(datacenterId);
Stringname=ManagementFactory.getRuntimeMXBean().getName();
if(!name.isEmpty()){
/*
*GETjvmPid
*/
mpid.append(name.split("@")[0]);
}
/*
*MAC+PID的hashcode获取16个低位
*/
return(mpid.toString().hashCode()&0xffff)%(maxWorkerId+1);
}
/**
*<p>
*数据标识id部分
*</p>
*/
(longmaxDatacenterId){
longid=0L;
try{
InetAddressip=InetAddress.getLocalHost();
NetworkInterfacenetwork=NetworkInterface.getByInetAddress(ip);
if(network==null){
id=1L;
}else{
byte[]mac=network.getHardwareAddress();
id=((0x000000FF&(long)mac[mac.length-1])
|(0x0000FF00&(((long)mac[mac.length-2])<<8)))>>6;
id=id%(maxDatacenterId+1);
}
}catch(Exceptione){
System.out.println("getDatacenterId:"+e.getMessage());
}
returnid;
}
publicstaticvoidmain(String[]args){
//推特26万个不重复的ID
IdWorkeridWorker=newIdWorker(0,0);
for(inti=0;i<2600;i++){
System.out.println(idWorker.nextId());
}
}
}
Ⅳ 简述Oracle数据库RAC真实应用集群的工作原理
Oracle集群
Oracle集群,最早称作OPS(Oracle Parallel Server)出现在Oracle 7版本中,从Oracle 9i开始正式改称为Oracle RAC,RAC即Real Application Clusters的简写,译为“真正应用集群”;RAC 是Oracle新版数据库中采用的一项新技术,也是Oracle数据库支持网格计算环境的核心技术。 10g以前的OPS或者RAC都依赖于第三方集群软件(Vendor Clusterware)方能正常工作,在10g版本中Oracle推出了Oracle Clusterware集群软件以及ASM自动存储管理技术,换而言之10g以后版本的RAC不再依赖于第三方的集群软件(譬如IBM的HACMP,Veritas的VCS等),但必须安装Oracle自己的Clusterware集群软件。 Oracle RAC主要支持Oracle9i、10g、11g版本,可以可以支持24 x 7 有效的数据库应用 系统,在低成本服务器上构建高可用性数据库系统,并且自由部署应用,无需修改代码。 在Oracle RAC环境下,Oracle集成提供了集群软件和存储管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户可以按需扩展系统,以保证系统的性能。 参考编辑本段Oracle集群参考文档
Oracle RAC一般也可构建于大型SMP主机,IBM的AIX系列服务器往往是其中高端平台,Intel linux往往作为其低端平台。当AIX UNIX用来运行Oracle RAC作为大型数据库系统平台时,其集群系统构建、实施、运维、高可用设置,有其平台特点。可以参照《Oracle大型数据库系统在AIX/UNIX上的实战详解》,该书以AIX UNIX平台为主线,以其他UNIX系统为参照,描述了数据库系统Oracle 10g、Oracle 11g的RAC的构架方法和过程。在Linux平台,则《大话OracleRAC集群、高可用性、备份与恢复》有着很好的论述。
Ⅵ 为什么说数据库在电子商务中占有重要的地位
电子商务需要数据的支持来完成,在复杂的数据中当然需要数据库来存储、查询、归类等操作了。
Ⅶ 如何理解分布式与集群,二者区别是什么
分布式是指不同的业务分布在不同的地方,集群指的是将几台服务器集中在一起,实现同一业务。白话理解的话,比如公司项目上线初期(举例电子商务网站)
初期:用户访问量低,只弄了一台服务器,一个tomcat项目运行一个web工程。
中期:用户访问量提高,服务器崩了,为了解决这个问题,购买服务器,增加服务器数量,然后每个服务器中个各放了一份,使用nginx代理转发。(这就是运用集群原理)
后期:用户访问量不断增加,响应速度变慢,服务器又崩了,在不考虑增加服务器带宽、内存和CPU的情况下如何解决这个问题?先解决响应速度变慢,用户频繁调用数据库,在客户端与数据库之间,使用redis缓存。解决之后,又发现问题:由于每台服务器运行一个tomcat,放着一个web工程,用户有可能在商品详情存在大幅度调用数据库,而订单列表调用幅度小,此时就存在着模块之间耦合度高,一个功能升级其他也需要升级,扩展性差,不能灵活部署。是该考虑项目重构,把项目按照模块分为不同的系统(使用zookeeper进行模块之间通信),例如:订单系统,会员系统、搜索系统、商品信息系统。把每个模块进行拆分,用户在哪个系统访问频繁,就针对哪个系统进行对症下药,增加缓存还是使用其他技术。(这样我们就可以单独对这个模块进行服务性能的提升,不用全部都一起提升。也降低了代码的耦合度,模块之间互不影响,即使后期增加开发人员,也可按照敏捷开发思想只对其负责模块进行开发,效率大大提升)。这样一个web工程就拆分成多个web工程(多个tomcat部署)。那这个项目就可以在一台服务器部署多个工程(不同端口进行通信)或者多台服务器运行单个项目。(这就是分布式原理)
总而言之,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
Ⅷ 分布式数据库CAP原理
C: Consistency 强一致性
A:Availability 可用性
P:Pattition tolerance 分区容错性
一个分布式系统不可能同时满足CAP,只能满足两个
CAP只能三选二
CP:单贺者点集群洞拍肢,满足一致性,可用性的系统,通常再可扩纳世展性上不太强大 RABMS (mysql)
CP:满足一致性,分区容忍的系统,通常性能不是特别高 redis
AP:满足可用性,分区容忍性的系统,通常可能对一致性要求低一些
在分布式系统中,P肯定是要满足的;所以只会有CP AP
AP:高可用,大部分系统架构的选择
CP:强一致性 redis MongoDb
Ⅸ 详解kubernetes备份恢复利器 Velero - 深入了解Carina系列第三期
传统的数据备份方案主要有两种, 一种是利用存储数据的服务端实现基于快照的备份,另一种是在每台目标服务器上部署专有备份 agent 并指定备份数据目录,定期把数据复制到外部存储上。这两种方式的备份机制相对固化,在云原生时代无法适应容器化后的弹性、池化等部署场景。
以云原生存储插件 Carina 为例,数据库等数据敏感场景中每个数据库集群包括多个计算实例,实例可能在集群内任意漂移并实现自动故障恢复。传统数据备份方式在数据库集群快速扩缩容、跨节点漂移等场景下无法自动跟随计算实例迁移从而导致数据备份失效,因此一款贴合 k8s 容器场景的备份工具就十分重要。
Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,开源地址为:https://github.com/vmware-tanzu/velero。Velero 源于西班牙语,意思为帆船,非常符合 Kubernetes 社区的命名风格。
利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。它的基本原理就是将集群的数据,例如集群资源和持久化数据卷备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群,这也是 velero 一个非常成功的使用场景。
Velero 主要包括连个核心组件,分别为服务端和客户端。服务端运行在具体的 Kubernetes 集群中,客户端是运行在本地的命令行工具,只要配置好 kubectl 及 kubeconfig 即可使用,非常简单。
Velero 基于其实现的 kubernetes 资源备份能力,可以轻松实现 Kubernetes 集群的数据备份和恢复、复制 kubernetes 集群资源到其他 kubernetes 集群或者快速复制生产环境到测试环境等功能。
在资源备份方面,velero 支持将数据备份到众多的云存储中,例如AWS S3或S3兼容的存储系统、Azure Blob、Google Cloud存储、Aliyun OSS等。与备份整个 kubernetes 的数据存储引擎 etcd 相比,velero 的控制更加细化,可以对 Kubernetes 集群内对象级别进行备份,还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。
以核心的数据备份为例,当执行 velero backup create my-backup 时:
关于备份存储位置和卷快照,Velero 有两个自定义资源 BackupStorageLocation 和 VolumeSnapshotLocation,用于配置 Velero 备份及其关联的持久卷快照的存储位置。
Minio安装Yaml文件如下:
安装Mini,并检查资源创建情况。
待服务都已经启动完毕,可以登录 minio 查看 velero/velero 的 bucket 是否创建成功。
其中,几个重要的参数及其说明如下:
安装命令执行完成后,等待 Velero 和 restic 工作负载就绪后,查看配置的存储位置是否可用。
至此 velero 就已经全部部署完成。
velero 支持备份所有对象,也可以按类型,名称空间和/或标签过滤对象
其中:
--include-namespaces:备份该命名空间下的所有资源,不包括集群资源
--include-resources:要备份的资源类型
--include-cluster-resources:是否备份集群资源 此选项可以具有三个可能的值: true:包括所有集群范围的资源; false:不包括集群范围内的资源; nil (“自动”或不提供)
--selector:通过标签选择匹配的资源备份
--exclude-namespaces:备份时该命名空间下的资源不进行备份
--exclude-resources:备份时该类型的资源不进行备份
http://--velero.io/exclude-from-backup=true:当标签选择器匹配到该资源时,若该资源带有此标签,也不进行备份
同时,也可以通过使用 –ordered-resources 参数,按特定顺序备份特定种类的资源,需要指定资源名称和该资源的对象名称列表,资源对象名称以逗号分隔,其名称格式为“命名空间/资源名称”,对于集群范围资源,只需使用资源名称。映射中的键值对以分号分隔,资源类型是复数形式。
当备份任务状态是 “Completed” ,且错误数为 0 ,说明备份任务完成且没发生任何错误,可以通过以下命令查询:
通过先临时将备份存储位置更新为只读模式,可以防止在还原过程中在备份存储位置中创建或删除备份对象。
还原完成后,不要忘记把备份存储位置恢复为读写模式,以便下次备份任务使用:
Velero 支持还原 hooks,可以在还原任务执行前或还原过程之后执行的自定义操作。有以下两种定义形式:
如进行备份之前,请使用以下命令将注释添加到Pod:
如进行备份之前,请使用以下命令将注释添加到Pod
是的,可以使用--namespace-mappings参数来指定:
Velero 有一个参数,可让用户决定保留原来的 nodePorts。
velero restore create 子命令具有 --preserve-nodeports标志保护服务nodePorts。此标志用于从备份中保留原始的nodePorts,可用作--preserve-nodeports或--preserve-nodeports=true 如果给定此标志,则Velero在还原Service时不会删除nodePorts,而是尝试使用备份时写入的nodePorts。
如果是基于velero实现数据库的一致性,需要用velero的hook,在备份前对数据库进行quiesce操作,备份完unquiesce。对于备份本身,可以使用restic来数据(但不用快照),或者使用快照的方式。
Ⅹ 求集群管理的相关知识!
集群技术案例介绍和具体操作
集群技术案例介绍和具体操作
中国科学院西安网络中心 中科红旗linux培训认证中心
集群技术
1.1 什么是集群
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提
供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的
集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一
个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群
系统的节点。
1.2 为什么需要集群
集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就
开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并
不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。
对集群的研究起源于集群系统良好的性能可扩展性(scalability)。提高CPU
主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的
提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了
向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,象SMP这些
多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能
随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的
增加几乎是线性变化的。图1显示了这中情况。
图1. 几种计算机系统的可扩展性
对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下
面的统计数字列举了不同类型企业应用系统停机所带来的损失。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
应用系统每分钟损失(美元)
呼叫中心(Call Center) 27000
企业资源计划(ERP)系统13000
供应链管理(SCM)系统11000
电子商务(eCommerce)系统10000
客户服务(Customer Service Center)系统27000
图2:停机给企业带来的损失
随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。
集群系统的优点并不仅在于此。下面列举了集群系统的主要优点:
高可扩展性:如上所述。
高可用性:集群中的一个节点失效,它的任务可传递给其他节点。可以有效防止单点失效。
高性能:负载平衡集群允许系统同时接入更多的用户。
高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。
2.1 集群系统的分类
虽然,根据集群系统的不同特征可以有多种分类方法,但是一般把集群系统分为两类:
(1)、高可用(High Availability)集群,简称HA集群。
这类集群致力于提供高度可靠的服务。就是利用集群系统的容错性对外提供7*24小时不间
断的服务,如高可用的文件服务器、数据库服务等关键应用。
目前已经有在Linux下的高可用集群,如Linux HA项目。
负载均衡集群:使任务可以在集群中尽可能平均地分摊不同的计算机进行处理,充分利
用集群的处理能力,提高对任务的处理效率。
在实际应用中这几种集群类型可能会混合使用,以提供更加高效稳定的服务。如在一个使
用的网络流量负载均衡集群中,就会包含高可用的网络文件系统、高可用的网络服务。
(2)、性能计算(High Perfermance Computing)集群,简称HPC集群,也称为科学计算
集群。
在这种集群上运行的是专门开发的并行应用程序,它可以把一个问题的数据分布到多
台的计算机上,利用这些计算机的共同资源来完成计算任务,从而可以解决单机不能胜任
的工作(如问题规模太大,单机计算速度太慢)。
这类集群致力于提供单个计算机所不能提供的强大的计算能力。如天气预报、石油勘探与油
藏模拟、分子模拟、生物计算等。这些应用通常在并行通讯环境MPI、PVM等中开发,由于MPI
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
是目前的标准,故现在多使用MPI为并行环境。
比较有名的集群Beowulf就是一种科学计算集群项目。
3、集群系统转发方式和调度算法
3.1转发方式
目前LVS主要有三种请求转发方式和八种调度算法。根据请求转发方式的不同,所构
架集群的网络拓扑、安装方式、性能表现也各不相同。用LVS主要可以架构三种形式的集群,
分别是LVS/NAT、LVS/TUN和LVS/DR,可以根据需要选择其中一种。
(1)、网络地址转换(LVS/NAT)
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(2)、直接路由
(3)、IP隧道
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
三种转发方式的比较:
3.2、调度算法
在选定转发方式的情况下,采用哪种调度算法将决定整个负载均衡的性能表现,不同
的算法适用于不同的应用场合,有时可能需要针对特殊场合,自行设计调度算法。LVS的算
法是逐渐丰富起来的,最初LVS只提供4种调度算法,后来发展到以下八种:
1.轮叫调度(Round Robin)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均
等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2.加权轮叫(Weighted Round Robin)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样
可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动询问真实服务器的
负载情况,并动态地调整其权值。
3.最少链接(Least Connections)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器
上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较
好地均衡负载。
4.加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自
动询问真实服务器的负载情况,并动态地调整其权值。
5.基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache
集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务
器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且
有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求
发送到该服务器。
6. 带复制的基于局部性最少链接( Locality-Based Least Connections with
Replication)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要
用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务
器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目
标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一
台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接
”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服
务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,
以降低复制的程度。
7.目标地址散列(Destination Hashing)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分
配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,
否则返回空。
8.源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的
散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则
返回空。
了解这些算法原理能够在特定的应用场合选择最适合的调度算法,从而尽可能地保持
Real Server的最佳利用性。当然也可以自行开发算法,不过这已超出本文范围,请参考有
关算法原理的资料。
4.1、什么是高可用性
计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性
(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,
用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
MTTF/(MTTF+MTTR)*100%
业界根据可用性把计算机系统分为如下几类:
可用比例
(Percent
Availability)
年停机时间
(downtime/year
)
可用性分类
99.5 3.7天
常规系统
(Conventional)
99.9 8.8小时可用系统(Available)
99.99 52.6分钟
高可用系统(Highly
Available)
99.999 5.3分钟Fault Resilient
99.9999 32秒Fault Tolerant
为了实现集群系统的高可用性,提高系统的高可性,需要在集群中建立冗余机制。一个功
能全面的集群机构如下图所示
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
负载均衡服务器的高可用性
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行
High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运
行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并
继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息是,它就释放
服务IP地址,这样的主管理器就开开始再次进行集群管理的工作了。为在住服务器失效的
情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,
保持二者系统的基本一致。
HA的容错备援运作过程
自动侦测(Auto-Detect)阶段 由主机上的软件通过冗余侦测线,经由复杂的监听程序。逻
辑判断,来相互侦测对方运行的情况,所检查的项目有:
主机硬件(CPU和周边)
主机网络
主机操作系统
数据库引擎及其它应用程序
主机与磁盘阵列连线
为确保侦测的正确性,而防止错误的判断,可设定安全侦测时间,包括侦测时间间隔,
侦测次数以调整安全系数,并且由主机的冗余通信连线,将所汇集的讯息记录下来,以供
维护参考。
自动切换(Auto-Switch)阶段 某一主机如果确认对方故障,则正常主机除继续进行原来的
任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服
务。
自动恢复(Auto-Recovery)阶段 在正常主机代替故障主机工作后,故障主机可离线进行修
复工作。在故障主机修复后,透过冗余通讯线与原正常主机连线,自动切换回修复完成的
主机上。整个回复过程完成由EDI-HA自动完成,亦可依据预先配置,选择回复动作为半自
动或不回复。
4.2、HA三种工作方式:
(1)、主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,
待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的
一致性通过共享存储系统解决。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(2)、双机双工方式(互备互援)
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,另
一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存
储系统中。
(3)、集群工作方式(多服务器互备方式)
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用
主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
相关文档
http://tech.sina.com.cn/it/2004-04-09/1505346805.shtml
http://stonesoup.esd.ornl.gov
LINUX下的集群实列应用
最近有客户需要一个负载均衡方案,笔者对各种软硬件的负载均衡方案进行了调查和
比较,从IBM sServer Cluster、Sun Cluster PlatForm 等硬件集群,到中软、红旗、
TurboLinux的软件集群,发现无论采用哪个厂商的负载均衡产品其价格都是该客户目前所
不能接受的。于是笔者想到了开放源项目Linux Virtual Server(简称LVS)。经过对LVS的研
究和实验,终于在Red Hat 9.0上用LVS成功地构架了一组负载均衡的集群系统。整个实
现过程整理收录如下,供读者参考。
选用的LVS实际上是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操
作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组
服务器构成一个高性能、高可用的虚拟服务器。使用三台机器就可以用LVS实现最简单的集
群,如图1所示。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
图1 LVS实现集群系统结构简图
图1显示一台名为Director的机器在集群前端做负载分配工作;后端两台机器称之为
Real Server,专门负责处理Director分配来的外界请求。该集群的核心是前端的Director
机器,LVS就是安装在这台机器上,它必须安装Linux。Real Server则要根据其选用的负
载分配方式而定,通常Real Server上的设置比较少。接下来介绍Director机器上LVS的
安装过程。
安装
LVS的安装主要是在Director机器上进行,Real Server只需针对不同的转发方式做简单
的设定即可。特别是对LVS的NAT方式,Real Server惟一要做的就是设一下缺省的网关。
所以构架集群的第一步从安装Director机器开始。
首先,要在Director机器上安装一个Linux操作系统。虽然早期的一些Red Hat版本,
如6.2、7.2、8.0等自带Red Hat自己的集群软件,或者是在内核中已经支持LVS,但是为
了更清楚地了解LVS的机制,笔者还是选择自行将LVS编入Linux内核的方式进行安装,
Linux版本采用Red Hat 9.0。
如果用户对Red Hat的安装比较了解,可以选择定制安装,并只安装必要的软件包。
安装中请选择GRUB 做为启动引导管理软件。因为GRUB 在系统引导方面的功能远比
LILO强大,在编译Linux内核时可以体会它的方便之处。
LVS是在Linux内核中实现的,所以要对原有的Linux内核打上支持LVS的内核补丁,
然后重新编译内核。支持LVS 的内核补丁可以从LVS 的官方网
http://www.linuxvirtualserver.org 下载,下载时请注意使用的Linux核心版本,必须下载和
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
使用的Linux内核版本相一致的LVS内核补丁才行。对于Red Hat 9.0,其Linux内核版本
是2.4.20,所以对应内核补丁应该是http://www.linuxvirtualserver.org/software/kernel-
2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。笔者经过多次实验,使用Red Hat 9.0自带的Linux
源代码无法成功编译LVS 的相关模组。由于时间关系笔者没有仔细研究,而是另外从
kernel.org上下载了一个tar包格式的2.4.20内核来进行安装,顺利完成所有编译。下面是
整个内核的编译过程:
1.删除Red Hat自带的Linux源代码
# cd /usr/src
# rm -rf linux*
2.下载2.4.20内核
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解压到当前目录/usr/src
# cd /usr/src
# tar -xjpvf linux-2.4.20.tar.bz2
4.建立链接文件
# cd /usr/src # ln -s linux-2.4.20 linux-2.4 # ln -s linux-2.4.20 linux
5.打上LVS的内核补丁
# cd /usr/src
#wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-
1.0.9.patch.gz
# gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
# cd /usr/src/linux
# patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
在打补丁时,注意命令执行后的信息,不能有任何错误信息,否则核心或模组很可能
无法成功编译。
6.打上修正ARP问题的内核补丁
# cd /usr/src
# wget http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
# cd /usr/src/linux
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
# patch -p1 < ../hidden-2.4.20pre10-1.diff
这一步在Director机器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server
上必须做。
7.为新核心命名
打开/usr/src/linux/Makefile。注意,在开始部分有一个变量EXTRAVERSION可以自行定
义。修改这个变量,比如改成“EXTRAVERSION=-LVS”后,编译出的核心版本号就会显
示成2.4.20-LVS。这样给出有含义的名称将有助于管理多个Linux核心。
8.检查源代码
# make mrproper
这一步是为确保源代码目录下没有不正确的.o文件及文件的互相依赖。因为是新下载的内
核,所以在第一次编译时,这一步实际可以省略。
9.配置核心选项
# make menuconfig
命令执行后会进入一个图形化的配置界面,可以通过这个友好的图形界面对内核进行定制。
此过程中,要注意对硬件驱动的选择。Linux支持丰富的硬件,但对于服务器而言,用不到
的硬件驱动都可以删除。另外,像Multimedia devices、Sound、Bluetooth support、Amateur
Radio support等项也可以删除。
注意,以下几项配置对LVS非常重要,请确保作出正确的选择:
(1)Code maturity level options项
对此项只有以下一个子选项,请选中为*,即编译到内核中去。
Prompt for development and/or incomplete code/drivers
(2)Networking options项
对此项的选择可以参考以下的配置,如果不清楚含义可以查看帮助:
<*> Packet socket
[ ] Packet socket: mmapped IO
< > Netlink device emulation
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Socket Filtering
<*> Unix domain sockets
TCP/IP networking
IP: multicasting
IP: advanced router
IP: policy routing
[ ] IP: use netfilter MARK value as routing key
[ ] IP: fast network address translation
<M> IP: tunneling
IP: broadcast GRE over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ] IP: TCP Explicit Congestion Notification support
[ ] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
IP: Virtual Server Configuration --->
(3)Networking options项中的IP: Virtual Server Configuration项
如果打好了LVS的内核补丁,就会出现此选项。进入Virtual Server Configuration选项,
有以下子选项:
<M> virtual server support (EXPERIMENTAL)
IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheler
<M> round-robin scheling
<M> weighted round-robin scheling
<M> least-connection scheling scheling
<M> weighted least-connection scheling
<M> locality-based least-connection scheling
<M> locality-based least-connection with replication scheling
<M> destination hashing scheling
<M> source hashing scheling
<M> shortest expected delay scheling
<M> never queue scheling
--- IPVS application helper
<M> FTP protocol helper
以上所有项建议全部选择。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(4)Networking options项中的IP: Netfilter Configuration项
对于2.4版本以上的Linux Kernel来说,iptables是取代早期ipfwadm和ipchains的
更好选择,所以除非有特殊情况需要用到对ipchains和ipfwadm的支持,否则就不要选它。
本文在LVS/NAT方式中,使用的就是iptables,故这里不选择对ipchains和ipfwadm的
支持:
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) support
10. 编译内核
(1)检查依赖关系
# make dep
确保关键文件在正确的路径上。
(2)清除中间文件
# make clean
确保所有文件都处于最新的版本状态下。
(3)编译新核心
# make bzImage
(4)编译模组
# make moles
编译选择的模组。
(5)安装模组
# make moles_install
# depmod -a
生成模组间的依赖关系,以便modprobe定位。
(6)使用新模组
# cp System.map /boot/System.map-2.4.20-LVS
# rm /boot/System.map
# ln -s /boot/System.map-2.4.20-LVS /boot/System.map
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20-LVS
# rm /boot/vmlinuz
# ln -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz
# new-kernel-pkg --install --mkinitrd --depmod 2.4.20-LVS
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(7)修改GRUB,以新的核心启动
执行完new-kernel-pkg命令后,GRUB的设置文件/etc/grub.conf中已经增加了新核心的
启动项,这正是开始安装Linux时推荐使用GRUB做引导程序的原因。
grub.conf中新增内容如下:
title Red Hat Linux (2.4.20-LVS)
root (hd0,0)
kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/
initrd /boot/initrd-2.4.20LVS.img
将Kernel项中的root=LABEL=/改成 root=/dev/sda1 (这里的/dev/sda1是笔者Linux的根
分区,读者可根据自己的情况进行不同设置)。
保存修改后,重新启动系统:
# reboot
系统启动后,在GRUB的界面上会出现Red Hat Linux(2.4.20-LVS)项。这就是刚才编译的
支持LVS的新核心,选择此项启动,看看启动过程是否有错误发生。如果正常启动,ipvs
将作为模块加载。同时应该注意到,用LVS的内核启动后在/proc目录中新增了一些文件,
比如/proc/sys/net/ipv4/vs/*。
11.安装IP虚拟服务器软件ipvsadm
用支持LVS的内核启动后,即可安装IP虚拟服务器软件ipvsadm了。用户可以用tar包或
RPM 包安装,tar 包可以从以下地址http://www.linuxvirtualserver.org/software/kernel-
2.4/ipvsadm-1.21.tar.gz 下载进行安装。
这里采用源RPM包来进行安装:
# wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm
# rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
注意:高版本的rpm命令去掉了--rebuild这个参数选项,但提供了一个rpmbuild命令来实
现它。这一点和以前在Red Hat 6.2中以rpm—rebuild XXX.src.rpm来安装源RPM包的习
惯做法有所不同。
安装完,执行ipvsadm命令,应该有类似如下的信息出现:
# ipvsadm
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
IP Virtual Server version 1.0.9 (size=4096)
Prot LocalAddress:Port Scheler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
出现类似以上信息,表明支持LVS 的内核和配置工具ipvsadm 已完全安装,这台
Director机器已经初步安装完成,已具备构架各种方式的集群的条件。
实例
理解了上述关于请求转发方式和调度算法的基本概念后,就可以运用LVS来具体实现
几种不同方式的负载均衡的集群系统。LVS的配置是通过前面所安装的IP虚拟服务器软件
ipvsadm来实现的。ipvsadm与LVS的关系类似于iptables和NetFilter的关系,前者只是
一个建立和修改规则的工具,这些命令的作用在系统重新启动后就消失了,所以应该将这
些命令写到一个脚本里,然后让它在系统启动后自动执行。网上有不少配置LVS的工具,
有的甚至可以自动生成脚本。但是自己手工编写有助于更深入地了解,所以本文的安装没
有利用其它第三方提供的脚本,而是纯粹使用ipvsadm命令来配置。
下面就介绍一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的负载均衡集群。
1.设定LVS/NAT方式的负载均衡集群
NAT是指Network Address Translation,它的转发流程是:Director机器收到外界请求,
改写数据包的目标地址,按相应的调度算法将其发送到相应Real Server上,Real Server
处理完该请求后,将结果数据包返回到其默认网关,即Director机器上,Dire