資料庫管理-第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
- MySQL資料庫高可用方案MySql資料庫
- ES資料庫高可用配置資料庫
- Oracle資料庫管理——表資料庫高水位及shrink操作Oracle資料庫
- posgresql資料庫高可用方案-patroniSQL資料庫
- Oracle RAC & Data Guard搭建高可用資料庫系統方案Oracle資料庫
- oracle 資料庫搭建高可用環境 容災參考。Oracle資料庫
- MySQL資料庫的高可用性分析MySql資料庫
- 高可用架構·Learning as we Go(第5期)架構Go
- 5、pgpool-II高可用性(一)資料庫的高可用性資料庫
- 資料庫高可用性簡史資料庫
- 資料庫管理-第14期 Oracle Vector DB & AI-01(20240210)資料庫OracleAI
- 資料庫管理-第157期 Oracle Vector DB & AI-08(20240301)資料庫OracleAI
- MySQL資料庫架構——高可用演進MySql資料庫架構
- Centos 7 搭建MariaDB 資料庫高可用CentOS資料庫
- 基於DRBD實現資料庫高可用資料庫
- Oracle資料庫管理Oracle資料庫
- 資料庫管理-第124期 資料庫圈的夜郎自大,危!(202301213)資料庫
- 資料庫管理-第142期 DBA?DBA!(20240131)資料庫
- RDMA網路下重思資料庫高可用資料庫
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫
- 資料庫管理-第122期 配置Halo資料庫(202301204)資料庫
- 確保Oracle 11g R2資料庫高可用性WQOracle資料庫
- Oracle——04同義詞與資料庫連結Oracle資料庫
- 資料庫管理-第120期 初探Halo資料庫(202301201)資料庫
- 資料庫管理-第145期 最強Oracle監控EMCC深入使用-02(20240205)資料庫Oracle
- Gitlab倉庫管理系統-高可用部署Gitlab
- 乾貨|上雲了,如何保障雲資料庫的高可用?資料庫
- 重拾資料庫04資料庫
- 前端特效【第04期】|果汁混合效果-下前端特效
- MySQL 資料高可用的實現思路MySql
- ORACLE 資料庫管理員的職責Oracle資料庫
- Oracle資料庫的空間管理技巧Oracle資料庫
- aix下oracle資料庫管理AIOracle資料庫
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構
- 第8章 理解自動資料庫管理資料庫
- 乾貨 | 京東雲資料庫RDS SQL Server高可用概述資料庫SQLServer
- 郭憶:網易資料庫高可用架構最新進展!資料庫架構