본문 바로가기
Dev/DataBase

[MariaDB] 이중화 설정

by nakanara 2020. 10. 16.
반응형

MariaDB

 

 

MariaDB 기능(Replication)을 이용하여 양방향 설정하여 Active-Standby로 사용할 수 있습니다.

해당 기능은 트랜잭션 단위로 동기화되므로, DB를 양쪽 다 Active 하여 사용할 경우 동기화에 문제가 될 수 있습니다.

테이블에는 PK컬럼이 가능한 존재

Active-Active로 사용할 경우 별도 솔루션이 필요하며,
데이터 입력하는 경우 양쪽에 락을 시킨 후 데이터 입력이 처리되므로 성능이 떨어집니다.

Galera: https://cirius.tistory.com/1766

테스트 환경

  • Mariadb 10.3 / Docker 환경
  1. 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');

 

반응형