Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

전자정부프레임워크&Spring Project

로드밸런싱과 DB이중화(altHost)

함탕 2024. 12. 17. 17:11
728x90
728x90

서비스 이관 작업이 막바지에 접어들면서 문서작업을 진행하던 중

DB이관 업체로 부터 연락을 받았다.

 

DB이중화가 안되어있다는 연락이었다.

인프라가 바뀌면서 온갖 error와 bug를 해결하면서

고생끝에 안정화 시켜놓은 후 한숨 돌리고 있었는데

망치로 한대 얻어맞은 느낌이 들었다.

 

AS-IS는 3tier에 WEB/WAS/DB가 각 1대씩 구성되어 있었고

TO-BE는 3tier에 WEB/WAS/DB가 각 2대씩 이중화 되어있었다.

 

이중화 되어있었기에 이에따른 설정을 추가적으로 해줬어야 했고

나는 DB설정 또한 이중화 해줬어야 한다.

 

그렇지 않으면 1번DB가 죽으면 그래서 서비스는 정지되기 때문이다.

 

이를 해결하면서 로드밸런싱과 vip, altHost라는 용어를 듣게 되었고

이 용어들을 간략히 정리하면서 DB이중화 설정을 기록하고자 한다.

 

1. 로드밸런싱

로드 밸런싱은 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법이다.

즉 인프라가 이중화 되어있다면 로드밸런싱을 하고 있다는 뜻이다.

 

한쪽 서버가 죽거나 트래픽이 몰리면 사용자는 서비스를 제대로 사용할 수 없기에

이 로드밸런싱을 통해 다른쪽 서버로 돌려준다.

즉, 서버 장애시에도 서비스 중단없이 계속 운영할 수 있다.

 

트래픽을 두 서버에 고르게 분배거나 서버가 죽을 시 다른 서버로 돌려주는 주체를

로드 밸런서라고 한다.

 

로드 밸런서는 여러 대의 서버에 들어오는 트래픽을 효율적으로 분배하여 서버 간에 부하를 고르게 나누는 역할을 한다.

이렇게 함으로써 시스템의 성능고가용성을 시킨다.

 

TO-BE JBOSS는 standalone-ha.xml 설정파일을 사용하는데

여기서 ha의 의미가 고가용성(High Availablility)를 의미한다.

 

2. VIP(Virtual IP)

VIP는 즉 가상의IP라는 것인데 여러 개의 물리적 서버나 시스템이

하나의 IP로 외부에 노출될 수 있게 만들어주는 IP 주소다.

즉 여러 서버에서 사용될 수 있는 가상의 주소라고 생각하면 된다.

 

나는 그렇다면 VIP와 외부IP의 차이가 뭐지?

라는의문이 들었고 여러 검색을 통해 아래와 같이 정리했다.

 

외부IP

실제 물리적 서버에 할당된 공인된 IP주소

각각 하나의 IP가 있다.

ex: web1번의 ip: 203.0.113.10

      web2번의 ip:203.0.113.11

 

VIP

가상의 IP주소로 여러대의 서버가 공유하는 하나의 주소

web1번 2번의 각각 다른 IP주소를 하나로 묶어주는게 VIP다.

ex:

vip:192.167.1.200  ==>   web1번( 203.0.113.10 ), web2번( 203.0.113.11 )

 

하나로 묶어주기에 로드밸런서가 두 서버에 분배하여 장애없는

서비스가 가능하다.

 

 

3. DB이중화 조치(altHost)

1,2번 설명과 같이  WEB/WAS 이중화된 서버는

로드밸런싱을 통해 안정적인 서비스를 제공할 수 있다.

 

DB또한 1번 DB에 장애가 생겼을 시 2번 DB로 돌려야하는데

이를 위해 DB에서도 이중화 조치를 취해야한다.

 

큐브리드에서는 이를 위해 altHost라는 이중화 방법이 있다.

(DB종류에 따라 방법은 다르다)

 

 

db.properties 설정

#jdbc.driver=cubrid.jdbc.driver.CUBRIDDriver
#jdbc.url=jdbc:cubrid:XX.XXX.XXX.70:30000:testdb:::?altHost=XX.XXX.XXX.80:30000

 

 위와 같이 DB접속을 위한 설정 부분에

?altHost=IP:포트 를 추가해 주면 된다.

위 코드를 설명하면 아이피 끝자리 70인 DB에 장애가 발생하면

아이피 끝자리 80인 다른 DB로 자동 전환된다는 의미다.

 

즉, 첫 번째 주소(주 서버)에 연결을 시도하고 실패하면, Cubrid 드라이버가 자동으로

두 번째 주소(보조 서버)로 장애 조치(failover)를 수행하여 연결을 시도하는 방식이다.

이렇게 설정하면 DB 이중화가 가능하고 주 서버의 장애가 발생했을 때 보조 서버로 자동으로

전환되어 서비스가 중단되지 않도록 할 수 있다.

 

 

*추가 DB에서 외부로드 밸런서 사용

DB에서도 WEB/WAS가 사용하는 외부 로드 밸런서를(Nginx 등) 사용할 수 있다.

DB에서는 Master-Slave 구조를 사용한다.

Master DB에서는 쓰기를 사용하고 이를

Slave DB로 복제하여 읽기 작업을 분산하여 트래픽을 분산시킨다.

 

예를들어

#jdbc.url=jdbc:cubrid:XX.XXX.XXX.70:30000:testdb:::?altHost=XX.XXX.XXX.80:30000

위와 같이 이중화 설정을 한후 외부 로드 밸런서를 사용한다면

 

70번 DB에 데이터 insert/update를 하면(Master)

80번 DB는(slave) 70번 DB(master)의 데이터를 복제해 온다.

 

여러 사용자들로 부터 select, insert 작업이 들어온다고 가정하자.

보통 insert보다 select요청이 많을거다.

 

그러면 위 많은 트랜잭션을 분산하기 위해 select요청은 80번 DB로(slave)

insert요청은 70번 DB(master)로 보낸다.

 

이렇게 요청은 분산시킴으로서 DB에 가해지는 부담을 줄여주며

안정적으로 DB를 사용 할 수 있다.

 

 

 

마지막으로 다시 정리하자면

1. WEB/WAS는 로드밸런서를 통해 이중화를 한다.

2. DB의 이중화는 altHost설정을 통해 이중화를 한다.

728x90
300x250