데이터베이스 이중화란?
- 데이터베이스의 가용성과 안정성을 높이기 위해 사용하는 기법으로, 하나의 데이터베이스 시스템을 기본으로 하여, 동일한 데이터를 가지는 복제본을 하나 더 운영하는 걸 뜻합니다.
- 대표적으로 Master-Slave가 있습니다.
Master-Slave란?
- Master 서버에서 모든 쓰기 작업이 수행되고, Slave 서버는 읽기 작업을 처리합니다. 이러한 구조는 Master서버에서 문제가 발생했을 시 Slave서버가 대체 역할을 하게 됩니다.
Master-Slave 구축해보기
* 구축환경
1. VMware
2. CentOS 8
3. MariaDB
* 필자는 가상환경에서 진행하기 때문에, DB서버 2개(Master,Slave) 생성 및 각 서버에 MariaDB를 설치해서 진행할 예정입니다.
Master구축
1. 방화벽 끄기
setenforce 0
systemctl stop firewalld
2. DB설치
yum install -y mariadb-server
3. DB실행
systemctl start mariadb
mysql
4. DB생성
CREATE DATABASE masterdb;
5. 계정 생성
CREATE USER 'test'@'%' IDENTIFIED BY 'abcd1234';
6. 사용자한테 DB 관리 권한 부여 후 종료
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
exit
systemctl restart mariadb
7. Master 설정
vi /etc/my.cnf.d/mariadb-server.cnf
[mariadb] <- 해당 부분은 추가하는게 아니다.
log-bin
server_id=1
log-basename=master1
binlog-format=mixed
- log-bin : 변경되는 내용을 binary log로 저장하겠다는 의미이다. 즉 컴퓨터가 알수 있는 2진수, 숫자형태로 저장하겠다는 것이다.
- server_id=1 : DB서버마다 구분이 되게 서버 넘버를 정해준다. 여기서 주의사항은 각 서버마다 겹치면 안되는 점이다.
- log-basename=master1 : log파일을 저장하는데 이름이 master1로 시작하게 한다. 해당 부분은 추후 설정에서 볼 수 있다.
- binlog-format=mixed : 서버에서 복제 시 형식을 상황에 따라 혼합하여 사용한다는 설정이다.
8. Master 확인
mysql
show master status;
9. DB 백업
mysqldump -u root masterdb > web.sql
scp web.sql [SLAVE 서버의 IP]:/root/web.sql
- "masterdb" 이 부분은 생성한 DB 이름이 들어가면 된다.
Slave구축
- Master 단계에서 DB 설치부터 생성까지 과정은 동일하다. 그 이후 단계부터 진행하겠다.
1. DB 복구
mysql -u root masterdb < web.sql
2. DB 서버 설정
vi /etc/my.cnf.d/mariadb-server.cnf
[mariadb] <- 마찬가지로 추가하는 부분이 아니다.
server_id=2
systemctl restart mariadb
3. Master 지정
mysql
CHANGE MASTER TO
MASTER_HOST='[Master 서버 IP]',
MASTER_USER='test',
MASTER_PASSWORD='abcd1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='[Master 서버에서 show master status; 했을 때 File 이름]',
MASTER_LOG_POS=[Master 서버에서 show master status; 했을 때 position 번호],
MASTER_CONNECT_RETRY=10;
START SLAVE;
4. Slave 확인
SHOW SLAVE STATUS\G
- 해당 부분이 둘다 Yes로 되어있으면 성공이다!
'Database' 카테고리의 다른 글
Window11 Oracle Database 설치 (2) | 2024.12.14 |
---|---|
Error Code: 2013. Lost connection to MySQL server during query (0) | 2024.12.01 |
Index란? (3) | 2024.11.15 |
mysql 외부접속 connection locked (Unblock with 'mysqladmin flush-hosts') (2) | 2024.10.02 |
Keepalived를 활용하여 Active(Master)-Standby(Slave) (2) | 2024.06.23 |