负载均衡(LB)具体解释
二、LB
LoadBalance就是把负载均衡分配到集群的各个节点,从而提高总体的吞吐能力。Oracle 10g
RAC提供了两种手段来实现负载,其一是通过Connection Balancing。依照某种算法把用户分配到不同的节点。其二是通过service。在应用层面上进行分散。
Connection Balancing
Connection Balancing这样的负载均衡是在用户连接这个层次上进行的。也就是在用户请求建立连接时。依据每一个的负载决定把连接分配到哪个实例上。而一旦建立连接之后,会话的全部操作就都在这个实力上完毕,而不会再分配给其它实例。
client均衡(Client-Side LB)
client均衡(Client-Side LB)是oracle 8i使用的方法。配置方法是在client的tnsnames.ora文件里增加LOAD_BALANCE=YES条目。当client发起连接时,会从地址列表中随机选取一个,再使用随机算法吧连接请求分散到各个实例。
一个Client-Side LB的TNS配置实比例如以下:
TAF_SERVER =
(DESCRIPTION =
(ADDRESS= (PROTOCOL = TCP)(HOST = felix1-vip)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = taf_server)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
这样的方法的缺点非常明显。由于在分配连接时没有考虑每一个节点的真是负载,最后分配结果不一定是平衡的。而且随机算法须要长时间片。假设在短时间内同一时候发起多个连接,这些连接有可能都被分配到一个节点上;甚至更坏的情况下,连接可能会被分配到故障节点上。因此Oracle又引入了server端(Server-Side LB)方式。
总结:client均衡的最大缺点就是不能依据各个实例的真实负载来分散用户连接
server端均衡(Server-Side)
server端负载均衡的实现依赖于listener(监听)手机的负载信息。在数据库执行过程中,PMON后台进程会手机系统的负载信息,然后登记到Listener中。最少一分钟,最多十分钟PMON就要做一次信息更新。而且假设节点的负载越高,更新频率就越高,以保证Listener可以掌握每一个节点准确的负载情况。假设Listener关闭,PMON进程会每隔1妙检查Listener是否重新启动,除了这个自己主动的、定时的更新任务外,用户也可以有用altersystem
register命令来手工进行这个过程。
这个自己主动更新动作能够从listener的日志中看到。
注意:实例启动时PMON进程进行的第一次登记过程叫做Server-Rgister,而后的更新过程叫做service-update;
TNSLSNR for Linux: Version 10.2.0.5.0 - Productionon 03-JUN-2014 11:51:54
Copyright (c) 1991, 2010, Oracle. All rights reserved.
System parameter file is/u01/oracle/10.2.0/db_1/network/admin/listener.ora
Log messages written to/u01/oracle/10.2.0/db_1/network/log/listener.log
Trace information written to/u01/oracle/10.2.0/db_1/network/trace/listener.trc
Trace level is currently 0
Started with pid=25371
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=felix1)(PORT=1521)))
Listener completed notification to CRS on start
TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT[* SID] * RETURN CODE
03-JUN-2014 11:51:54 *(CONNECT_DATA=(CID=(PROGRAM=)(HOST=felix1)(USER=oracle))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169870592))* status * 0
03-JUN-2014 11:52:15 * service_register * felix2 *0
03-JUN-2014 11:52:15 * service_register * felix1 *0
03-JUN-2014 11:52:15 * service_update * felix1 * 0
03-JUN-2014 11:52:15 * service_register * +ASM1 *0
Listener日志尽管记录了PMON进程的注冊和更新动作。可是注冊的内容却没有体现,要想获得这些内容,能够通过各种1025事件来获得,这个时间是跟中PMON活动的。
SQL> alter session set events '10257 trace namecontext forever,level 16';
Session altered.
SQL>
获取跟踪文件:
CREATE OR REPLACE FUNCTION get_trace return varchar is
Resultvarchar2(4000);
begin
dbms_output.enable(1000000);
begin
for x in(SELECT d.VALUE
||'/'
||LOWER (RTRIM (i.INSTANCE, CHR (0)))
||'_ora_'
||p.spid
||'.trc'
trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s,v$process p
WHERE m.statistic# = 1 AND s.SID= m.SID AND p.addr = s.paddr) p,
(SELECT t.INSTANCE
FROM v$thread t, v$parameter v
WHERE v.NAME = 'thread'
AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
(SELECT VALUE
FROM v$parameter
WHERE NAME = 'user_dump_dest')d) loop
Result:= Result || x.trace_file_name;
End loop;
End;
return(substr(Result, 1, 4000));
end get_trace;
select get_trace from dual;
GET_TRACE
--------------------------------------------------------------------------------
/u01/oracle/admin/felix/udump/felix1_ora_27465.trc
PMON进程不仅回忆本地的Listener注冊。还能够向其它节点的listener注冊。但究竟要向何处注冊,是由remote_listener和local_listener这两个參数决定。Local_Listener不用设置,而remote须要设置。參数值是一个tnsnames项。
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ -----------------------------------------
local_listener string LISTENER_FELIX1
remote_listener string LISTENERS_FELIX
SQL>
Tnsnames.ora中相应的LISTENERS_FELIX的内容例如以下:
LISTENERS_FELIX =
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCP)(HOST = felix1-vip)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521))
)
有了PMON的自己主动注冊机制后。集群的每一个节点的Listener都掌握全部节点的负载状态,当收到client的连接请求时,就会把连接转给负载最小的节点,这个节点有可能是自己也可能是其它节点,也就是Listener会转发用户连接的请求listener的节点选择方法依据用户所请求的连接方式会有所不同:
a. 假设用户请求的是Dedicate专有连接,Listener首先选择负载最小的节点,假设多个节点负载同样。则从中选择负载最小的实例;
b. 假设用户请求的是shared server共享连接,除了做节点负载比較和实例负载比較之外,还要在所选实例上,选择最小的Dispatcher进行转发。
两种LB的配置方法:
对于client-Side LB。须要在客户的tnsnames条目中增加LOAD_BALANCE=YES。对于Server-Side LB,须要配置REMOTE_LISTENER这个參数。
在配置LB时有一点须要注意:须要从各个实例的listener文件里却掉缺省的SID_LIST_LISTENER_NAME条目,这样才干保证Listener获得的信息都是动态注冊的。而不是从文件里读出的静态信息。
改动前:
[oracle@felix2 admin]$ cat listener.ora
# listener.ora.felix2 Network Configuration File:/u01/oracle/10.2.0/db_1/network/admin/listener.ora.felix2
# Generated by Oracle configuration tools.
LISTENER_FELIX2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521)(IP =FIRST))
)
)
----------------------------------------
SID_LIST_LISTENER_FELIX2 =
(SID_LIST=
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle/10.2.0/db_1)
(PROGRAM = extproc)
)
)
[oracle@felix2 admin]$
改动后配置例如以下:
[oracle@felix2 admin]$ catlistener.ora
# listener.ora.felix2 Network Configuration File:/u01/oracle/10.2.0/db_1/network/admin/listener.ora.felix2
# Generated by Oracle configuration tools.
LISTENER_FELIX2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521)(IP =FIRST))
)
)
[oracle@felix2 admin]$
利用service分散负载
Connection Balancing方法的不足之处,Oracle的集群时“共享一切“的架构,全部节点都共享一份磁盘数据。
实例间通过cachefusion机制进行数据同步,所以RAC的性能在非常大程度上受限于cache fusion的性能。因此。要提高RAC的性能能够从双方面入手,一方面提高cache fusion的能力。这能够通过更好的互联设备,比方G级的Private network。或者使用Infiniband等DRA技术;还有一方面,能够尽量降低cache
fusion的流量,降低实例间的相互依赖。
而service就是后一种思路基础上发展出来的。
先看一下与service很相似的Partition技术。假设一个表中的数据量巨大。Oralce会建议採用了Partition Table,把数据依照一定的规律分散到多个物理段(Segment)中,这样訪问数据时就限制在某些个局部的Segment上。
把“分散数据“思想机一部提升,在RAC环境中。假设可以把数据依照顾用进行分离。考虑以下这个场景:一个ERP应用包含生产、销售、供应链管理多个模块。
假设这个数据库採用了2节点的RAC在没有进行“数据分散”之前,两个用户都使用销售模块。那么这两个用户就可能被分配到两个节点上,在操作过程中,销售数据就要在cache fusion的作用下。不断在两个节点间传递,假设有来了另外两个生产模块的用户,这两个用户又被分配到两个节点上。在操作的过程中,生产部分的数据又要在Cache
fusion的协助下在两个实力之间同步。
可见。假设仅有connectionbalance一种机制。表面上看起来用户是被分配到了不同的实例上,似乎负载被分散了。可是这样的分散是没有结合每一个用户的业务需求进行的。是一种纯技术手段(因此能够把它叫做纯技术手段分散)。
如果换一种解决思想,假如把销售模块的用户都分配到节点1上,生产模块的用户都分配到节点2上,在如果这两个模块之间的数据交叉不多,这是销售模块的数据都集中在节点1上。生产库模块的数据都集中在节点2上,cachefusion的工作量就会急剧降低,这就从根本上攻克了性能的问题。
这个思想是借助于service分散负载的基本思想。
通过把应用依照功能模块进行划分成Service,进而把每一个service固定在某些RAC节点上,从而从根本上提供系统的性能。这样的分散负载的方法不是仅靠DBA进行配置就能完毕的,须要DBA和开发者合作,在了解业务数据特点之后才干看到效果。
在RAC环境下。Service并非必须的,可是假设借助service相应用的划分,相信对整个系统性能的提升是大有裨益的。
使用service还有另外一个优点:能够在数据库内部创建Service的TAF參数,假设在client通过service连接数据库。clienttnsnames.ora中就不再须要FAIL-OVER的很多设置。
假设使用service方法,client配置须要使用service_name条目,比如以下的红字部分:
TAF_SERVER =
(DESCRIPTION =
(ADDRESS= (PROTOCOL = TCP)(HOST = felix1-vip)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = taf_server)
)
)
具体探究參考《大话RAC》张晓明 p238~242,讲的特别好!
。!。
负载均衡(LB)具体解释的更多相关文章
- Keepalived实现Nginx负载均衡高可用
第一章:keepalived介绍 VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理 2.1 作为系统网络服务的高可用功能(failover) keepali ...
- LVS负载均衡理论以及算法概要
一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.or ...
- 浅谈Nginx负载均衡原理与实现
1.Nginx能做什么? Nginx可以两件事: -- HTTP请求 经过官方测试Nginx可以承受5万的并发量.可用来做静态资源的图片服务器 --负载均衡,如下解释什么是负载均衡. 2.负载均衡 ...
- DevOps之负载均衡
唠叨话 关于德语噢屁事的知识点,仅提供专业性的精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <负载均衡LB(Load Balance)> 关于负载均衡器:知识与技能的层次(知 ...
- 【Dalston】【第二章】客户端负载均衡(Ribbon)
对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...
- Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...
- 服务发现与负载均衡 dubbo zk原理
服务发现与负载均衡 拓展阅读 : dubbo 原理概念图 2016-03-03 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 内容整理自文章“实施 ...
- Coherence代理的负载均衡
Coherence在extend模式下,proxy的负载均衡机制官方解释是 Extend client connections are load balanced across proxy servi ...
- 腾讯云负载均衡CLB
负载均衡 使用场景: ①购买一个负载均衡LB实例 ②一级.二级域名都解析到VIP上 ③创建HTTP/HTTPS监听器 ④绑定云主机 在nginx中只需要配置好伪静态和相关设置就ok了
- CentOS7Linux中服务器LVS负载均衡、高可用集群搭建(NAT、DR);
目录 集群 声明 集群概念 集群特性 Web服务器并发相应瓶颈 集群的分类 LB实现方法: LVS集群 负载调度器 服务器池 共享存储 LVS负载均衡的三种模式 负载均衡 集群 声明 文档不断更新中. ...
随机推荐
- 本地代码中使用Java对象
通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数.JNI通过ID识别域和方 ...
- Tuples as return values
Strictly speaking, a function can only return one value, but if the value is a tuple, the effect is ...
- ThinkPhp5-PHPExcel导出数据
PHP-Excel 标签(空格分隔): php 类库下载地址:https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8 php导出excel表格数据 ...
- OpenGL编程逐步深入(八)伸缩变换
准备知识 伸缩变换非常简单,它的目的是增大或者缩小对象的尺寸.例如:你可能希望用同一个模型创建不同大小的对象(例如形状相同,但大小不同的树木)或者你想改变对象的大小使它和游戏场景匹配.这些例子中你可能 ...
- PHP+MySQL登录注册,完整版,详细注释
纯手写打造. 下载地址:http://download.csdn.net/detail/qq_33599520/9779970 项目结构: 下面是代码: <!DOCTYPE html> & ...
- Audio / Video Playback
For Developers > Design Documents > Audio / Video Playback Interested in helping out? Ch ...
- [国家集训队]整数的lqp拆分 数学推导 打表找规律
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...
- twig 模板引擎使渲染视图更加优雅
在使用 laravel 的时候接触过 blade 模板引擎.在学习的时候,接触到了另外一个强大的模板引擎:twig 官网:https://twig.sensiolabs.org/ 中文手册:http: ...
- HDU-1032 The 3n+1 problem 模拟问题(水题)
题目链接:https://cn.vjudge.net/problem/HDU-1032 水题 代码 #include <cstdio> #include <algorithm> ...
- ArcGIS api for javascript——用缓存区查询地图
描述 本例展示了如何在另外一个任务里使用一个任务的结果.单击地图查看被单击的点的1公里范围内的缓存(如果需要可以修改这个默认的缓存距离).也可以看缓存区的这些点的人口普查街区信息.单击一个点查看更多的 ...