Oracle RAC 服务器端连接负载均衡(Load Balance)

Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去。当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到service_register。而对于节点中任意监听器故障或监听器意外失败时,PMON进程会每1秒钟检查当前节点上的监听是否重启,以获得最新的负载信息来及时调整负载均衡。本文主要演示suse 10 + oracle 10g rac下的服务器端的负载均衡。

有关客户端的负载均衡可参考

Oracle RAC 客户端连接负载均衡(Load Balance)

配置RAC负载均衡与故障转移

有关Oracle 网络配置相关基础以及概念性的问题请参考:

配置ORACLE 客户端连接到数据库

配置非默认端口的动态服务注册

配置sqlnet.ora限制IP访问Oracle

Oracle 监听器日志配置与管理

设置 Oracle 监听器密码(LISTENER)

Oracle RAC 监听配置

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

一、服务器端负载均衡配置1、为tnsnames.ora 添加相应的网络服务名(每个节点配置)

oracle@bo2dbp:~> more $ORACLE_HOME/network/admin/tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/oracle/db/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

remote_lsnr_gobo4 =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))

)

local_lsnr_gobo4a =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))

)

local_lsnr_gobo4b =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))

)

2、设置remote_listener参数

alter system set remote_listener='' scope=both sid='*';

SQL> show parameter instance_name

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

instance_name string GOBO4A

SQL> show parameter listener

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

local_listener string

remote_listener string

SQL> alter system set remote_listener='remote_lsnr_gobo4' scope=both sid='*';

System altered.

3、配置客户端tnsnames.ora

-->客户端为suse 10

SZDB:~ # ifconfig eth1 | grep "inet addr"|cut -d " " -f12|cut -d : -f2 #--客户端主机的ip

192.168.7.2

SZDB:~ # su - oracle

oracle@SZDB:~> tail -10 $ORACLE_HOME/network/admin/tnsnames.ora

GOBO4 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))

(LOAD_BALANCE = off) #--由于仅仅测试寄予服务器端的负载均衡,因此关闭客户端负载均衡选项

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = GOBO4)

)

)

#Author : Robinson Cheng

#Blog : http://blog.csdn.net/robinson_0612

4、检查监听情况

oracle@bo2dbp:~> lsnrctl status

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...

Service "GOBO4" has 2 instance(s).

Instance "GOBO4A", status READY, has 2 handler(s) for this service...

Instance "GOBO4B", status READY, has 1 handler(s) for this service..

.......

oracle@bo2dbs:~> lsnrctl status

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...

Service "GOBO4" has 2 instance(s).

Instance "GOBO4A", status READY, has 1 handler(s) for this service...

Instance "GOBO4B", status READY, has 2 handler(s) for this service...

..........

#--如果监听或数据库需要重启异常请考虑重新启动监听器或数据库

#--下面清空监听日志以便于后续统计连接信息

oracle@bo2dbp:/u01/oracle/db/network/log> cat /dev/null>listener_bo2dbp.log

oracle@bo2dbs:/u01/oracle/db/network/log> cat /dev/null>listener_bo2dbs.log

二、测试服务器端的负载均衡1、从客户端建立连接

oracle@SZDB:~> more load_balance.sh

#!/bin/bash

for i in {1..1000}

do

echo $i

sqlplus -S system/oracle@GOBO4 <

select instance_name from v\$instance;

EOF

sleep 1

done

exit 0

oracle@SZDB:~> ./load_balance.sh >srv_load_bal.log

2、分析监听日志

oracle@bo2dbp:/u01/oracle/db/network/log> more listener_bo2dbp.log

12-OCT-2012 12:00:10 * service_update * GOBO4B * 0 #节点bo2dbs上的实例GOBO4B的更新到bo2dbp上监听器的更新信息

12-OCT-2012 12:00:35 * service_update * GOBO4B * 0

12-OCT-2012 12:01:04 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50322)) * establish * GOBO4 * 0

12-OCT-2012 12:01:05 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50325)) * establish * GOBO4 * 0

12-OCT-2012 12:01:07 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50328)) * establish * GOBO4 * 0

12-OCT-2012 12:01:08 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50330)) * establish * GOBO4 * 0

#上面的日志片断中可以看出全部是客户端发起的到bo2dbp节点上的建立连接的信息

