Connect to Oracle RAC Span FireWall [Use Python Test]

本文涉及的产品
云防火墙,500元 1000GB
简介:

某数据库扩容案例,数据库从原有的REDHAT CS模式改为RAC模式。应用程序原来使用的是单实例,在新环境上线前的调试过程当中遇到了一些问题,记录一下解决过程。

新环境如下:

Connect to Oracle RAC Span FireWall [Use Python Test] - 德哥(DiGoal,Just Do It!) - Not Only DBA
 

最左边的是应用程序,中间是防火墙,右边是RAC节点。

应用程序和RAC节点的连接经过了一道防火墙,防火墙在这里冲当了NAT(映射数据库的两个VIP)的角色。也就是说客户端看到的IP和数据库本身的VIP是不一样的(这是问题的关键)。

服务端的配置如下:

xxxx_a PREF: xxxx1 AVAIL: xxxx2
xxxx_b PREF: xxxx2 AVAIL: xxxx1
当前的实例与服务对应情况如下
Service xxxx_a is running on instance(s) xxxx1
Service xxxx_b is running on instance(s) xxxx2
通过配置客户端的FAILOVER模式连接RAC节点,
配置一的模式:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=${HOST_1})(PORT=xxxx))(ADDRESS=(PROTOCOL=TCP)(HOST=${HOST_2})(PORT=xxxx)))(LOAD_BALANCE = OFF)(FAILOVER = ON)(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=xxxx_b)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 600)(DELAY = 1))))
配置二的模式:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=${HOST_2})(PORT=xxxx))(ADDRESS=(PROTOCOL=TCP)(HOST=${HOST_1})(PORT=xxxx)))(LOAD_BALANCE = OFF)(FAILOVER = ON)(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=xxxx_b)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 600)(DELAY = 1))))
配置一和配置二的不同之处在于,HOST1和HOST2的先后。
准备PYTHON连接数据库的环境:
下载PYTHON连接数据库需要的so文件,32位版本cx_Oracle-5.0.3-10g-py24-1.i386.rpm,64位版本cx_Oracle-5.0.3-10g-py24-1.x86_64.rpm。
1. 连接模式一的测试:
shell> python
import cx_Oracle
dsn1=’模式一拷贝过来’
conn=cx_Oracle.connect(‘user’,'pwd’,dsn1)
cursor = conn.cursor()
cursor.execute(“select * from tbl_test”)
print cursor.fetchall()
执行到conn=cx_Oracle.connect(‘user’,'pwd’,dsn1)时,一直等待连接,最后报连接异常。
cx_Oracle.DatabaseError: ORA-12170: TNS:Connect timeout occurred
2. 连接模式二的测试:
shell> python
import cx_Oracle
dsn1=’模式二拷贝过来’
conn=cx_Oracle.connect(‘user’,'pwd’,dsn1)
cursor = conn.cursor()
cursor.execute(“select * from tbl_test”)
print cursor.fetchall()
连接正常,返回结果正常。
关闭非当前连接节点,重新执行SQL可以正常返回。
3. 修复连接模式一的异常:
把节点一的监听关闭。
重新使用连接模式一连接数据库,连接正常,返回结果正常。
4.在内网测试,(客户端和数据库的连接不过防火墙):
首先把关闭的监听开启,等待SERVICE在注册后,重新测试连接模式一和连接模式二,连接正常。关闭非当前连接节点,重新执行SQL可以正常返回。
总结:
这个测试结合了服务端的TAF特性和客户端的TAF特性。
并且反应了服务端TAF和客户端TAF的不同。
服务端TAF对于应用来说是透明的,最终建立连接的实例一个要看服务的FAILOVER模式,对于本例使用的AVAIL+ACTIVE模式的情况,连接的实例是跑服务的实例。
客户端的TAF配置决定了客户端首先和哪个实例建立联系,所以出现了通过防火墙时有一种情况不通,是因为首先建立联系的监听会返回给客户端REMOTE监听的VIP,而这个IP是内网IP,所以客户端再次与另一个实例建立联系就不可能了。而把其中的一个节点关闭后,客户端不能与第一个IP建立联系,自动向第二个IP(外网)发起请求,当然就可以成功了。
因为内网的话IP都是互通的,所以在内网不管怎么配置都不会有问题。
其实要解决这个问题的话,可以通过DNS解析来实现。
目录
相关文章
|
4月前
|
Oracle 关系型数据库
oracle的start with connect by prior如何使用 整理
oracle的start with connect by prior如何使用 整理
264 4
|
3月前
|
SQL Oracle 关系型数据库
Python连接Oracle
Python连接Oracle
37 0
|
5月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
120 2
|
5月前
|
Oracle 关系型数据库 数据库
Oracle数据库备份脚本分享-Python
Oracle数据库备份脚本分享-Python
154 0
|
5月前
|
Oracle 关系型数据库
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
|
6月前
|
存储 负载均衡 Oracle
|
6月前
|
自然语言处理 Python
【Python】已解决:Resource punkt not found. Please use the NLTK Downloader to obtain the resource:
【Python】已解决:Resource punkt not found. Please use the NLTK Downloader to obtain the resource:
682 1
|
6月前
|
自然语言处理 Java 开发工具
【Python】已解决Resource averaged_perceptron_tagger not found. Please use the NLTK Downloader to obtain t
【Python】已解决Resource averaged_perceptron_tagger not found. Please use the NLTK Downloader to obtain t
259 0
|
6月前
|
自然语言处理 Python
【Python】已解决:Resource stopwords not found. Please use the NLTK Downloader to obtain the resource:
【Python】已解决:Resource stopwords not found. Please use the NLTK Downloader to obtain the resource:
393 0