🧑🏻🏫재해 복구 (Disaster Recovery, DR)
- Mirror Site(미러 사이트)
주 센터와 동일한 수준의 데이터와 시스템을 원격지에 구축하고 Active 상태로 실시간 동시 서비스를 제공하는 방식 - Hot Site(핫 사이트) 👈🏻
주 센터와 동일한 수준의 데이터와 시스템을 원격지에 구축하여 Stand-by 상태로 유지하며 재난 발생시 Active 상태로 전환하여 서비스 제공 - Warm Site(웜 사이트)
데이터만 원격지에 보관하고 서비스를 위한 시스템은 확보하지 않거나 최소한으로만 구성하고 재난 발생시에 필요한 시스템을 구성하여 복구 - Cold Site( 콜드 사이트)
최소한의 준비만 해두는 것
🖥️[실습] 분산 DB 서버 - 핫 사이트 구성해보기
서버 컴퓨터 | 서버 컴퓨터 |
Keepalived DB1(Mater, Active) | DB2(Slave, Standby) |
⚠️사전 작업 - 데이터 복제 (Replication)
: 양쪽 컴퓨터의 기존 데이터를 똑같도록 설정한다.
컴퓨터 간 파일 복사 명령어 ▼
남의 컴퓨터에 있는 파일을 내 컴퓨터 받을 때
scp test@10.10.10.12:/home/test/backup.sql ./
내 컴퓨터에 있는 파일을 남의 컴퓨터에 보낼 때
scp ./backup.sql test@10.10.10.12:/home/test/
- DB 데이터 백업
mysqldump -u root -p --all-databases > backup.sql
- DB 데이터 복구
mysql -u root -p < backup.sql
Ⅰ. 마스터-슬레이브 관계 만들기
컴퓨터 간 DB 서버 Replication 설정(Master-Slave)
1.Master
1-1) 기존 서버 사용 - 가상머신 생성, MariaDB설치과정 생략
1-2) master 설정
vi /etc/mysql/mariadb.conf.d/50-server.cnf
↓ binlog-format=mixed 이렇게도 쓸 수 있음.
[mariadb]
log-bin
server_id=1
log-basename=master1
binlog_format=mixed
systemctl restart mariadb
1-3) master 확인
mariadb -u root -p
show master status;
MariaDB [(none)]> show master status;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| master1-bin.000002 | 344 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
1-4) master 서버에 사용자 추가 및 권한 설정
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
FLUSH PRIVILEGES;


2. Slave
2-1) DB 서버 설정
vi /etc/mysql/mariadb.conf.d/50-server.cnf
vim /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb]
server_id=2
systemctl restart mariadb
2-2) Master 지정
mariadb -u root -p
CHANGE MASTER TO
MASTER_HOST='192.168.84.10',
MASTER_USER='slave_user',
MASTER_PASSWORD='mypassword',
MASTER_PORT=3306,
MASTER_LOG_FILE='master_status_file_name_입력',
MASTER_LOG_POS=master_status_position_입력,
MASTER_CONNECT_RETRY=10;
START SLAVE;
2-3) Slave 확인
SHOW SLAVE STATUS\G
MariaDB [(none)]> show slave status\g;
+----------------------------------+---------------+-------------+-------------+---------------+--------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+----------------+--------------------+------------+-------------+-------------------------+-----------------------------+---------------+-----------+---------------------+--------------------------------------------------------+------------------+--------------------------------+----------------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error | Replicate_Ignore_Server_Ids | Master_Server_Id | Master_SSL_Crl | Master_SSL_Crlpath | Using_Gtid | Gtid_IO_Pos | Replicate_Do_Domain_Ids | Replicate_Ignore_Domain_Ids | Parallel_Mode | SQL_Delay | SQL_Remaining_Delay | Slave_SQL_Running_State | Slave_DDL_Groups | Slave_Non_Transactional_Groups | Slave_Transactional_Groups |
+----------------------------------+---------------+-------------+-------------+---------------+--------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+----------------+--------------------+------------+-------------+-------------------------+-----------------------------+---------------+-----------+---------------------+--------------------------------------------------------+------------------+--------------------------------+----------------------------+
| Waiting for master to send event | 192.168.84.10 | slave_user | 3306 | 10 | master1-bin.000002 | 344 | mysqld-relay-bin.000002 | 557 | master1-bin.000002 | Yes | Yes | | | | | | | 0 | | 0 | 344 | 867 | None | | 0 | No | | | | | | 0 | No | 0 | | 0 | | | 1 | | | No | | | | optimistic | 0 | NULL | Slave has read all relay log; waiting for more updates | 0 | 0 | 0 |
+----------------------------------+---------------+-------------+-------------+---------------+--------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+----------------+--------------------+------------+-------------+-------------------------+-----------------------------+---------------+-----------+---------------------+--------------------------------------------------------+------------------+--------------------------------+----------------------------+
1 row in set (0.000 sec)
ERROR: No query specified
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
3. Master-Slave 동기화 확인

현재 상태:
서버 컴퓨터 ① maria db 1 | 서버 컴퓨터 ② maria db |
server_id=1 master | server_id=2 slave |
Ⅱ. Keepalived 설정하기
1. Master (Active) 설정
1) keepalived 설치
apt install -y keepalived
2) keepalived 설정파일 생성
Tip. 설정파일은 무엇인가? 찾아가는 과정...
/etc/keepalived
디렉터리에서 # find / -name keepalive
검색
그 검색 결과중 /usr/share/doc/keepalived
폴더가 눈에 띄어서 cd /usr/share/doc/keepalived
... 요리조리 찾아보다가... 하위 디렉터리에서 keepalived.conf.SYNOSIS
파일을 읽어보면서 또 찾아가기...
(생략) (놓침)
/usr/share/doc/keepalived/samples/keepalived.conf.vrrp
=> 복사하여 아래처럼 파일을 새로 생성해준다..
vi /etc/keepalived/keepalived.conf
vi /etc/keepalived/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 {
192.168.84.200/24
}
track_script {
track_mariadb
}
}
2. Slave (Standby) 설정
1) keepalived 설치
apt install -y keepalived
2) keepalived 설정파일 생성
vim /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 {
192.168.84.200/24
}
track_script {
track_mariadb
}
}
3. keepalived 실행, mariadb 재실행
두 서버에서 모두 실행한다.
systemctl restart keepalived
systemctl restart mariadb
이제 mariadb를 실행하면 외부에서 가상 IP주소 192.168.84.200를 통해서 DB에 접속하게 된다.
ip addr
명령으로 master 서버에 추가적으로 가상ip주소가 생긴 것을 확인할 수 있다.
Ⅲ . 중단 테스트
systemctl stop mariadb
ip addr
명령으로 slave 서버에 추가적으로 가상ip주소가 생긴 것을 확인할 수 있다. - 가상 IP주소로 접속하면 slave서버로 접속된다.
'BEYOND SW [1] 기반기술 > SQL & DB' 카테고리의 다른 글
[실습] 분산 DB 서버 - 미러 사이트 구성하기 | master-slave | Active-Active (0) | 2024.12.03 |
---|---|
재해복구와 분산 DB 서버 (0) | 2024.12.03 |
SQL의 성능을 높이는 방법 - 스토어드 프로시저 STORED PROCEDURE (1) | 2024.12.02 |
SQL 성능을 검사하는 방법 (1) EXPLAIN (2) PROFILING / WHERE 조건식을 지정할 때 / Index로 조회할 때 (0) | 2024.12.02 |