靈活實現RAC三節點的負載均衡及TAF配置(一)
這兩天配置了一個三節點的RAC環境,想起前一段時間Thomas Zhang給我出的一個題目,配置一個三節點RAC環境的複雜負載均衡以及Transparent Application Failover的服務名。現在有環境了,可以將給出驗證後的結果了。
這篇文章給出問題以及問題的實現。
首先描述一下3臺RAC伺服器,IP地址分別為172.25.198.222、172.25.198.223和172.25.198.226,對應的VIP分別是172.25.198.224、172.25.198.225和172.25.198.227。資料庫版本是10203 for Solaris sparc 64。
資料庫名為testrac,三個例項分別為testrac1、testrac2、testrac3。
首先看一下Thomas Zhang給出的題目需求:
給你個題目,我上次搞了好一會兒,呵呵
需求:一個RAC,三個節點node1,node2,node3。
兩臺app server A和B
要求:1)正常情況下,server A透過node1和node2訪問資料庫,server B透過node3訪問資料。
server A透過node1和node2時要load balance
2)當node1異常,server A上的應用透過node2訪問
當node2異常,server A上的應用透過node1訪問
3)當node1,node2同時異常,server A上的應用透過node3全部接管
4)當node3異常,server B上的應用透過node1/node2接管並Load Balance.
TNSNAMES中的配置可是是很靈活的,使用者可以透過配置服務名,使得使用者訪問RAC環境中的一個、多個或全部的例項,可以在訪問的例項中實現輪巡檢查機制或負載均衡機制,還可以配置Transparent Application Failover功能。比如上面這個要求,就非常的靈活,不但要求不同的伺服器訪問不同的例項,還要求配置負載均衡以及TAF,這就使得TNSNAMES服務的配置比較複雜,不過也正好體現了TNS配置的靈活性。
下面給出根據這個要求的TNSNAMES.ORA的配置:
SERVICEA =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC1)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(BACKUP = SERVICEA_BACKUP)
)
)
)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC2)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(BACKUP = SERVICEA_BACKUP)
)
)
)
(LOAD_BALANCE = yes)
)
SERVICEB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.227)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC3)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(BACKUP = SERVICEA)
)
)
)
SERVICEA_BACKUP =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC1)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(BACKUP = SERVICEA_BACKUP)
)
)
)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC2)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(BACKUP = SERVICEA_BACKUP)
)
)
)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.227)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC)
(INSTANCE_NAME = TESTRAC3)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(BACKUP = SERVICEA)
)
)
)
(LOAD_BALANCE = no)
)
簡單描述一下配置的思路。將上面3個服務名的配置分別新增到server A和server B的TNSNAMES.ORA檔案中。
在server A中透過SERVICEA服務名進行訪問,在server B中透過SERVICEB服務名進行訪問。SERVICEA_BACKUP是SERVICEA所需的TAF的BACKUP服務。
SERVICEA指定了兩個DESCRIPTION,一個指定訪問TESTRAC1例項(透過指定INSTANCE_NAME來實現),一個指定訪問TESTRAC2例項,且在兩個DESCRIPTION之間實現負載均衡(透過指定LOAD_BALANCE=YES來實現)。
SERVICEB很簡單,就是配置TESTRAC3例項的連線方式。
這樣server A上的程式透過SERVICEA可以負載均衡的訪問例項TESTRAC1和TESTRAC2,而server B上的程式透過SERVICEB可以訪問例項TESTRAC3。這滿足了第一點要求。
剩下的3點都是TAF有關,先來看看最簡單的最後一條要求,當node3異常,server B上的應用透過node1/node2接管並Load Balance。而SERVICEB的TAF配置的BACKUP服務指向的就是SERVICEA,也就是說,如果例項TESTRAC3出現了失敗,server B會使用SERVICEA作為切換服務名,很自然的實現了在TESTRAC1和TESTRAC2上負載均衡的接管失敗會話。
剩下的兩點的實現透過SERVICEA_BACKUP來實現。可以看到,SERVICEA中配置了的兩個DESCRIPTION,分別對應TESTRAC1例項和TESTRAC2例項。而這兩個例項的FAILOVER_MODE的BACKUP配置是一樣的,都是指向SERVICEA_BACKUP服務,也就是說,無論TESTRAC1例項異常,還是TESTRAC2例項異常,都會使用SERVICEA_BACKUP服務作為切換服務。
下面來看看SERVICEA_BACKUP服務,這個服務順序配置了TESTRAC1、TESTRAC2和TESTRAC3三個服務的DESCRIPTION,且這三個服務之間沒有采用負載均衡的策略(LOAD_BALANCE=no),這樣使用者在使用這個配置的時候,會首先嚐試第一個DESCRIPTION:TESTRAC1,如果TESTRAC1服務可以連線成功,就使用這個服務,否則會嘗試第二個DESCRIPTION:TESTRAC2,同樣如果連線成功,就使用TESTRAC2,否則使用最後一個DESCRIPTION:TESTRAC3。
當例項TESTRAC1發生異常,透過TAF切換到SERVICEA_BACKUP,首先找到的就是TESTRAC1的DESCRIPTION,但是TESTRAC1已經發生故障,因此會繼續尋找下一個DESCRIPTION,於是就找到了TESTRAC2服務。
當例項TESTRAC2發生異常,透過TAF切換到SERVICEA_BACKUP,首先找到的是TESTRAC1的DESCRIPTION,如果TESTRAC1正常,就會連線到TESTRAC1上。
如果恰好TESTRAC1和TESTRAC2例項都發生異常,切換到SERVICEA_BACKUP後,會先後跳過失敗TESTRAC1和TESTRAC2的DESCRIPTION,最終找到TESTRAC3,並連線。從而滿足了第二和第三點需求。
上面配置就實現了3個節點間靈活的負載均衡以及透明應用失敗切換的配置。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-590914/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 靈活實現RAC三節點的負載均衡及TAF配置(三)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(五)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(二)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(四)負載
- 【RAC】RAC中的負載均衡和故障切換--TAF配置負載
- dubbo(三):負載均衡實現解析負載
- RAC負載均衡的簡單測試(三)負載
- orleans叢集及負載均衡實現負載
- 配置 RAC 負載均衡與故障轉移負載
- Oracle RAC 客戶端負載均衡配置Oracle客戶端負載
- [zt] RAC的負載均衡負載
- DNS負載均衡的配置與特點DNS負載
- Nginx 高階篇(三)負載均衡的實現Nginx負載
- RHEL 7配置HAProxy實現Web負載均衡Web負載
- 伺服器負載均衡原理及實現伺服器負載
- nginx實現負載均衡Nginx負載
- RAC負載均衡的簡單測試(一)負載
- 配置IIS的負載均衡負載
- 使用LVS實現負載均衡原理及安裝配置詳解負載
- 使用 LVS 實現負載均衡原理及安裝配置詳解負載
- 負載均衡之Haproxy配置詳解(及httpd配置)負載httpd
- 淺談RAC中的負載均衡負載
- Flume負載均衡配置負載
- apache 負載均衡配置Apache負載
- HAProxy負載均衡器的安裝及配置負載
- GRPC 負載均衡實現RPC負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- Ribbon實現負載均衡負載
- Oracle負載均衡實現方式Oracle負載
- Nginx + IIS 實現負載均衡Nginx負載
- 兩種負載均衡的配置。負載
- Nginx實現簡單的負載均衡Nginx負載
- Nginx實現叢集的負載均衡配置過程詳解Nginx負載
- 使用LVS實現負載均衡的原理及安裝配置例項詳解負載
- 雙活資料中心負載均衡理解負載
- Go實現了一個負載均衡器Go負載
- 一篇有趣的負載均衡演算法實現負載演算法
- 用Nginx實現Session共享的均衡負載NginxSession負載