MariaDB 복제(Replication) 및 고가용성(HA) 구성
MariaDB 복제(Replication) 및 고가용성(HA) 구성
1️⃣ Master-Slave Replication 설정 (CHANGE MASTER TO, START SLAVE)
1. 개념 소개
Master-Slave 복제는 데이터베이스의 데이터를 여러 서버에 복제하여 읽기 성능을 향상시키고, 장애 발생 시 데이터의 가용성을 높이는 기술입니다.
2. 구성 요소
- Master 서버: 데이터의 원본이 되는 서버로, 모든 쓰기 작업이 수행됩니다.
- Slave 서버: Master 서버의 데이터를 실시간으로 복제하여 읽기 작업을 처리합니다.
3. 설정 절차
-
Master 서버 설정:
-
my.cnf
파일에 복제를 위한 설정 추가[mysqld] server-id = 1 log-bin = mysql-bin binlog-do-db = your_database_name
-
MySQL/MariaDB를 재시작하여 설정 적용
-
복제 전용 사용자 생성
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
-
현재 바이너리 로그 위치 확인
SHOW MASTER STATUS;
-
-
Slave 서버 설정:
-
my.cnf
파일에 복제를 위한 설정 추가[mysqld] server-id = 2
-
MySQL/MariaDB를 재시작하여 설정 적용
-
Master 서버의 바이너리 로그 정보를 기반으로 Slave 설정
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 154;
-
슬레이브 시작
START SLAVE;
-
복제 상태 확인
SHOW SLAVE STATUS\G
-
2️⃣ Master-Master Replication 구성
1. 개념 소개
Master-Master 복제는 두 개의 서버가 서로 Master 역할을 수행하며 데이터를 복제하는 구조로, 양방향 데이터 쓰기가 가능합니다.
2. 구성 요소
- Master1 서버: 데이터를 읽고 쓸 수 있으며, Slave1 역할도 수행합니다.
- Master2 서버: 데이터를 읽고 쓸 수 있으며, Slave2 역할도 수행합니다.
3. 설정 절차
-
Master1 서버 설정:
-
my.cnf
파일에 복제를 위한 설정 추가[mysqld] server-id = 1 log-bin = mysql-bin binlog-do-db = your_database_name
-
복제 전용 사용자 생성
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
-
현재 바이너리 로그 위치 확인
SHOW MASTER STATUS;
-
-
Master2 서버 설정:
-
my.cnf
파일에 복제를 위한 설정 추가[mysqld] server-id = 2 log-bin = mysql-bin binlog-do-db = your_database_name
-
복제 전용 사용자 생성
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
-
현재 바이너리 로그 위치 확인
SHOW MASTER STATUS;
-
-
Master1 서버에서 Master2 설정:
-
Master2 서버의 바이너리 로그 정보를 기반으로 설정
CHANGE MASTER TO MASTER_HOST='master2_ip', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 154;
-
슬레이브 시작
START SLAVE;
-
-
Master2 서버에서 Master1 설정:
-
Master1 서버의 바이너리 로그 정보를 기반으로 설정
CHANGE MASTER TO MASTER_HOST='master1_ip', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 154;
-
슬레이브 시작
START SLAVE;
-
3️⃣ Galera Cluster를 이용한 Multi-Master Replication
1. 개념 소개
Galera Cluster는 MariaDB와 MySQL을 위한 동기식 다중 마스터 복제 솔루션으로, 모든 노드에서 읽기 및 쓰기 작업을 지원합니다. citeturn0search8 이를 통해 데이터의 고가용성과 일관성을 보장합니다.
2. 구성 요소
- 노드(Node): Galera Cluster를 구성하는 각 서버로, 모든 노드가 마스터 역할을 수행합니다.
- wsrep API: 노드 간 데이터 동기화를 위해 사용되는 Write Set Replication API로, 데이터의 일관성과 동기화를 관리합니다.
3. 설정 절차
-
모든 노드에 MariaDB 및 Galera 설치:
-
각 노드에 MariaDB와 Galera 패키지를 설치합니다.
sudo apt-get update sudo apt-get install -y mariadb-server galera-4
-
-
my.cnf
파일 설정:-
각 노드의 MariaDB 설정 파일(
/etc/mysql/my.cnf
또는/etc/my.cnf
)에 Galera Cluster 관련 설정을 추가합니다.[mysqld] binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_name='galera_cluster' wsrep_cluster_address='gcomm://node1_ip,node2_ip,node3_ip' wsrep_node_name='node1' wsrep_node_address='node1_ip' wsrep_sst_method=rsync
wsrep_cluster_address
에는 클러스터에 참여할 다른 노드들의 IP를 쉼표로 구분하여 나열합니다.wsrep_node_name
과wsrep_node_address
는 각 노드별로 고유하게 설정해야 합니다.
-
-
방화벽 및 SELinux 설정:
-
클러스터 노드 간의 통신을 위해 필요한 포트를 열고, SELinux가 활성화되어 있다면 이를 비활성화하거나 허용 모드로 설정합니다.
sudo firewall-cmd --permanent --add-service=mysql sudo firewall-cmd --permanent --add-port=4444/tcp sudo firewall-cmd --permanent --add-port=4567/tcp sudo firewall-cmd --permanent --add-port=4568/tcp sudo firewall-cmd --reload sudo setenforce 0
-
-
클러스터 초기화 및 노드 추가:
-
첫 번째 노드에서 클러스터를 초기화합니다.
sudo galera_new_cluster
-
다른 노드에서는 MariaDB 서비스를 시작하여 자동으로 클러스터에 합류합니다.
sudo systemctl start mariadb
-
클러스터 상태를 확인하여 모든 노드가 정상적으로 동기화되고 있는지 확인합니다.
SHOW STATUS LIKE 'wsrep%';
-
4️⃣ Semi-Synchronous 및 Asynchronous Replication
1. 개념 소개
- Asynchronous Replication: Master 서버에서 트랜잭션이 커밋되면 즉시 클라이언트에게 응답을 반환하며, Slave 서버로의 데이터 전파는 지연될 수 있습니다.
- Semi-Synchronous Replication: Master 서버에서 트랜잭션이 커밋될 때, 최소한 하나의 Slave 서버가 해당 트랜잭션을 수신하고 저장한 후에야 클라이언트에게 응답을 반환합니다. 이를 통해 데이터 손실을 방지하고, 데이터의 일관성을 보장합니다.
2. 설정 방법
-
Asynchronous Replication: 기본적으로 MariaDB의 복제는 비동기식으로 설정되어 있습니다. 추가적인 설정 없이도 사용할 수 있습니다.
-
Semi-Synchronous Replication:
rpl_semi_sync_master
및rpl_semi_sync_slave
플러그인을 활성화하여 설정합니다.-
플러그인 설치 및 활성화:
INSTALL SONAME 'semisync_master'; INSTALL SONAME 'semisync_slave'; SET GLOBAL rpl_semi_sync_master_enabled = 1; SET GLOBAL rpl_semi_sync_slave_enabled = 1;
-
상태 확인:
SHOW VARIABLES LIKE 'rpl_semi_sync%';
-
5️⃣ GTID 기반 복제 (Global Transaction ID)
1. 개념 소개
GTID는 각 트랜잭션에 고유한 식별자를 부여하여, 복제 과정에서 트랜잭션의 순서와 일관성을 보장합니다. 이를 통해 복제 설정 및 장애 조치(failover) 시 관리의 복잡성을 줄일 수 있습니다.
2. 설정 방법
-
GTID 모드 활성화:
-
my.cnf
파일에 다음 설정을 추가합니다.[mysqld] gtid_mode=ON enforce-gtid-consistency=TRUE
-
MariaDB를 재시작하여 설정을 적용합니다.
-
-
복제 사용자 설정:
-
복제에 사용할 사용자를 생성하고 권한을 부여합니다.
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
-
-
마스터 서버에서 GTID 정보 확인:
- 현재 GTID 정보를 확인합니다.