3b08456407a36064ab6a8a73f2c14066.png

JDBC/RAC 负载均衡小结

中文社区 (MOSC)

中间件 (MOSC)

0 Replies

Last updated on February 16, 2015

This question is Not Answered.

下面是这几天大概看了一下相关的jdbc driver的代码做的一个简单的总结。

[Environment]

RAC URL:

jdbc:oracle:thin:@(DESCRIPTION=(ENABLE=BROKEN)(ADDRESS_LIST=(ADDRESS=(HOST=*.*.*.*)(PROTOCOL=TCP)(PORT=*****))(ADDRESS=(HOST=*.*.*.*)(PROTOCOL=TCP)(PORT=****))(LOAD_BALANCE=NO)(FAILOVER=YES))(CONNECT_DATA=(SERVICE_NAME=KHQNWpd0)(SERVER=DEDICATED)))

[JDBC Driver Process Logic]

每次创建新的JDBC Connection时,

STEP 1: Driver根据rac串里的 ADDRESS_LIST配置解析出可连的instance列表,同时根据 LOAD_BALANCE=YES|NO)(FAILOVER=YES|NO)

生成连接尝试以及重试策略 ConnStrategy,具体逻辑在 oracle.net.resolver.NavDescriptionList.setActiveChildren()

里。

为了方便理解,这里假设 ADDRESS_LIST 配了3个节点,N1,N2,N3

下面是一个简单总结,每次连接时,生成ConnStrategy,里面包含连接列表:

FAILOVER=YES              LOAD_BALANCE=YES

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

random select one node from (N1,N2,N3), 假设出来的是N2

然后再 random select one node from (N1,N3),假设出来的是N3

则:

ConnStrategy(列表: N2, N3, N1)

FAILOVER=YES              LOAD_BALANCE=NO

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

直接按照rac url配置的列表:

ConnStrategy(列表: N1, N2, N3)

FAILOVER=NO              LOAD_BALANCE=YES

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

random select one node from (N1,N2,N3)

FAILOVER=NO              LOAD_BALANCE=NO

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

总选列表的第一个 N1

STEP 2: 现在  ConnStrategy 列表有了(例如上例中FAILOVER=YES,LOAD_BALANCE=NO)

ConnStrategy(列表 N1, N2, N3),开始一一尝试,如果需要的话,意即,列表中

前一个失败了,则尝试列表下一个,直到试过列表里面所有的。

开始按照列表尝试(例如先尝试与N1)建立tcp socket连接,如果tcp socket建立成功

(i.e. listener是好的),则开始 STEP 3

如果遇到了IOException,则再尝试与下一个(N2) 建立tcp socket连接,如果tcp socket

建立成功, 则开始 STEP 3

如果再次遇到 IOException, 依上面逻辑类推。

STEP 3: JDBC 连接建立 packet交互过程 (这一步,前提是tcp socket建立成功)

3.1

To view full details, sign in with your My Oracle Support Community account.

Don't have a My Oracle Support

Community account? Click to get started!

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.Oracle offers a comprehensive and fully integrated stack of cloud applications and platform services. For more information about Oracle (NYSE:ORCL), visit oracle.com. © Oracle | Contact and Chat | Support | Communities | Connect with us7e74ff1c5e8f568c56d47081985382cf.png3dc927bdb53c435567ade7cd8caeb170.pngb134db6bb64e3626c8e74a908ba90592.png | Legal Notices | Terms of Use

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