11g集群新特性-scan机制
关于11g集群跟10g有过一定的变化,虽然主要的集群件原理相同,不过关于集群的安装由原来的clusterware集群见改为GI,而asm则被封装到GI中,不像10g时asm是被封装到oracle database软件中,关于集群的管理也有些变化,例如集群命令更加多了,用grid用户来管理集群和asm,而oracle用户就只需要管理oracle database,asm上的工具变化也较多,出现了卷形式的asm文件系统acfs,ohasd进程来管理原来的ocssd,crsd,evmd进程等,总之11g的集群确实有一些新的特性和变化,来新公司工作一个多月了,算是基本稳定了,下半年需要花点时间研究o的东西了。
这里小鱼主要学习下11g GI中比较显著的特点scan ip,scan(Single Client Access Name)的思想主要是在客户端和服务器端添加一个虚拟的服务层,就是所谓的scan ip以及scan ip listener,在客户端仅仅只需要配置scan ip的tns信息,然后用数据库集群的scan ip listener连接到数据库集群,scan ip listener转发连接请求到local listener上。
简单来讲就是以前在10g环境下通过vip连接到集群的各个节点,现在中间又多了一层scan ip listener,scan ip listener会先接收客户端的scan ip请求,然后转发到各个本地的local listener,无疑如果集群环境做出变更,例如增加删除节点都不会对scan ip和scan ip listener有影响,此时无需去更改客户端的配置。
需要注意的是scan按照o的建议需要三个scan ip和三个scan ip listener来实现scan特性的负载均衡和故障切换,当然那种情况我们需要dns服务或者Grid Naming Server(GNS)实现,这里由于小鱼只分配一个scan ip,也就没有配置dns或者gns来显示scan ip的负载均衡和故障切换了,这个并不影响scan的原理。
[oracle@rac101 admin]$ cat /etc/hosts
192.168.56.165 rac101
192.168.56.166 rac102
10.10.0.11 rac101-priv
10.10.0.12 rac102-priv
192.168.56.11 rac101-vip
192.168.56.12 rac102-vip
192.168.56.215 racscan
这个测试库的scan ip和scan ip listener是加载到rac101节点上的。
[root@rac101 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ACFS.dg
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.ASMDATA.dg
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.DATA.dg
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.LISTENER.lsnr
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.asm
ONLINE ONLINE rac101 Started
ONLINE ONLINE rac102 Started
ora.eons
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.gsd
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.net1.network
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.ons
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.registry.acfs
ONLINE ONLINE rac101
ONLINE ONLINE rac102
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac101
ora.oc4j
1 ONLINE ONLINE rac101
ora.rac101.vip
1 ONLINE ONLINE rac101
ora.rac102.vip
1 ONLINE ONLINE rac102
ora.scan1.vip
1 ONLINE ONLINE rac101
ora.xiaoyu.db
1 ONLINE ONLINE rac101 Open
2 ONLINE ONLINE rac102 Open
查看进程:
[root@rac101 ~]# ps -ef|grep lsn
grid 3587 1 0 03:23 ? 00:00:00 /db/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
grid 3590 1 0 03:23 ? 00:00:00 /db/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
root 12861 12680 0 06:10 pts/2 00:00:00 grep lsn
[root@rac102 ~]# ps -ef|grep lsn
grid 4263 1 0 03:24 ? 00:00:00 /db/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
root 11926 11853 0 06:11 pts/1 00:00:00 grep lsn
注意上面的scan ip listener的用户宿主是grid用户,这里需要特别注意的,接下来看看这个scan ip listener上面注册了哪些服务。
[grid@rac101 ~]$ lsnrctl status LISTENER_SCAN1
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-JUL-2013 21:20:00
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
------------------------
Alias LISTENER_SCAN1
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 08-JUL-2013 21:05:36
Uptime 0 days 0 hr. 14 min. 27 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /db/app/11.2.0/grid/network/admin/listener.ora
Listener Log File /db/app/11.2.0/grid/log/diag/tnslsnr/rac101/listener_scan1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.215)(PORT=1521)))
Services Summary...
Service "xiaoyu" has 2 instance(s).
Instance "xiaoyu1", status READY, has 1 handler(s) for this service...
Instance "xiaoyu2", status READY, has 1 handler(s) for this service...
Service "xiaoyuXDB" has 2 instance(s).
Instance "xiaoyu1", status READY, has 1 handler(s) for this service...
Instance "xiaoyu2", status READY, has 1 handler(s) for this service...
The command completed successfully
这里我们发现这个scan ip listener上面注册了service xiaoyu服务,而这个服务下装载了两个instance xiaoyu1和xiaoyu2,这里也就说明了如果通过scan ip listener的xiaoyu服务去连接数据库有可能会把这个服务会把这个连接漂移到不同的instance中,还有需要注意的是这个scan ip listen接受的仅仅只有scan ip 192.168.56.215的请求服务。
通过上面的描述我们基本知道了scan ip和scan ip listener特性及其在scan机制中发挥的作用,接下来我们看看11g下scan机制来实现负载均衡和TAF。
负载均衡:由于scan的机制特性会将连接映射到本地的local listener上面的,scan机制需要初始化参数文件中的参数remote_listener,如果这个参数配置错误会影响scan ip listener无法去监听scan ip的请求。
SQL> show parameter remote_listener;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_listener string racscan:1521
remote_listener参数默认取值就是scan_name:1521,这里也就是racscan:1521,我们也不需要去配置remote_listener来实现负载均衡。
Load_balance的测试用例:
SQL> conn sy/oracle@192.168.56.215:1521/oracle
Connected.
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
SQL> conn xiaoyu/xiaoyu@192.168.56.215:1521/xiaoyu;
Connected.
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db1
通过上面的看出通过scan ip可能会随机连接到不同的节点。
TAF切换:关于client side的failover这里由于比较简单就不演示了,client side的failover会根据连接的tns的address列表连接在建立连接时就会做出failover的选择,选择一个可用的连接。
接下来要测试的是TAF(transaction application failover)切换,首先我们需要在客户端进行配置TAF的tns链接文件。
列出利用scan特性来连接集群的tnsnames.ora文件
[oracle@rac101 admin]$ less tnsnames.ora
db =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racscan)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xiaoyu)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 8)
(DELAY = 5)
)
)
)
看出这里的 (ADDRESS = (PROTOCOL = TCP)(HOST = racscan)(PORT = 1521))这里用的是racscan,也就是scan ip地址.
测试TAF:
SQL> conn sys/oracle@db;
Connected.
SQL> select FAILOVER_TYPE,FAILOVER_METHOD,inst_id from gv$session where sid in (select userenv('sid') from dual);
FAILOVER_TYPE FAILOVER_M INST_ID
------------- ---------- ----------
SELECT BASIC 1
关闭节点1的实例xiaoyu1
[oracle@rac101 ~]$ srvctl stop instance -d db -i db1
此时这个session依然还在连接,不过已经通过scan 漂移到及节点2实例xiaoyu2上面。
SQL> select * from dual;
D
-
X
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
关于11g集群跟10g有过一定的变化,虽然主要的集群件原理相同,不过关于集群的安装由原来的clusterware集群见改为GI,而asm则被封装到GI中,不像10g时asm是被封装到oracle database软件中,关于集群的管理也有些变化,例如集群命令更加多了,用grid用户来管理集群和asm,而oracle用户就只需要管理oracle database,asm上的工具变化也较多,出现了卷形式的asm文件系统acfs,ohasd进程来管理原来的ocssd,crsd,evmd进程等,总之11g的集群确实有一些新的特性和变化,来新公司工作一个多月了,算是基本稳定了,下半年需要花点时间研究o的东西了。
这里小鱼主要学习下11g GI中比较显著的特点scan ip,scan(Single Client Access Name)的思想主要是在客户端和服务器端添加一个虚拟的服务层,就是所谓的scan ip以及scan ip listener,在客户端仅仅只需要配置scan ip的tns信息,然后用数据库集群的scan ip listener连接到数据库集群,scan ip listener转发连接请求到local listener上。
简单来讲就是以前在10g环境下通过vip连接到集群的各个节点,现在中间又多了一层scan ip listener,scan ip listener会先接收客户端的scan ip请求,然后转发到各个本地的local listener,无疑如果集群环境做出变更,例如增加删除节点都不会对scan ip和scan ip listener有影响,此时无需去更改客户端的配置。
需要注意的是scan按照o的建议需要三个scan ip和三个scan ip listener来实现scan特性的负载均衡和故障切换,当然那种情况我们需要dns服务或者Grid Naming Server(GNS)实现,这里由于小鱼只分配一个scan ip,也就没有配置dns或者gns来显示scan ip的负载均衡和故障切换了,这个并不影响scan的原理。
[oracle@rac101 admin]$ cat /etc/hosts
192.168.56.165 rac101
192.168.56.166 rac102
10.10.0.11 rac101-priv
10.10.0.12 rac102-priv
192.168.56.11 rac101-vip
192.168.56.12 rac102-vip
192.168.56.215 racscan
这个测试库的scan ip和scan ip listener是加载到rac101节点上的。
[root@rac101 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ACFS.dg
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.ASMDATA.dg
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.DATA.dg
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.LISTENER.lsnr
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.asm
ONLINE ONLINE rac101 Started
ONLINE ONLINE rac102 Started
ora.eons
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.gsd
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.net1.network
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.ons
ONLINE ONLINE rac101
ONLINE ONLINE rac102
ora.registry.acfs
ONLINE ONLINE rac101
ONLINE ONLINE rac102
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac101
ora.oc4j
1 ONLINE ONLINE rac101
ora.rac101.vip
1 ONLINE ONLINE rac101
ora.rac102.vip
1 ONLINE ONLINE rac102
ora.scan1.vip
1 ONLINE ONLINE rac101
ora.xiaoyu.db
1 ONLINE ONLINE rac101 Open
2 ONLINE ONLINE rac102 Open
查看进程:
[root@rac101 ~]# ps -ef|grep lsn
grid 3587 1 0 03:23 ? 00:00:00 /db/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
grid 3590 1 0 03:23 ? 00:00:00 /db/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
root 12861 12680 0 06:10 pts/2 00:00:00 grep lsn
[root@rac102 ~]# ps -ef|grep lsn
grid 4263 1 0 03:24 ? 00:00:00 /db/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
root 11926 11853 0 06:11 pts/1 00:00:00 grep lsn
注意上面的scan ip listener的用户宿主是grid用户,这里需要特别注意的,接下来看看这个scan ip listener上面注册了哪些服务。
[grid@rac101 ~]$ lsnrctl status LISTENER_SCAN1
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-JUL-2013 21:20:00
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
------------------------
Alias LISTENER_SCAN1
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 08-JUL-2013 21:05:36
Uptime 0 days 0 hr. 14 min. 27 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /db/app/11.2.0/grid/network/admin/listener.ora
Listener Log File /db/app/11.2.0/grid/log/diag/tnslsnr/rac101/listener_scan1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.215)(PORT=1521)))
Services Summary...
Service "xiaoyu" has 2 instance(s).
Instance "xiaoyu1", status READY, has 1 handler(s) for this service...
Instance "xiaoyu2", status READY, has 1 handler(s) for this service...
Service "xiaoyuXDB" has 2 instance(s).
Instance "xiaoyu1", status READY, has 1 handler(s) for this service...
Instance "xiaoyu2", status READY, has 1 handler(s) for this service...
The command completed successfully
这里我们发现这个scan ip listener上面注册了service xiaoyu服务,而这个服务下装载了两个instance xiaoyu1和xiaoyu2,这里也就说明了如果通过scan ip listener的xiaoyu服务去连接数据库有可能会把这个服务会把这个连接漂移到不同的instance中,还有需要注意的是这个scan ip listen接受的仅仅只有scan ip 192.168.56.215的请求服务。
通过上面的描述我们基本知道了scan ip和scan ip listener特性及其在scan机制中发挥的作用,接下来我们看看11g下scan机制来实现负载均衡和TAF。
负载均衡:由于scan的机制特性会将连接映射到本地的local listener上面的,scan机制需要初始化参数文件中的参数remote_listener,如果这个参数配置错误会影响scan ip listener无法去监听scan ip的请求。
SQL> show parameter remote_listener;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_listener string racscan:1521
remote_listener参数默认取值就是scan_name:1521,这里也就是racscan:1521,我们也不需要去配置remote_listener来实现负载均衡。
Load_balance的测试用例:
SQL> conn sy/oracle@192.168.56.215:1521/oracle
Connected.
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
SQL> conn xiaoyu/xiaoyu@192.168.56.215:1521/xiaoyu;
Connected.
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db1
通过上面的看出通过scan ip可能会随机连接到不同的节点。
TAF切换:关于client side的failover这里由于比较简单就不演示了,client side的failover会根据连接的tns的address列表连接在建立连接时就会做出failover的选择,选择一个可用的连接。
接下来要测试的是TAF(transaction application failover)切换,首先我们需要在客户端进行配置TAF的tns链接文件。
列出利用scan特性来连接集群的tnsnames.ora文件
[oracle@rac101 admin]$ less tnsnames.ora
db =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racscan)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xiaoyu)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 8)
(DELAY = 5)
)
)
)
看出这里的 (ADDRESS = (PROTOCOL = TCP)(HOST = racscan)(PORT = 1521))这里用的是racscan,也就是scan ip地址.
测试TAF:
SQL> conn sys/oracle@db;
Connected.
SQL> select FAILOVER_TYPE,FAILOVER_METHOD,inst_id from gv$session where sid in (select userenv('sid') from dual);
FAILOVER_TYPE FAILOVER_M INST_ID
------------- ---------- ----------
SELECT BASIC 1
关闭节点1的实例xiaoyu1
[oracle@rac101 ~]$ srvctl stop instance -d db -i db1
此时这个session依然还在连接,不过已经通过scan 漂移到及节点2实例xiaoyu2上面。
SQL> select * from dual;
D
-
X
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29065182/viewspace-1104215/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29065182/viewspace-1104215/