‘壹’ 请问什么是数据库群集数据库群集有哪些利弊
数据库集群,顾名思义,就是利用至少两台或者多台数据库服务器,构成一个虚拟单一数据库逻辑映像,像单数据库系统那样,向客户端提供透明的数据服务坏处:集
群
向
来
是Unix
的
技
术,
只
有
在Unix
的
系
统
下
才
能
实
现,
硬
件
配
置
也
比
较
高,
一
般
都
采
用
小
型
机
作
为
服
务
器。
中
小
企
业
因
种
种
原
因,
绝
大
部
分
采
用
微
机
服
务
器,
为
保
证
数
据
的
安
全,
通
常
用
磁
盘
镜
像
或
磁
盘
阵
列;
为
提
高
系
统
的
安
全,
往
往
建
立
双
机
容
错
系
统,
但
是
无
法
实
现
集
群。
有
了Windows
NT
Server
4.0(
企
业
版),
对
于
微
机
服
务
器
来
说,
集
群
也
是
可
以
考
虑
并
付
诸
实
施
的
一
种
方
案。
尽
管Windows
NT
只
提
供
了
两
个
结
点
的
集
群,
但
是
对
于
中
小
企
业
来
说,
这
已
经
足
够。
今
年5
月
份
我
们
实
现
了Windows
NT
和sql
Server
集
群
好处:集
群
的
好
处
是
不
言
而
喻
的,
能
够
提
高
系
统
效
率,
系
统
资
源
也
能
得
到
充
分
的
利
用。
物
理
上
有
两
个
服
务
器,
但
对
前
端
来
说,
只
有
一
个
虚
拟
服
务
器
和
一
个IP
地
址,
出
现
故
障
时
所
需
的
切
换
时
间
较
短,
前
端
只
会
觉
得
某
笔
业
务
的
处
理
时
间
变
长,
但
不
会
出
现
中
断。
集
群
系
统
对
于
大
型
关
键
业
务
系
统,
无
疑
是
最
好
的
选
择
之
一。----秦傲工程师
‘贰’ 数据库集群的性质
一.与分布式数据库系统的区别 数据库集群有的具有单份数据集,有的具有两份或多份相似的数据集,有的具有两份或多份实时一致的数据集;而分布式数据库系统往往具有完全不同的数据集。 数据库集群往往是同构的系统,要求集群各节点都具有相同的操作系统和数据库系统版本,甚至补丁包的版本也要求保持一致;而分布式数据库系统可以是异构系统,包含不同的操作系统和不同的数据库系统。 数据库集群往往建立在高速局域网内;而分布式数据库系统既可以是高速局域网,也可以是跨部门、跨单位的异地远程网络。 二.数据库集群的技术指标
由于数据库系统是任何一个信息系统的核心,因此除了业务逻辑之外,用户还关心下面三点:
1. 系统性能
性能问题涉及硬件、软件、网络、应用设计架构、代码质量等多方面。但是数据库集群如果能提供负载均衡能力和自动优化能力,则是对整个系统性能具有莫大的好处。
2. 数据可靠性
在系统发生任意故障(包括操作系统、数据库引擎、硬盘或磁盘阵列或存储网络等故障)条件下数据丢失的可能性。有的系统从设计原理上注定了必然会存在理论上的数据丢失可能性,而有的系统因为冗余设计原理,可以保证理论上的数据零丢失。用容灾领域的术语来讲,这类似于RPO(Recovery Point Objective),但是不完全等同于RPO。
3. 服务可用性
在系统发生任意故障(包括操作系统、数据库引擎、硬盘或磁盘阵列或存储网络等故障)条件下整个系统停止对外提供数据服务的可能性。与上面的数据库可靠性紧密关联,如果一个系统从理论上存在数据丢失的可能性,那么这样的系统必然会导致整个系统的服务停止。同样地,用容灾领域的术语来讲,这类似于RTO(Recovery Time Objective),但是也同样不能完全等同于RTO。
三.数据库集群的分类
在市场上,数据库集群是一个笼统的名词,没有一个权威的定义,各市场参与者往往是各取所需,推出各种特色的数据库集群解决方案。一般地具有下列四种集群方案:
1.基于串行数据复制技术
串行复制技术,本来是用于数据传送和数据备份的,离人们熟悉的“数据库集群”的概念有一定的距离。但是由于计算机软硬件技术和网络通讯技术的快速发展,使得利用这种概念和技术构成的“数据库集群”有了一定的可行性。此类集群,又可以分两类:
a.串行异步复制
此种方式是数据的异步串行复制。主要采用数据库事务日志传送或者硬盘数据块传送技术来实现,SQL Server自带的复制、镜像和SQL2012新出的AlwaysON(备机可读)以及第三的一些镜像Mirror技术都是属于此类产品,此类技术和产品本质上就是数据备份技术和产品。下列以事务日志传送(Log Shipping)为例来说明。主数据库完成事务处理后,生成事务处理日志,日志记录通过FIFO队列,进入备份数据库处理,从而得到备份数据。此种方式的缺陷在于:
a) 主数据库并行处理事务而日志拷贝是串行的,而备份数据库处理日志记录也是串行的。因此,FIFO队列的溢出随时可能发生。一旦发生,队列必须重建,从而需要重新建立备份数据库。此种方法对于一般客户来讲是不可行的。
b) 由于日志拷贝是异步的,主备数据库不是实时一致,两者之间存在“时间差”,因此如果用备份数据库作负荷均衡,这样的应用存在逻辑上的漏洞,可能会发生数据错乱。
c) 由于主备数据存在时间差, 主数据库一旦发生事故,理论上一定会丢失数据。在这种情况下,要么需要手工恢复数据库,这会消耗大量的人工成本,或者数据根本就不能恢复。
d) 对主机的性能影响,根据测试一般在15%到25%之间。
b.串行同步复制
此类集群往往是由昂贵的专用软硬件构成的,原理图如下:
此类系统采用专用的高速网络和软件技术,将每个数据库的请求,通过同步复制的方式,同步在主备两台数据库服务器上执行正确后,才将结果返回给数据库客户。此系统的特点是:
a) 主数据库被强迫与备份数据库同步串行处理,因此性能受到限制。
b) 主备数据库中任意一个出现问题,都会迫使事务处理交易回滚,因此整个系统的可靠性比单机系统降低了一半。
c) 由于以上问题,这种备份方式只适用于近距离光纤网络(5英里)。
d) 专用系统造价昂贵,又加上述明显缺陷,因此市场上很少被采用。
2.基于共享存储的双机容错技术
从技术适应性的角度讲,双机容错比较适合于无状态应用,或者状态信息较少的应用切换,以此达到应用级的高可用性目的,其实并不适合于数据库级的应用切换。
此种结构往往是两个服务器共享一个磁盘阵列,这里两个服务器共享一个虚拟的IP供数据库客户使用,形成一个单一的逻辑数据库映象。此种所谓的数据库集群的目的是,一旦主机系统出现问题,备份系统通过心跳机制的检测,完成从主机系统到备份系统的切换。这种方案在市场上被称为“双机集群”或者“双机热备”,简称参见“双机”,但微软称之为“故障转移集群”。它有下列特点:
a. 此种高可用性解决方案只是无状态系统(典型的如Web服务器)的普通容错切换思想在数据库领域的应用。
b. 此系统本身只有一个单一的数据映象,数据储存在共享的磁盘阵例上,因此共享的磁盘阵列成为了整个系统的单点错误源。
c. 由于是单一数据映象,因此必须采用通常的复制或备份方法获取第二份数据,以保证数据的安全性。因此所有复制或备份方法的缺点,此类系统全部存在。
d. 主机系统和备份系统之间是没有任何负载均衡关系的,在正常情况下,备份系统是闲置在那里,因此对用户来说是一种投资浪费。
e. 在错误切换的时候,往往存在切换时间长,而且更严重的是可能会存在丢失用户交易数据丢失的现象,结果导致系统被迫停止服务,或者需要人工修复数据,或者数据永远找不回来。
3.以Oracle RAC为代表的系统
RAC的英文全称是:Real Application Cluster(真正的应用级集群)。我们需要关注的是“应用级”。为了缓解数据库系统日益增长的性能压力,Oracle公司推出了RAC系统。它基本结构如下:
此类系统,专门是针对数据库性能问题而提出的。采用共享磁盘阵列的方式,因此在结构上和上述双机容错相似,不同的地方在于此系统中的数据库节点之间采用的不是简单的心跳检测,而是Oracle公司自己定义的一套复杂的信息交换协议,以此来动态分配来自数据库客户端的请求。它的特点是:
a. 是个应用级的集群,也就是针对Oracle的数据库管理系统(因为数据库管理系统对于操作系统来讲,就是一个“应用程序”,因此被称为“应用级集群”),专门为提高数据库性能而设计。
b. 此系统本身只有一个单一的数据映象,数据储存在共享的磁盘阵例上,因此享的磁盘阵例成为了整个系统的单点错误源。
c. 管理配置复杂。
d. 由于是单一数据映象,因此必须采用通常的复制或备份方法获取第二份数据,以保证数据的安全性。因此所有复制或备份方法的缺点,此类系统全部存在。
e. 由于数据库系统本身具有高I/O的特性,因此,RAC系统里,磁盘I/O是提高性能的关键地方。
f. 依据不同的数据库应用,有的性能有所提升,有的性能可能会反而下降。
‘叁’ 什么是数据库集群
现在比较大型点的系统基本上是AP+DB的架构: AP指应用程序,DB指数据库端
AP放在一个服务器上,DB放在另一个服务器上
当一个系统比较大,访问的用户数量比较多的时候,比如QQ,上亿用户.
这时一个服务器就吃不消了,这样就想到多个服务器跑同一个AP应用.
DB端也一样.
linux集群 指的就是多个服务器跑同一个AP应用,系统管理员的工作
数据库集群 指的就是多个服务器跑同一个DB数据库.数据库管理员的工作
linux集群基础就要熟悉linux系统.
数据库集群基础就要熟悉具体的数据库如oracle,db2,sysbase.mysql.等
0基础可以学,只是要花时间.0基础想搞到集群估计得花3个月时间.这还是要有环境的,有人指导才行.
‘肆’ 什么是数据库集群 分布式数据库
集群简单理解的话,就是把数据库放到不同的存储设备当中
分布式就是存储设备的地理位置不正同一个机房当中
‘伍’ 数据库集群 应该
集群主要分成三大类 (高可用集群, 负载均衡集群,科学计算集群)
高可用集群( High Availability Cluster)
负载均衡集群(Load Balance Cluster)
科学计算集群(High Performance Computing Cluster)
1、高可用集群(High Availability Cluster)
常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如”双机热备”, “双机互备”, “双机”。高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。
2、负载均衡集群(Load Balance Cluster)
负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。
3、科学计算集群(High Performance Computing Cluster)
高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。
高性能计算分类:
3.1、高吞吐计算(High-throughput Computing)
有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME – Search for Extraterrestrial Intelligence at Home )就是这一类型应用。
这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的 数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。
所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。
3.2、分布计算(Distributed Computing)
另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。
下面说说这几种集群的应用场景:
高可用集群这里不多作说明。
想Dubbo是比较偏向于负载均衡集群,用过的猿友应该知道(不知道的可以自行了解一下),Dubbo同一个服务是可以有多个提供者的,当一个消费者过来,它要消费那个提供者,这里是有负载均衡机制在里面的。
搜索引擎Elasticsearch比较偏向于科学计算集群的分布计算。
而到这里,可能不少猿友都知道,集群的一些术语:集群容错、负载均衡。
我们以Dubbo为例:
集群容错(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99)
Dubbo提供了这些容错策略:
集群容错模式:
可以自行扩展集群容错策略,参见:集群扩展
Failover Cluster
失败自动切换,当出现失败,重试其它服务器。(缺省)
通常用于读操作,但重试会带来更长延迟。
可通过retries="2"来设置重试次数(不含第一次)。
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。
通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
失败安全,出现异常时,直接忽略。
通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。
通常用于消息通知操作。
Forking Cluster
并行调用多个服务器,只要一个成功即返回。
通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
可通过forks="2"来设置最大并行数。
Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
通常用于通知所有提供者更新缓存或日志等本地资源信息。
负载均衡(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1)
Dubbo提供了这些负载均衡策略:
Random LoadBalance
随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
RoundRobin LoadBalance
轮循,按公约后的权重设置轮循比率。
存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
LeastActive LoadBalance
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
ConsistentHash LoadBalance
一致性Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
算法参见:http://en.wikipedia.org/wiki/Consistent_hashing。
缺省只对第一个参数Hash,如果要修改,请配置<bbo:parameter key="hash.arguments" value="0,1" />
缺省用160份虚拟节点,如果要修改,请配置<bbo:parameter key="hash.nodes" value="320" />
‘陆’ 数据库集群
确切地来说,数据库集群指的是由多个一致并且独立的数据库服务器构成一个逻辑上强大的数据库,它应该同时具备负载均衡、内部实时数据同步、容错和高可用性等功能,还应该对任何原有数据库客户端保持二进制兼容,使得客户端不需要作任何修改就能使用数据库集群。
“数据库集群”这一名称,在市场上有好几种含义。对于微软来说,它指的是SQL Server故障转移集群;而对于ORACLE来讲,则指的是共享存储方式的RAC集群,另外还有一些独立软件开发商开发的集群产品,其中有的产品非常吻合上述数据库集群的定义要求,有的则不是。
‘柒’ 数据库集群
拿oracle为例:
集群是多台服务器共同提供服务,数据库集群的意思就是多台运行数据库服务的服务器组成一个集群。
oracle的集群,自己的是rac,最少需要2台机器,先装cluster或者grid,再在集群上安装数据库,就可以了。
要是db2的话,还得用ibm的操作系统,安装一个集群软件
hacmp等等的。
反正
核心要理解的就是
,做集群,要有集群系统来支撑。例如
,文件同步访问等等的。
rac,hacmp等等的,都属于集群系统!