※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다.
[리눅스] DB 분산 (DRP, HAProxy, mariaDB, Master-Slave(Mirror Site) 방식)
※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다. 재난 복구 계획 (DRP : Disaster Recovery Plan)
taeh00n.tistory.com
위의 링크에서 DB 서버가 Active - Active 상태인 Mirror Site 방식을 구현했었다.
이번에는 Active - StandBy 상태인 Hot Site 방식을 구현해보겠다.
Mirror Site 방식은 MariaDB 자체에서 설정으로 가능했지만 Active - StandBy 상태를 만들어주기 위해선 keepalived를 설치해서 구현해보도록 하겠다.
Keepalived : 서버에 장애가 발생했을 때 자동으로 다른 서버가 그 역할을 해주는 것
1. Keepalived 설치
apt install -y keepalived
우선 keepalived를 설치한다
2. keepalived 설정파일 생성 (Master - Active 설정)
keepalived는 기존에 했던 것과 다르게 설정 파일이 생성되지 않아 사용자가 직접 생성해야한다.
vi /etc/keepalived/keepalived.conf
위와 같이 keepalived.conf 라는 설정 파일이 생성되었으면 설정을 해주겠다.
global_defs {
router_id node01
enable_script_security
script_user root
}
vrrp_script track_mariadb {
script "systemctl is-active mariadb"
interval 5
fall 4
rise 2
}
vrrp_instance VRRP1 {
state MASTER
interface ens33
virtual_router_id 101
priority 200
advert_int 1
virtual_ipaddress {
[가상 IP 주소]/24
}
track_script {
track_mariadb
}
}
한 부분씩 간단하게 살펴보겠다.
global_defs {
router_id node01
enable_script_security
script_user root
}
- 노드를 구분하기 위한 id 설정
- 스크립트 보안 기능을 활성화
- keepalived는 keepalived와 같은 권한으로 스크립트가 실행될 수 있기 때문에 root 권한으로 스크립트 실행하는 것으로 바꾼다.
vrrp_script track_mariadb {
script "systemctl is-active mariadb"
interval 5
fall 4
rise 2
}
이건 mariaDB의 상태를 모니터링 하는 것인데 서비스가 5초마다 활동중인지 테스트했을때 4번 연속으로 실패하면 장애로 간주하고, 2번 연속으로 성공하면 서비스가 정상으로 복구되었다고 판단하게 하는 문장이다.
이러면 장애가 나도 20초 후에 다른 서버가 active 상태가 될 것이다.
vrrp_instance VRRP1 {
state MASTER
interface ens33
virtual_router_id 101
priority 200
advert_int 1
virtual_ipaddress {
[가상 IP 주소]/24
}
track_script {
track_mariadb
}
}
가상 IP 10.10.10.200을 관리하며 Master 서버가 MariaDB 상태를 모니터링하고 문제가 발생하면 자동으로 다른 서버로 전환되도록 설정한 것이다.
여기서 DB1 서버와 DB2 서버의 가상 IP를 설정한다. 가상 DB1과 DB2의 가상 IP를 똑같이 설정해야 가상 IP로 접속을 시도 했을때 DB1 서버로만 접속하다가 DB1 서버가 장애가 발생 시 StandBy중이던 DB2 서버로 서비스를 한다.
3. keepalived 설정파일 생성 (Slave- Standby 설정)
Slave 서버에도 똑같이 keepalived를 설치한다.
apt install -y keepalived
keepalived 설정 파일을 생성한다.
vi /etc/keepalived/keepalived.conf
global_defs {
router_id node02
enable_script_security
script_user root
}
vrrp_script track_mariadb {
script "systemctl is-active mariadb"
interval 5
fall 4
rise 2
}
vrrp_instance VRRP1 {
state BACKUP
interface ens33
virtual_router_id 101
priority 100
advert_int 1
virtual_ipaddress {
[가상 IP 주소]/24
}
track_script {
track_mariadb
}
}
한 부분씩 간단하게 살펴보겠다.
global_defs {
router_id node02
enable_script_security
script_user root
}
노드를 구별하는 고유한 ID이다. Master 서버에서는 node01, Backup 서버에서는 node02처럼 설정한다.
vrrp_script track_mariadb {
script "systemctl is-active mariadb"
interval 5
fall 4
rise 2
}
MariaDB 상태를 체크하는 스크립트이다. 이 부분은 Master 서버와 동일하게 설정해야 한다.
vrrp_instance VRRP1 {
state BACKUP
interface ens33
virtual_router_id 101
priority 100
advert_int 1
virtual_ipaddress {
[가상 컴퓨터 IP]/24
}
track_script {
track_mariadb
}
}
Master 서버는 state MASTER로 설정, Backup 서버에서는 state BACKUP으로 설정한다. 이는 해당 서버가 대기 상태임을 의미하는 설정부분이다.
4. 테스트
Master 서버에만 설정된 가상 IP가 나타난다. 그 이유는 현재 Master가 Active 중이고 Slave는 Standby 상태이기 때문이다.
server_id를 확인해보면 1번 서버를 이용중인 것을 확인할 수 있다.
1번 서버의 keepalived를 종료해서 서비스가 안되게 해보니 약 20초 후에 Slave 서버가 가상 IP가 활성화되었다. 즉, Slave 서버가 Master 서버의 장애를 인지하고 Active 상태로 바껴서 서비스를 하고 있다는 뜻이다.
server_id =2 즉, 2번 DB 서버로 접속했다는 것이다.
'한화시스템 Beyond SW Camp > 기반기술' 카테고리의 다른 글
[리눅스] nginx로 Tomcat 분산 처리 (1) | 2024.12.04 |
---|---|
[Database] 부하 테스트 도구 (JMeter) (1) | 2024.12.03 |
[리눅스] DB 분산 (DRP, HAProxy, mariaDB, Master-Slave(Mirror Site) 방식) (0) | 2024.12.03 |
[Database] INDEX, 스토어드 프로시저, View, 반정규화 (0) | 2024.12.02 |
[Database] DB 성능 테스트 (Explain, Profiling) (0) | 2024.12.02 |