#下面来查看bo2dbs上的监听日志

oracle@bo2dbs:/u01/oracle/db/network/log> more listener_bo2dbs.log

12-OCT-2012 12:00:10 * service_update * GOBO4B * 0

12-OCT-2012 12:00:10 * service_update * GOBO4B * 0

12-OCT-2012 12:00:14 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=bo2dbs)(USER=oracle))(COMMAND=status)(ARGUMENTS=64)

(SERVICE=LISTENER_BO2DBS)(VERSION=169870080)) * status * 0

12-OCT-2012 12:00:35 * service_update * GOBO4B * 0

12-OCT-2012 12:00:35 * service_update * GOBO4B * 0

12-OCT-2012 12:01:04 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))(INSTANCE_NAME=GOBO4B)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=61862)) * establish * GOBO4 * 0

12-OCT-2012 12:01:07 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))(INSTANCE_NAME=GOBO4B)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=61868)) * establish * GOBO4 * 0

12-OCT-2012 12:01:09 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)

(USER=oracle))(INSTANCE_NAME=GOBO4B)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=61872)) * establish * GOBO4 * 0

#在12-OCT-2012 12:01:04时刻,连接信息中有INSTANCE_NAME=GOBO4B的连接信息,而节点bo2dbp上也有一条类似的信息,因此该条连接

#日志是由节点bo2dbp转发过来而建立的连接请求。

#同样在12-OCT-2012 12:01:07时刻,节点bo2dbp转发过来而建立的连接请求。

#小结一下,

#对于直接连接,监听器日志中将出现establish,且不含有INSTANCE_NAME=GOBO4B 字样

#而对于转发的连接,则转发节点与接收的节点同时存在连接信息,转发节点上存在连接信息的与普通的连接请求一样,

#而接收的节点上存在INSTANCE_NAME= 信息

3、检查负载均衡结果

oracle@SZDB:~> grep GOBO4A srv_load_bal.log |wc -l

755

oracle@SZDB:~> grep GOBO4B srv_load_bal.log |wc -l

245

#从上面的日志文件中可知总共有755个客户端连接到了gobo4a,有245各客户端连接到了gobo4b

#下面查看监听器日志来获得连接信息

#下面的查询中在节点bo2dbp上总共有接受了1000个用户连接

oracle@bo2dbp:/u01/oracle/db/network/log> grep establish listener_bo2dbp.log |wc -l

1000

#下面的查询查看是否有从节点bo2dbs转发过来的连接,结果为0,说明没有任何连接请求从bo2dbs转发过来

oracle@bo2dbp:/u01/oracle/db/network/log> grep INSTANCE_NAME=GOBO4 listener_bo2dbp.log |wc -l

0

#接下来查看节点bo2dbs的监听日志,可以看出总共接受了245个连接请求

oracle@bo2dbs:/u01/oracle/db/network/log> grep establish listener_bo2dbs.log |wc -l

245

#下面的过滤情况也表明在节点bo2dbs上的连接是从bo2dbp上转发的连接,而非客户端直接到bo2dbs的请求连接

oracle@bo2dbs:/u01/oracle/db/network/log> grep INSTANCE_NAME=GOBO4 listener_bo2dbs.log |wc -l

245

#从监听器的日志检查可以,测试中的连接全部请求到节点bo2dbp,是由于tnsnames.ora中ADDRESS的第一个IP地址就是bo2dbp的IP

#因此所有的连接都是请求到bo2dbp,而没有客户端发出到bo2dbs的连接请求

#其次是尽管在bo2dbp有1000个连接请求,而真正建立连接的只有755个,有245转发到了节点bo2dbs

三、总结      1、服务器端的负载均衡需要配置remote_listener参数,而该参数的值依赖于tnsnames.ora的连接字符串

2、对于基于服务器端的连接负载均衡,监听器会根据当前节点、实例上的连接负载情况进行转发到空闲的实例

3、转发的依据仅仅是当前节点监听的连接数量的多少,而非当前实例的过度负载

4、从上面的测试可以得出,各个节点的连接并不算均衡,是相对的均衡,因此应结合客户端连接负载协同工作

5、对于当前实例的过度负载的情形,应结合配置service方法来实现负载均衡

四、更多参考

