MariaDB 복제(Replication) 및 고가용성(HA) 구성

MariaDB 복제(Replication) 및 고가용성(HA) 구성

MariaDB 복제(Replication) 및 고가용성(HA) 구성

1️⃣ Master-Slave Replication 설정 (CHANGE MASTER TO, START SLAVE)

1. 개념 소개

Master-Slave 복제는 데이터베이스의 데이터를 여러 서버에 복제하여 읽기 성능을 향상시키고, 장애 발생 시 데이터의 가용성을 높이는 기술입니다.

2. 구성 요소

  • Master 서버: 데이터의 원본이 되는 서버로, 모든 쓰기 작업이 수행됩니다.
  • Slave 서버: Master 서버의 데이터를 실시간으로 복제하여 읽기 작업을 처리합니다.

3. 설정 절차

  1. 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;
  2. 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. 설정 절차

  1. 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;
  2. 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;
  3. 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;
  4. 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을 위한 동기식 다중 마스터 복제 솔루션으로, 모든 노드에서 읽기 및 쓰기 작업을 지원합니다. citeturn0search8 이를 통해 데이터의 고가용성과 일관성을 보장합니다.

2. 구성 요소

  • 노드(Node): Galera Cluster를 구성하는 각 서버로, 모든 노드가 마스터 역할을 수행합니다.
  • wsrep API: 노드 간 데이터 동기화를 위해 사용되는 Write Set Replication API로, 데이터의 일관성과 동기화를 관리합니다.

3. 설정 절차

  1. 모든 노드에 MariaDB 및 Galera 설치:

    • 각 노드에 MariaDB와 Galera 패키지를 설치합니다.

      sudo apt-get update
      sudo apt-get install -y mariadb-server galera-4
  2. 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_namewsrep_node_address는 각 노드별로 고유하게 설정해야 합니다.
  3. 방화벽 및 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
  4. 클러스터 초기화 및 노드 추가:

    • 첫 번째 노드에서 클러스터를 초기화합니다.

      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_masterrpl_semi_sync_slave 플러그인을 활성화하여 설정합니다.

    1. 플러그인 설치 및 활성화:

      INSTALL SONAME 'semisync_master';
      INSTALL SONAME 'semisync_slave';
      SET GLOBAL rpl_semi_sync_master_enabled = 1;
      SET GLOBAL rpl_semi_sync_slave_enabled = 1;
    2. 상태 확인:

      SHOW VARIABLES LIKE 'rpl_semi_sync%';

5️⃣ GTID 기반 복제 (Global Transaction ID)

1. 개념 소개

GTID는 각 트랜잭션에 고유한 식별자를 부여하여, 복제 과정에서 트랜잭션의 순서와 일관성을 보장합니다. 이를 통해 복제 설정 및 장애 조치(failover) 시 관리의 복잡성을 줄일 수 있습니다.

2. 설정 방법

  1. GTID 모드 활성화:

    • my.cnf 파일에 다음 설정을 추가합니다.

      [mysqld]
      gtid_mode=ON
      enforce-gtid-consistency=TRUE
    • MariaDB를 재시작하여 설정을 적용합니다.

  2. 복제 사용자 설정:

    • 복제에 사용할 사용자를 생성하고 권한을 부여합니다.

      CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
      FLUSH PRIVILEGES;
  3. 마스터 서버에서 GTID 정보 확인:

    • 현재 GTID 정보를 확인합니다.
RSS Feed
마지막 수정일자