資料庫管理-第221期 Oracle的高可用-04(20240717)
資料庫管理-第221期 Oracle的高可用-04(20240717)
作者:胖頭魚的魚缸(尹海文)
Oracle ACE Pro: Database(Oracle與MySQL)
PostgreSQL ACE Partner
10年資料庫行業經驗,現主要從事資料庫服務工作
擁有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等認證
墨天輪MVP、年度墨力之星,ITPUB認證專家、專家百人團成員,OCM講師,PolarDB開源社群技術顧問,HaloDB外聘技術顧問,OceanBase觀察團成員,青學會MOP技術社群(青年資料庫學習互助會)技術顧問
圈內擁有“總監”、“保安”、“國產資料庫最大敵人”等稱號,非著 名社恐(社交恐怖分子)
公眾號:胖頭魚的魚缸;CSDN:胖頭魚的魚缸(尹海文);墨天輪:胖頭魚的魚缸;ITPUB:yhw1809。
除授權轉載並標明出處外,均為“非法”抄襲
上一期講解了如何在RAC中配置支援TAC的服務,本期講解如何在服務側配置支援TAC的連線。
1 ADG
TAC不僅支援RAC內節點異常會話不中斷,在ADG環境主備切換時也能確保增刪查改不中斷,需要在備庫新增與主庫類似的服務,這裡將資料庫名稱和例項名字首調整為dbdg:
srvctl add service -db dbdg -pdb PDB1 -service tac_srv -preferred dbdg1,dbdg2 -available dbdg3,dbdg4 -failover_restore AUTO -failoverretry 30 -failoverdelay 10 -commit_outcome TRUE -failovertype AUTO -replay_init_time 1800 -retention 86400 -notification TRUE -drain_timeout 300 -stopoption IMMEDIATE -role primary srvctl start service -db dbdg -service tac_srv
這裡建議在備庫制定-role引數來確保資料庫在切換為primary角色後能正常啟動服務,如需支援讀寫分離可以分別在主備庫一個-role指定為physical standby的服務。主庫也建議進行相同配置:
srvctl modify service -db dbaas -service tac_srv -modifyconfig -role primary
2 連線配置
2.1 TNS
可以使用tnsname來實現支援TAC的連線訪問。
tac_srv= (DESCRIPTION= (CONNECT_TIMEOUT=120) (RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3) (ADDRESS_LIST= (LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521))) (ADDRESS_LIST= (LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=standby-scan)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=TAC_SRV)))
如果僅是支援單RAC內TAC,僅需新增一個ADDRESS_LIST即可。
2.2 JDBC
url=jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521)))(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=standby-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME='TAC_SRV')))
如果僅是支援單RAC內TAC,僅需新增一個ADDRESS_LIST即可。
2.3 JAVA連線池
2.3.1 Oracle UCP
Java應用中使用TAC,首選Oracle UCP。UCP 無縫整合 Oracle 資料庫叢集,應用端使用UCP能獲得其它連線池無法實現的一些好處,如支援 TAC,支援連線池快速排幹以及連線快速恢復(FCF,Fast Connection Failover),動態連線負載均衡(RCLB,Runtime Connection Load Balancing)等。
應用端引入UCP依賴比較簡單,如果用maven的話,pom檔案中增加ojdbc8依賴即可,如:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8-production</artifactId> <version>19.20.0.0</version> <type>pom</type> </dependency>
2.3.2 應用連線池基礎配置
以Spring Boot為例,v2.4.0及以上版本的配置屬性已經原生支援了Oracle UCP,因此,跟配置其它連線池一樣,只需要在Spring Boot配置檔案中指定即可,無需任何程式碼端變動:
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=on)(LOAD_BALANCE=off)(TRANSPORT_CONNECT_TIMEOUT=5)(RETRY_COUNT=20)(RETRY_DELAY=3)(ADDRESS_LIST=(LOAD_BALAN CE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521)))(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=standby-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=‘TAC_SRV’)))
spring.datasource.username=db_user
spring.datasource.password=xxxxxx
spring.datasource.type=oracle.ucp.jdbc.PoolDataSource
spring.datasource.oracleucp.connection-pool-name=pool-ncmsobs
spring.datasource.oracleucp.connection-factory-class-name=
oracle.jdbc.replay.OracleDataSourceImpl
spring.datasource.oracleucp.fast-connection-failover-enabled=true
spring.datasource.oracleucp.initial-pool-size=30
spring.datasource.oracleucp.min-pool-size=30
spring.datasource.oracleucp.max-pool-size=200
……
如果是用Spring Boot v2.4.0以下的老版本(如2.1.x),配置也很簡單,只需新增一個configuration Bean,指向配置檔案中的UCP配置段即可,如:
@Configuration
public class UCPDataSource {
@Bean(“ncmsobs”)
@Primary
@ConfigurationProperties(“
spring.datasource.oracleucp”) //指向配置檔案中的 UCP 配置段
public DataSourceds_ncmsobs() {
return PoolDataSourceFactory.getPoolDataSource();
}
}
使用UCP還可以指定JDBC的語句快取(Statement Cache):
spring.datasource.oracleucp.max-statements=200
或者
spring.datasource.oracleucp.connection-properties.oracle.jdbc.implicitStatementCacheSize=200
會話保持機制除了JDBC連線中的配置,還有:
spring.datasource.oracleucp.connection-properties.oracle.jdbc.ReadTimeout=30sec spring.datasource.oracleucp.connection-properties.oracle.net.keepAlive=true spring.datasource.oracleucp.connection-properties.oracle.net.TCP_KEEPIDLE=60 spring.datasource.oracleucp.connection-properties.oracle.net.TCP_KEEPINTERVAL=5 spring.datasource.oracleucp.connection-properties.oracle.net.TCP_KEEPCOUNT=3
總結
本期講解了在RAC+ADG環境下使用TAC的資料庫端與應用端的配置。
老規矩,知道寫了些啥。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31466763/viewspace-3022641/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫管理-第152期 Oracle Vector DB & AI-04(20240220)資料庫OracleAI
- Oracle資料庫管理——表資料庫高水位及shrink操作Oracle資料庫
- MySQL資料庫高可用方案MySql資料庫
- ES資料庫高可用配置資料庫
- posgresql資料庫高可用方案-patroniSQL資料庫
- 5、pgpool-II高可用性(一)資料庫的高可用性資料庫
- 資料庫高可用性簡史資料庫
- Centos 7 搭建MariaDB 資料庫高可用CentOS資料庫
- 資料庫管理-第14期 Oracle Vector DB & AI-01(20240210)資料庫OracleAI
- 資料庫管理-第157期 Oracle Vector DB & AI-08(20240301)資料庫OracleAI
- 確保Oracle 11g R2資料庫高可用性WQOracle資料庫
- 資料庫管理-第123期 Oracle相關兩個引數(202301205)資料庫Oracle
- MySQL資料庫架構——高可用演進MySql資料庫架構
- 資料庫管理-第122期 配置Halo資料庫(202301204)資料庫
- 資料庫管理-第120期 初探Halo資料庫(202301201)資料庫
- ORACLE 資料庫管理員的職責(轉)Oracle資料庫
- 資料庫管理-第124期 資料庫圈的夜郎自大,危!(202301213)資料庫
- Oracle DG管理資料庫屬性Oracle資料庫
- 第1章 Oracle資料庫簡介-RMOracle資料庫
- 第1章 Oracle資料庫簡介-DBMSOracle資料庫
- Gitlab倉庫管理系統-高可用部署Gitlab
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫
- RDMA網路下重思資料庫高可用資料庫
- ORACLE資料庫降低高水位線方法Oracle資料庫
- 資料庫管理-第145期 最強Oracle監控EMCC深入使用-02(20240205)資料庫Oracle
- 從Oracle資料庫管理員的角度看PostgreSQLOracle資料庫SQL
- 乾貨|上雲了,如何保障雲資料庫的高可用?資料庫
- oracle資料庫CPU特別高的解決方法Oracle資料庫
- 重拾資料庫04資料庫
- 資料庫管理-第142期 DBA?DBA!(20240131)資料庫
- 資料庫管理-第127期 LSM Tree(202301225)資料庫
- [LeeCode 資料庫刷題] 177. 第 N 高的薪水資料庫
- 【LeeCode 資料庫刷題】177. 第 N 高的薪水資料庫
- 使用 MaxScale 實現資料庫的高可用性和彈性資料庫
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構
- 資料庫高可用面臨的挑戰與解決之道|OceanBaseDev資料庫dev
- 阿里雲Polardb國產資料庫高可用部署實踐阿里資料庫
- 基於 Apache ShardingSphere 構建高可用分散式資料庫Apache分散式資料庫