재해 복구 (DR)
Mirror Site (미러 사이트)
: 주 센터와 동일한 수준의 데이터와 시스템을 원격지에 구축하고 Active 상태로 실시간 동시 서비스를 제공하는 방식
Hot Site (핫 사이트)
: 주 센터와 동일한 수준의 데이터와 시스템을 원격지에 구축하여 Stand-by 상태로 유지하며 재난 발생 시 Active 상태로 전환하여 서비스 제공
Warn Site (웜 사이트)
: 데이터만 원격지에 보관하고 서비스를 위한 시스템은 확보하지 않거나 최소한으로만 구성하고 재난 발생 시에 필요한 시스템을 구성하여 복구
Cold Site (콜드 사이트)
: 최소한의 준비만 해두는 것
기존 데이터를 양쪽과 똑같이 설정 (백업, 복구)
DB 데이터 백업
mysqldump -u root -p --all-databases > backup.sql
💡 방향 재지정 <, >
입력 또는 출력을 다른 곳(파일 등)으로 재지정할 수 있음
명령어 > 파일 : 명령어의 실행 결과를 파일로 옮기겠다
명령어 < 파일 : 파일의 내용을 명령어로 보내라
파일 옮기기
남의 컴퓨터에 있는 파일을 내 컴퓨터에 받을 때
=> 다른 컴퓨터(10.10.10.30)에 있는 backup.sql 파일을 내 컴퓨터의 폴더로 옮기겠다
scp [남의 컴퓨터 계정@IP주소:파일 경로] [파일을 받아서 저장할 경로]
scp test@10.10.10.12:/home/test/backup.sql ./
내 컴퓨터에 있는 파일을 남의 컴퓨터에 보낼 때
=> 내 컴퓨터에 있는 backup.sql 파일을 10.10.10.30 컴퓨터의 /home/test 폴더로 옮기겠다
scp [보낼 파일 경로] [남의 컴퓨터 계정@IP주소:보낼 파일 저장할 경로]
scp ./backup.sql test@10.10.10.12:/home/test/
y만 쳤다가 빠꾸 먹음... 'yes'로 써주기
10.10.10.30 컴퓨터에 들어온 것을 확인할 수 있다!
DB 데이터 복구해주기
DB 서버 Replication 설정 실습 (Master, Slave)
Master
- 데이터를 저장, 수정, 삭제하고, 해당 내역을 로그에 기록한다.
Slave
- 데이터 조회만 가능한 서버. Master 에 있는 로그를 받아와서 뭐가 추가되고 수정됐는지 로그를 보고 데이터를 동기화한다.
- Slave에서는 데이터를 수정, 삭제하면 안 된다.
Master 서버 설정 (10.10.10.124)
vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb] 아래에 내용 추가
[mariadb]
log-bin # log로 남겨라
server_id=1 # 양쪽이 다르기만 하면 됨 (Master 1, Slave 2)
log-basename=master1 # log 파일 이름
binlog-format=mixed # 로그를 남기는 형식 (섞어 쓰겠다)
설정 저장 후 mariadb 재시작
systemctl restart mariadb
로그파일 생성된 거 확인
mariadb -u root -p
show master status;
master1-bin.000001 이라는 이름으로 생성된 것이 보인다.
bin 뒤에 숫자와 Position 숫자는 내용이 추가될 때마다 바뀐다.
Slave 서버에서 사용할 사용자 계정 추가
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
FLUSH PRIVILEGES;
Slave 서버 설정 (10.10.10.30)
vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb] 밑에 server_id 설정 추가
=> 이 때, Master 서버의 server_id 와 달라야 한다.
[mariadb]
server_id=2
설정 후 mariadb 재시작
systemctl restart mariadb
Master 지정
=> 이 때, 내용이 추가될 때마다 로그파일 이름과 position 번호가 바뀌기 때문에
=> 현재 show master status 했을 때의 로그파일 이름과 position 번호로 입력해야 한다.
mariadb -u root -p
CHANGE MASTER TO
MASTER_HOST='[Master 서버 IP]',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='[마스터에서 show master status 했을 때 File 이름 = 로그파일 이름]',
MASTER_LOG_POS=[마스터에서 show master status 했을 때 position 번호],
MASTER_CONNECT_RETRY=10;
START SLAVE;
Slave 확인
SHOW SLAVE STATUS\G
Slave_IO_Running: Yes 여야 하고,
Slave_SQL_Running: Yes 여야 한다.
Master 에서 DB 생성
CREATE DATABASE test;
Slave 에서 DB 확인
SHOW DATABASES;
Master에서 만든 test가 잘 들어와있는 것을 확인할 수 있다.
DB 서버 미러 사이트 구성하기 (Active, Active)
서버1과 2가 있을 때,
Master(서버1) - Slave(서버2), Master(서버2) - Slave(서버1)
이렇게 양방향 Replication으로 설정하는 것을 미러 사이트라고 한다.
위에서 Master, Slave 를 지정했던 것처럼
Slave에서는 Master 설정을, Master에서는 Slave 설정을 지정해주면 된다.
Slave 중지
서버 2에서 일단 아까 Start 시켜놨던 Slave를 중지시키기
STOP SLAVE;
Slave -> Master로 설정
서버 2를 Master 로 설정해준다.
vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb]
log-bin # log로 남겨라
server_id=2 # 양쪽이 다르기만 하면 됨
log-basename=master2 # log 파일 이름
binlog-format=mixed # 로그를 남기는 형식 (섞어 쓰겠다)
설정 후 mariadb 재시작
systemctl restart mariadb
Master 로그 파일 확인
서버 2에도 master 로그 파일이 보이는 것을 확인할 수 있다.
mariadb -u root -p
show master status;
사용자 권한 추가
서버 1에서 Slave로 사용할 사용자를 만들어준다.
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
FLUSH PRIVILEGES;
Master 설정
서버 1(아까 Master 설정했던 서버)에 설정을 해준다.
내 경우 10.10.10.124 컴퓨터 (서버 1)에 아래 설정 추가 (Master 서버 IP를 10.10.10.30으로 지정)
CHANGE MASTER TO
MASTER_HOST='[Master 서버 IP]',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='[마스터에서 show master status 했을 때 File 이름]',
MASTER_LOG_POS=[마스터에서 show master status 했을 때 position 번호],
MASTER_CONNECT_RETRY=10;
START SLAVE;
설정이 잘 되었나 확인
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
SHOW SLAVE STATUS\G
💡연결은 잘 되었는데 SQL_Running 이 No가 뜰 때
내 경우 서버 2에서 show slave status를 보았을 때 error가 났었음
정확한 건 모르겠지만,,,
슬레이브에서 먼저 사용자를 생성하고 마스터에서 생성한 경우 마스터에서 실행된 create user 명령이 슬레이브로 복제된다.
사용자가 이미 존재했기 때문에 명령문의 실행 시도가 실패한 것...
아래 명령어를 실행해주니 잘 되었다.
STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
참고 :
https://serverfault.com/questions/872911/slave-sql-running-no-mysql-replication-stopped-working
'CS > DB' 카테고리의 다른 글
[DB] DB 서버 핫 사이트 구성 실습 (Active - Standby) (0) | 2024.12.03 |
---|---|
[DB] DB 서버 부하 분산 (HAProxy) (0) | 2024.12.03 |
[DB] JMeter 부하 테스트 (1) | 2024.12.02 |
[DB] SQL 성능 개선 (0) | 2024.12.02 |
[DB] SQL 코테 문제 풀어보기 (프로그래머스) (3) | 2024.11.29 |