您好,欢迎访问一九零五行业门户网

Oracle RAC系列之:测试RAC数据库集群功能

oraclerac是一个集群数据库,可以实现负载均衡和故障无缝切换。如何知道rac数据库已经实现了这些功能呢,下面就对此进行功能测试。一、负载均衡测试rac数据库的
oracle rac是一个集群数据库,可以实现负载均衡和故障无缝切换。如何知道rac数据库已经实现了这些功能呢,下面就对此进行功能测试。
一、 负载均衡测试
rac数据库的负载均衡是指对数据库连接的负载均衡,当一个新的会话连接到rac数据库时,通过指定的分配算法将请求分配到集群的任一节点上,这就是rac数据库完成的功能。负载均衡在rac中分为两种:一种是基于客户端连接的负载均衡;一种是基于服务器端的负载均衡。
1. rac客户端负载均衡
客户端连接的负载均衡配置起来非常简单,与rac数据库的实例负载和监听没有任何关系,因此也就不需要在集群节点进行任何设置,只要在客户端机器上的tnsnames.ora文件中添加负载均衡策略配置即可。这里以linux客户端为例进行介绍。
(1) 修改/etc/hosts文件
编辑/etc/hosts文件,将rac数据库相关的ip地址信息添加进去,例如:
192.168.12.231          node-rac1
192.168.12.232          node-rac2
192.168.12.230          node-vip1
192.168.12.240          node-vip2
(2) 查看rac数据库的service_names
[oracle@node-rac1 ~]$ sqlplus /as sysdba
sql*plus: release 11.1.0.6.0 - production on sun sep 12 22:05:53 2010
copyright (c) 1982, 2007, oracle.  all rights reserved.
connected to:
oracle database 11g enterprise edition release 11.1.0.6.0 - production
with the partitioning, real application clusters, olap, data mining
and real application testing options
name           type        value
---------------------- --------------     -------------
service_names    string        racdb
  这里需要说明的是,在配置rac负载均衡时,客户端连接的是rac数据库的服务名,而不是实例名,也就是service_name必须设置为“service_name = racdb”
(3) 修改oracle客户端的配置文件tnsnames.ora
racdb=
  (description =
  (address_list =
    (address = (protocol = tcp)(host = node-vip2)(port = 1521))
    (address = (protocol = tcp)(host = node-vip1)(port = 1521))
    (load_balance = yes)
    )
    (connect_data =
      (server = dedicated)
      (service_name = racdb)
    )
  )
这个配置文件的说明如下:
 load_balance = yes,表示启用连接负载均衡。在默认情况下“load_balance = no”,因此如果要配置负载均衡,必须添加设置“load_balance = yes”。启用负载均衡后,sqlnet会随机选择address_list列表中的任意一个监听,然后将请求分发到此监听上,通过这种方式完成负载均衡。如果“load_balance = no”,那么sqlnet会按照address_list列表中的顺序选择监听,只要这个监听正常就一直使用该监听。
 service_name = racdb,这个“racdb“是rac数据库的服务名,而非实例名。
(4)在客户端测试负载均衡
在客户端开启一个sqlplus连接,美国空间,执行如下操作:
[oracle@client ~]$ sqlplus system/xxxxxx@racdb
sql*plus: release 11.1.0.7.0 - production on sun sep 12 21:24:55 2010
copyright (c) 1982, 2008, oracle.  all rights reserved.
connected to:
oracle database 11g enterprise edition release 11.1.0.6.0 - production
with the partitioning, real application clusters, olap, data mining
and real application testing options
sql> show parameter instance_name
name         type        value
--------------------- --------------- -------------------
instance_name   string      racdb1
继续开启第二个sqlplus连接,执行如下操作:
[oracle@client ~]$ sqlplus system/xxxxxx@racdb
sql*plus: release 11.1.0.7.0 - production on sun sep 12 21:31:53 2010
copyright (c) 1982, 2008, oracle.  all rights reserved.
connected to:
oracle database 11g enterprise edition release 11.1.0.6.0 - production
with the partitioning, real application clusters, olap, data mining
and real application testing options
sql> show parameter instance_name
name         type        value
-------------------- --------------  ------------------
instance_name  string      racdb2
按照这种方法,陆续打开多个sqlplus连接,可以看到,每次连接到的实例都在racdb1和racdb2之间变化,这样就实现了rac数据库连接的负载均衡。
2. 服务器端的负载均衡
客户端的负载均衡解决了连接数据库的负载问题,但是由于连接是由客户端发起的,它并不知道rac数据库集群中各个节点的繁忙状态和连接信息,因此负荷较大的节点仍然会增加新的连接,这样就可能导致rac节点无法真正做到负载均衡。不过幸运的是,从oracle 10g开始,服务器端负载均衡就可以根据rac中各节点的负荷及连接数情况,将新的请求分配到集群中负载较低、连接数较少的节点上来,这样就从根本上实现了数据库的负载均衡,并且使客户端连接的负载均衡与服务器端的负载均衡可以配合使用,互不影响。
每个集群节点的负载情况是由pmon进程来定期更新的。pmon进程每3秒会将集群中每个节点的负载信息及连接数写入service_register中,当节点的负载发生变化时,将会立刻通知监听程序,最后由监听程序来决定将新的客户端连接分配到哪个节点上,通过这种方式,rac数据库实现了真正的负载均衡。
服务器端负载均衡配置也非常简单,只需在各节点的tnsnames.ora文件中添加一个对连接到各个节点进行监听的配置,然后在初始化参数中设置remote_listener即可。
(1)修改服务器端的tnsnames.ora
只需添加如下内容即可:
listeners_racdb =
  (address_list =
    (address = (protocol = tcp)(host = node-vip2)(port = 1521))
    (address = (protocol = tcp)(host = node-vip1)(port = 1521))
  )
(2)修改参数remote_listener
查看rac数据库的参数remote_listener:
sql> show parameter remote_listener
name           type      value
---------------       -----------   -----------
remote_listener   string   listeners_racdb
可以看到,remote_listener已经设置为“listeners_racdb”了。
如果remote_listener的值为空,可以通过如下命令修改每个实例的remote_listener参数:
sql> alter system set remote_listener='listeners_racdb' sid='node-rac1';
sql> alter system set remote_listener='listeners_racdb' sid='node-rac2';
这样,虚拟主机,服务器端的负载均衡就配置完成了。
其它类似信息

推荐信息