資料庫管理-第221期 Oracle的高可用-04(20240717)

yhw1809發表於2024-07-17

資料庫管理-第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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章