有关基于用户管理的备份和备份恢复的概念请参考

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理

SYSTEM 表空间管理及备份恢复

SYSAUX表空间管理及恢复

Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

RMAN catalog 的创建和使用

基于catalog 创建RMAN存储脚本

基于catalog 的RMAN 备份与恢复

RMAN 备份路径困惑

有关ORACLE体系结构请参考

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

Oracle 回滚(ROLLBACK)和撤销(UNDO)

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

Oracle 实例和Oracle数据库(Oracle体系结构)

负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)相关推荐

  1. A10负载均衡设备GSLB(入向链路负载均衡)部署在内网中的实际应用

    前不久本人负责了一个全国制造业有名集团的负载均衡项目感触颇深通过项目了解到GSLB在特定环境当中的应用并且学到了许多相关的负载均衡知识.今天静下心来想想通过项目确确实实可以学到很多东西项目实施过程当中 ...

  2. 如何选择负载均衡设备?

    近年来,随着云计算与大数据的爆发式增长,众多大型数据中心都在积极部署或是升级负载均衡设备,在一大堆厂商负载均衡设备参数中,究竟选择哪家的才适合产品? 需要的朋友可以参考下PIOLINK 近年来,随着云 ...

  3. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册 ...

  4. java B2B2C Springcloud电子商城系统--------负载均衡(Load Balance)

    负载均衡(Load Balance) 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担.在此情况下,如果扔 ...

  5. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

  6. Oracle 11g RAC CRS-4535/ORA-15077

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 新安装了 ...

  7. Oracle 11g RAC搭建(VMware环境)

    Oracle 11g RAC搭建(VMware环境) Oracle 11g RAC搭建(VMware环境) 安装环境与网络规划 安装环境 网络规划 环境配置 1. 通过SecureCRT建立命令行连接 ...

  8. VMWARE下Oracle 11g RAC搭建

    Oracle 11g RAC搭建(VMware环境) Oracle 11g RAC搭建VMware环境 安装环境与网络规划 安装环境 网络规划 环境配置 通过SecureCRT建立命令行连接 关闭防火 ...

  9. Oracle 11gR2 RAC安装

    1.操作系统前期配置 BUG:安装grid时,检测互信会报以下错误可能与BUG有关 [INS-06006] Passwordless SSH connectivity not set up betwe ...

最新文章

  1. 3.1 关于半鞅的随机积分(Ren)
  2. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)
  3. JavaWeb-综合案例(用户信息)-学习笔记02【登录功能】
  4. 项目中的模块剥离成项目_使用MCEBuddy 2从电视录制中剥离广告
  5. layui 渲染select下拉选项 ,日期控件的用法
  6. 1157 全是1的最大子矩阵
  7. python 八数码_python 处理八数码 双向BFS 拼图游戏 | 学步园
  8. android高效简洁的代码实现直播礼物效果
  9. Python 自然语言处理笔记(五)——信息检索系统,基于Lucene实现
  10. 新猿木子李:0基础学python培训教程 Python操作Redis之有序集合类型
  11. Obsidian media extended以及bilibili插件链接总是打开外部网页以及退回编辑视图会弹出另外一个相同文件
  12. Qt动态图表更新实现
  13. getenv putenv setenv和unsetenv详解
  14. 昨天去做地推,在路上看见了这么繁茂的仙人掌
  15. getevent 获取报点
  16. Python 画二维和三维散点同心圆
  17. android—如何添加一个系统服务
  18. 但愿这不是真的,可是这是真的……
  19. 让写博客成为一种习惯
  20. 群晖DSM7 使用Zerotier实现无公网IP外网访问

热门文章

  1. 使用ASP.NET AJAX 1.0框架PreviewGlitz进行网页动画编程
  2. 2018秋招面经:斗鱼、滴滴、百度、美团、小米、腾讯
  3. zookeeper在Dubbo中的作用
  4. Linux文件预读对系统的影响
  5. NHibernate教程2(转载)
  6. 职场信念:人生的12种财富(转帖)
  7. CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention
  8. linux分区合并不损坏系统,更改磁盘分区后修复GRUB启动
  9. 【Anaconda】conda :未找到命令
  10. docker配置数据默认存储路径:--graph已过时,新版本中使用--data-root代替