반응형
MariaDB 기능(Replication)을 이용하여 양방향 설정하여 Active-Standby로 사용할 수 있습니다.
해당 기능은 트랜잭션 단위로 동기화되므로, DB를 양쪽 다 Active 하여 사용할 경우 동기화에 문제가 될 수 있습니다.
테이블에는 PK컬럼이 가능한 존재
Active-Active로 사용할 경우 별도 솔루션이 필요하며,
데이터 입력하는 경우 양쪽에 락을 시킨 후 데이터 입력이 처리되므로 성능이 떨어집니다.
Galera: https://cirius.tistory.com/1766
테스트 환경
- Mariadb 10.3 / Docker 환경
-
DB 설치
- TEST DB1: 192.168.100.1, 10000
- TEST DB2: 192.168.100.2, 20000
1-1 my.cfn 파일 수정
- DB1
# 1번
server-id = 1
log_bin = mariadb-bin
log_bin_index = mariadb-bin.index
expire_logs_days = 5 # log 유지 일
max_binlog_size = 100M # log 최대 사이즈
- DB2
# 2번
server-id = 2
log_bin = mariadb-bin
log_bin_index = mariadb-bin.index
expire_logs_days = 5
max_binlog_size = 100M
2-1. DB1 접속 후 복제 용도 계정 생성 및 disk 상태 파악
MariaDB [(none)]> create user 'repl_master1'@'%' identified by 'repl_master1';
MariaDB [(none)]> grant replication slave on *.* to 'repl_master1'@'%';
MariaDB [(none)]> FLUSH privileges;
-- 현재 DISK 위치 파악 (Position 기록)
# 상태 확인 Master#1
MariaDB [(none)]> show master status;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 800 | | |
+--------------------+----------+--------------+------------------+
- 만약 사용 중인 DB의 경우 Table Lock 후 작업
2-2. DB2 접속 후 복제 용도 계정 생성 및 disk 상태 파악
MariaDB [(none)]> create user 'repl_master2'@'%' identified by 'repl_master2';
MariaDB [(none)]> grant replication slave on *.* to 'repl_master2'@'%';
MariaDB [(none)]> FLUSH privileges;
# 상태확인 Master#2
MariaDB [mysql]> show master status;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 | 900 | | |
+--------------------+----------+--------------+------------------+
3-1. DB1 -> DB2 연결 설정
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.100.2', MASTER_USER='repl_master2'
, MASTER_PASSWORD='repl_master2', MASTER_PORT=20000
, MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=900; # 2번 서버 정보
MariaDB [(none)]> START SLAVE;
-- 연결 확인
MariaDB [(none)]> show slave status \G;
3-2. DB2 -> DB1 연결 설정
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.100.1', MASTER_USER='repl_master1'
, MASTER_PASSWORD='repl_master1', MASTER_PORT=10000
, MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=800; #1번 서버 정보임
MariaDB [(none)]> START SLAVE;
-- 연결 확인
MariaDB [(none)]> show slave status \G;
테스트
-- db1 접속 후 테이블 생성 및 데이터 입력
> show databases;
> create database sync_test;
> show databases;
> use sync_test;
> show tables;
> create table test (id varchar(10) not null);
> show tables;
> insert into test(id) values('1');
> insert into test(id) values('2');
반응형
'Dev > DataBase' 카테고리의 다른 글
[MariaDB] log_bin_trust_function_creators, ERROR 1418 (HY000) (0) | 2020.10.27 |
---|---|
[MariaDB] MariaDB/MySQL 오류 UNION ALL 오류 (0) | 2020.10.20 |
[MariaDB] Function 정의자 수정 (0) | 2020.08.25 |
[MariaDB] 테이블 정보 확인 (0) | 2020.08.20 |
[Oracle] 재귀쿼리 start with, connect by (0) | 2020.08.04 |