DB가 이중화되어있는데, 사용자 분산처리를 못하고 있다?!
이럴 때는 간단하게 데이터 베이스 connection URL 에 옵션을 주어 로드벨런싱 설정을 할 수 있다.
예를들어 오라클 DB 2개가 다음과 같이 주어져있다.
[IP : 123.123.123.123 / port : 1234]
[IP : 123.123.123.567 / port : 5678]
이 2개의 서비스를 JDBC 를 통해 로드밸런싱하여 연결하고 싶다면
URL 항목을 다음과 같이 작성하면 된다.
jdbc:oracle:thin:@(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=123.123.123.123)(PORT=1234))
(ADDRESS=(PROTOCOL=TCP)(HOST=123.123.123.567)(PORT=5678))
)
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=server_name)
)
)
각 세부의 내용은 다음과 같다. (이는 chatGPT의 도움을 받았다)
- ADDRESS_LIST: 여러 주소를 정의하여 로드 밸런싱 및 페일오버를 지원하는 구조.
- ADDRESS: 각각의 데이터베이스 서버 주소를 정의합니다.
(PROTOCOL=TCP)(HOST=123.123.123.123)(PORT=1234)와 같은 형식으로 설정합니다.
- ADDRESS: 각각의 데이터베이스 서버 주소를 정의합니다.
- LOAD_BALANCE=ON: 클라이언트가 로드 밸런싱을 수행하도록 설정합니다.
클라이언트는 각 연결 시 가능한 서버들 중에서 무작위로 하나를 선택합니다. - FAILOVER=ON: 데이터베이스 서버가 사용 불가능할 경우, 다른 주소로 자동으로 페일오버를 수행합니다.
- CONNECT_DATA: 데이터베이스 서비스의 연결 정보를 포함합니다.
- SERVER=DEDICATED: 서버 전용 프로세스를 사용합니다.
- SERVICE_NAME=service_name: 연결할 서비스 이름을 지정합니다. (service_name 에는 해당 서버의 이름을 적는다)
이렇게 URL에 간단히 옵션을 추가함으로서 사용량을 분산하여 DB에 접근이 가능하게 설정할 수 있다.
이러한 방법의 로드밸런싱의 장점은 무엇일까?
정리하면 고가용성, 부하 분산, 자원 효율성, 장애 복구 라고 할 수 있다.
부하 분산은 DB에 대한 병목을 줄이고 시스템 성능을 최적화하는 데 도움을 주며,
FailOver 옵션을 통해 한 DB 서버가 작동이 불가하여도 다른 서버가 대체할 수 있어 안정적으로 운영이 가능하다.
다만 랜덤하게 분산처리하기에 부하가 불균형하게 일어날 수 있으며
데이터의 일관성에 문제가 발생할 수도 있어, 적용 후 정상 작동이 되는지 모니터링을 해야 한다.
반응형
'👷삽질기록' 카테고리의 다른 글
java.lang.ClassCastException: oracle.sql.CLOB cannot be cast to java.lang.String (0) | 2023.04.20 |
---|---|
스프링 스케줄러 중복 작동 (0) | 2023.03.21 |
XSS 취약점 조치 (0) | 2022.11.16 |
There is no getter for property named 'idx' in 'class java.lang.Integer (0) | 2022.09.07 |
java.sql.SQLSyntaxErrorException: ORA-00911: invalid character (0) | 2022.08.31 |
댓글