※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다.
[리눅스] DB 분산 (DRP, HAProxy, mariaDB, Master-Slave(Mirror Site) 방식)
※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다. 재난 복구 계획 (DRP : Disaster Recovery Plan)
taeh00n.tistory.com
[리눅스] DB 분산 (Master-Slave(Hot Site) 방식)
※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다. https://taeh00n.tistory.com/entry/Database-DB-%EB%B6
taeh00n.tistory.com
위의 두 가지 방법으로 Active-Active, Active-Standby 상태로 DB를 구성할 수 있었다.
지금까지는 두개의 DB 서버로 DB 서버를 구성했는데 DB서버가 3개일때는 어떻게 구성해야할까?
지금까지 배운 방식인 Master-Slave 방식으로 3번째 DB서버까지 추가하면 SPOF(Single Point of Failure)이 발생할 수 도 있다.
SPOF(Single Point of Failure) : 서버 하나가 동작하지 않으면 전체가 마비되는 것
이러한 문제를 해결하기 위한 방법은 클러스터링을 사용한 DB 구성이다.
여러 DB서버가 서로 하나처럼 연결돼서 하나의 시스템처럼 동작하는 것이다. 각 서버는 데이터를 동기화하고 하나의 서버가 고장나도 다른 서버가 동작을 하며 부하 분산을 통해 성능도 최적화 할 수 있다.
3개의 서버 모두 mariaDB가 다운되어있고 바인드 주소 설정, DB 서버 초기화까지 된 상태에서 시작하도록 하겠다.
[리눅스] mariaDB - DB실습 (Mysql Workbench로 원격 접속)
※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다. https://taeh00n.tistory.com/entry/%EB%A6%AC%EB%88%85
taeh00n.tistory.com
#DB 설치
apt update
apt install -y mariadb-server
#vi /etc/mysql/mariadb.conf.d/50-server.cnfmariadb 파일에서 바인드 주소 설정
bind-address = 0.0.0.0
# mariadb 실행
systemctl restart mariadb
# mariadb 실행 확인
systemctl status mariadb
apt install -y net-tools
netstat -anlp | grep :3306
#DB 서버 초기화
mysql_secure_installation
3개의 DB서버가 위의 과정이 모두 끝났다는 가정하에 시작한다.
혹시 이미 사용하던 DB 서버를 가져와 Master-Slave 관계에 있는 DB가 있다면 Master-Slave 설정을 끊어주도록 한다.
1. 서버 중지
systemctl stop mariadb
우선 3개의 DB 서버 모두 mariaDB를 종료시킨다.
2. 설정 (DB 서버 3대 중 1대 먼저 설정 시작)
3개의 DB 서버가 모두 mariaDB가 종료되었다면 그 중 한 대의 서버만 설정을 시작하겠다.
vi /etc/mysql/mariadb.conf.d/50-server.cnf
DB 설정 파일에 들어가 맨 마지막줄에 설정 구문을 추가하겠다.
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MariaDB_Cluster" # 3대의 컴퓨터를 묶었을 때 내가 지어줄 이름
wsrep_node_address="[현재 서버의 IP주소]"
systemctl restart mariadb
모든 설정을 마친 후 1대의 서버만 먼저 mariaDB를 실행시킨다.
3. 클러스터 초기화
galera_new_cluster
첫 번째 노드를 초기화하고 클러스터의 시작을 알리는 명령어이다.
4. 나머지 서버 설정
위의 서버의 설정이 모두 끝난 후 나머지 2개의 서버의 설정을 진행한다.
vi /etc/mysql/mariadb.conf.d/50-server.cnf
서버의 설정 파일로 들어간다.
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://[첫 번째 서버 IP],[두 번째 서버 IP],[세 번째 서버 IP]"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MariaDB_Cluster" # 3대의 컴퓨터를 묶었을 때 내가 지어줄 이름
wsrep_node_address="[현재 서버의 IP]"
나머지 두 개 서버의 설정 파일이다. gcom:// 뒤에는 똑같을 것이고 현재 서버의 IP주소는 다르게 적어줘야한다.
5. mariaDB 시작
systemctl restart mariadb
세 개의 서버의 설정이 끝났으면 mariaDB를 실행시켜준다.
6. 제일 처음에 설정했던 파일 수정
vi /etc/mysql/mariadb.conf.d/50-server.cnf
제일 처음에 설정했던 DB 서버의 설정 파일로 들어간다.
wsrep_cluster_address="gcomm://[첫 번째 서버 IP],[두 번째 서버 IP],[세 번째 서버 IP]"
비워놨던 부분을 다시 이렇게 설정해준다.
이 부분을 설정안하니 DB가 동기화 되었는지 확인하는 부분에서 첫 번째 DB를 장애를 발생시키고 다시 mariaDB를 시작하려니 오류코드를 포함하고 있다고 나왔었다.
mariadb -u root -p
# 전체 클러스터 상태를 확인
show status like 'wsrep_cluster_status';
# Primary가 표시되면 정상
# 현재 연결된 노드 수를 확인
show status like 'wsrep_cluster_size';
# 각 노드의 상태를 확인
show status like 'wsrep_local_state_comment';
# Synced가 나오면 동기화 완료
이렇게 되면 클러스터링을 이용해 3개의 DB 서버가 구축이 되었고 3개의 서버 모두 동기화가 되었다.
동기화가 된 DB 서버는 항상 같은 상태를 유지하며 어느 한 DB 서버가 꺼져있는 상태에서 다른 DB에서 쓰기, 삭제 작업이 되어도 다시 꺼진 DB가 켜졌을 때 다른 DB와 같은 상태를 유지한다..
'한화시스템 Beyond SW Camp > 기반기술' 카테고리의 다른 글
[리눅스] 서버 모니터링 환경 (Prometheus, Grafana) (1) | 2024.12.08 |
---|---|
[리눅스] 서버 구축 최종 (nginx, HAProxy, Tomcat, mariaDB, Keepalived) (3) | 2024.12.05 |
[리눅스] nginx로 Tomcat 분산 처리 (1) | 2024.12.04 |
[Database] 부하 테스트 도구 (JMeter) (1) | 2024.12.03 |
[리눅스] DB 분산 (Master-Slave(Hot Site) 방식) (0) | 2024.12.03 |