DB2 HADR環境下,應用的改變
最近根據專案的需求,搭建了
DB2 HADR (一個primary,2個standby), with a virtual ip
Dprop
搭建按部就班的進行,每個server上都有兩個網路卡,其中一個是HADR使用的,另個一個是對外服務使用
先載入了資料,然後構建HADR,設定dprop,最後部署資料庫維護指令碼。
關於和應用結合的技術方面的實現,做一個小的總結
在DB2 HADR環境下,對於WAS, 和backend 程式,需要做一點改動,這樣當primary和principal standby切換的時候,WAS和backend不用改,實現自動切換。
WAS和backend和資料庫連線使用的是一個DB2 HADR的virtual ip,virtual ip是存在primary server上面的浮動ip,當principal standby變成primary 的時候,浮動ip就會自動切換
primary和principal standby servers在同一個城市,實現的是資料庫的HA(高可用性),基於非常好的網路情況,同步方式是SYNC來確保資料的不會丟失,還有一個DR server在另外一個城市,對於DR,只能採用superasync的方式
從primary到DR的網路傳輸是4 MB每秒,測試表明,在系統業務量的高峰期,DR會在10分鐘內完成日誌的重做,這種程度的資料丟失是符合客戶的要求的。
對於HA的兩個server,要求全自動切換
對於DR server,需要手工切換
這個全自動切換涉及三個方面的內容
1. DB2 Database以及相關的DB2 SQL Replication(和其他專案的資料庫關聯來pull, push data),這就要求在HADR切換的時候,dprop也需要自動切換
對於這個問題,是透過修改下面的兩個指令碼來實現的,加上dprop啟停指令碼的呼叫就可以了,但是因為多個dprop,需要進行一點邏輯判斷,判斷是哪個例項的哪個資料庫,然後呼叫哪個指令碼
/usr/sbin/rsct/sapolicies/db2/hadrV105_stop.ksh
/usr/sbin/rsct/sapolicies/db2/hadrV105_start.ksh
可能並不是所有的HADR的指令碼的位置都是上面這樣的,可以透過類似下面的命令進行檢視
lsrsrc IBM.Application StartCommand StopCommand MonitorCommand
2. 對於WAS部分的datasource的設定,在原來的基礎上,要加上一個custome property: Seamless failover
這樣當principal standby變成primary的時候,一個正在進行的應用連線會等待,然後連線會自動切換到新的primary db2 database,繼續執行。
3. 對於後臺的一些應用,關於資料庫的連線資訊是放在一個property file中的,現在需要兩個property file了
其中一個property file,設定的是virtual ip的資訊和enableSeamlessFailover=true等方面的資訊
Java程式碼讀取這個資訊放到一個Properties物件中,在建立資料庫連線的時候,採用下面的方式
另外一個property file就是包括了DR資料庫的資訊,這樣如果HA的兩個伺服器都down了以後,手工改動crontab的呼叫。
另外注意的一點是,WAS的DR和DB2的DR是對應的,就是說,當DB2使用到DR的時候,WAS及時沒有出現問題,也會使用DR
考慮到使用DR的機會還是非常小的,這點客戶可以忍受。
DB2 HADR (一個primary,2個standby), with a virtual ip
Dprop
搭建按部就班的進行,每個server上都有兩個網路卡,其中一個是HADR使用的,另個一個是對外服務使用
先載入了資料,然後構建HADR,設定dprop,最後部署資料庫維護指令碼。
關於和應用結合的技術方面的實現,做一個小的總結
在DB2 HADR環境下,對於WAS, 和backend 程式,需要做一點改動,這樣當primary和principal standby切換的時候,WAS和backend不用改,實現自動切換。
WAS和backend和資料庫連線使用的是一個DB2 HADR的virtual ip,virtual ip是存在primary server上面的浮動ip,當principal standby變成primary 的時候,浮動ip就會自動切換
primary和principal standby servers在同一個城市,實現的是資料庫的HA(高可用性),基於非常好的網路情況,同步方式是SYNC來確保資料的不會丟失,還有一個DR server在另外一個城市,對於DR,只能採用superasync的方式
從primary到DR的網路傳輸是4 MB每秒,測試表明,在系統業務量的高峰期,DR會在10分鐘內完成日誌的重做,這種程度的資料丟失是符合客戶的要求的。
對於HA的兩個server,要求全自動切換
對於DR server,需要手工切換
這個全自動切換涉及三個方面的內容
1. DB2 Database以及相關的DB2 SQL Replication(和其他專案的資料庫關聯來pull, push data),這就要求在HADR切換的時候,dprop也需要自動切換
對於這個問題,是透過修改下面的兩個指令碼來實現的,加上dprop啟停指令碼的呼叫就可以了,但是因為多個dprop,需要進行一點邏輯判斷,判斷是哪個例項的哪個資料庫,然後呼叫哪個指令碼
/usr/sbin/rsct/sapolicies/db2/hadrV105_stop.ksh
/usr/sbin/rsct/sapolicies/db2/hadrV105_start.ksh
可能並不是所有的HADR的指令碼的位置都是上面這樣的,可以透過類似下面的命令進行檢視
lsrsrc IBM.Application StartCommand StopCommand MonitorCommand
2. 對於WAS部分的datasource的設定,在原來的基礎上,要加上一個custome property: Seamless failover
這樣當principal standby變成primary的時候,一個正在進行的應用連線會等待,然後連線會自動切換到新的primary db2 database,繼續執行。
3. 對於後臺的一些應用,關於資料庫的連線資訊是放在一個property file中的,現在需要兩個property file了
其中一個property file,設定的是virtual ip的資訊和enableSeamlessFailover=true等方面的資訊
### JCC Properties read through -Ddb2.jcc.propertiesFile=./conn.properties #db2.jcc.traceFile=./jcc.trace db2.jcc.outputDirectory=. ### Connection level properties used by ### DriverManager.getConnection(url, conProperties); user=db2psc password=password portNumber=50000 deferPrepares=false retrieveMessagesFromServerOnGetMessage=true clientApplicationInformation=hadrrosProg clientProgramName=mixedwl clientWorkstation=node03 defaultIsolationLevel=2 driverType=4 ### Properties for the Automatic Client Reroute #enableSysplexWLB=true #enableConnectionConcentrator=true enableSeamlessFailover=true clientRerouteAlternateServerName=192.168.142.100,192.168.142.100 clientRerouteAlternatePortNumber=50000,50000 enableClientAffinitiesList=1 maxRetriesForClientReroute=4 retryIntervalForClientReroute=120 ### properties read by the application such as server, port, ### dbName, taskprefix, autoCommit, fetchsize server=192.168.142.100 port=50000 dbName=hadb |
Java程式碼讀取這個資訊放到一個Properties物件中,在建立資料庫連線的時候,採用下面的方式
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Properties; public class Test1 { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String propFile = "C:\\Users\\IBM_ADMIN\\IBM\\rationalsdp\\ds1\\hadr\\src\\hadr.properties"; Properties connProp = new Properties(); FileInputStream dsPropFile = null; try { dsPropFile = new FileInputStream(propFile); } catch (FileNotFoundException fe) { System.out.println(fe.getMessage()); throw fe; } connProp.load(dsPropFile); String server = connProp.getProperty("server"); String port = connProp.getProperty("port"); String dbName = connProp.getProperty("dbName"); String url = "jdbc:db2://" + server + ":" + port + "/" + dbName; Connection bladeConn = null; PreparedStatement pstmt = null; try { bladeConn = DriverManager.getConnection(url, connProp); bladeConn.setAutoCommit(false); pstmt = bladeConn.prepareStatement("insert into t values(?,?)"); for (int i = 0; i < 100000000; i++) { pstmt.setInt(1, i); pstmt.setInt(2, i); pstmt.addBatch(); boolean retry=false; do { retry=false; try { if (i % 50 == 0) { pstmt.executeBatch(); bladeConn.commit(); System.out.println(i); } }catch(SQLException se) { //deal with client reroute exception int errorcode = se.getErrorCode(); System.out.println("SQLException: " + se); System.out.println("SQLCode: " + errorcode); if(bladeConn != null){ try{ bladeConn.rollback(); }catch(Exception e) { e.printStackTrace(); } } //endif if((errorcode == -30108) || (errorcode == -4498)){ System.out.println("connection is re-established, re-executing the failed transaction."); retry = true; } } } while(retry); } System.out.print("Batch execution completed."); } catch (Exception ex) { ex.printStackTrace(); System.exit(-1); } finally { try { pstmt.close(); bladeConn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } |
另外一個property file就是包括了DR資料庫的資訊,這樣如果HA的兩個伺服器都down了以後,手工改動crontab的呼叫。
另外注意的一點是,WAS的DR和DB2的DR是對應的,就是說,當DB2使用到DR的時候,WAS及時沒有出現問題,也會使用DR
考慮到使用DR的機會還是非常小的,這點客戶可以忍受。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/725820/viewspace-2064494/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DB2 HADR效能分析DB2
- DB2 HADR的heartbeat檢測DB2
- DB2環境變數管理方法集TODB2變數
- db2 hadr_spool_limitDB2MIT
- DB2 HADR對效能的影響DB2
- Linux環境變數詳解與應用Linux變數
- RAC環境下的SEQUENCE對應用的影響
- DB2 Linux環境安裝DB2Linux
- Linux下Java環境變數的配置LinuxJava變數
- 分散式儲存在雲環境下的應用和部署分散式
- 雲端計算環境下的BGP協議應用協議
- Tomcat的下載及環境變數配置Tomcat變數
- DB2 HADR takeover 問題 SQL1387WDB2SQL
- 什麼是環境變數?python設定環境變數有什麼用?變數Python
- Windows環境下的Nginx環境搭建WindowsNginx
- Linux下安裝Python,以及環境變數的配置LinuxPython變數
- Python-PyCharm下載與環境變數PythonPyCharm變數
- 在非k8s 環境下 的應用 使用 Dapr Sidekick for .NETK8SIDE
- window下使用nw.js開發桌面應用程式環境的搭建JS
- FreeRtos於嵌入式環境的應用
- GBASEDBTSERVER 環境變數7GBASEDBTSHMBASE 環境變數 (UNIX™)Server變數
- 遙感技術在環境監測中的應用:揭秘地球變化的天眼
- 企業環境下如何把ubuntu的dhcp改為靜態IPUbuntu
- makefile--變數的應用(下)變數
- 解鎖環境變數在雲原生應用中各種姿勢變數
- 簡述SHELL全域性環境變數與局變環境變數變數
- java 環境變數的配置Java變數
- jdk在linux下安裝、配置環境變數JDKLinux變數
- 在Linux下檢視和修改環境變數Linux變數
- 詳解基於DB2 z/OS環境下的資料庫調優技術CCDB2資料庫
- 配置環境變數變數
- postman環境變數Postman變數
- 環境變數path變數
- env 環境變數變數
- DOS環境變數變數
- Java 環境變數Java變數
- jdk環境變數JDK變數
- DB2 SQL改寫DB2SQL
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數