[MariaDB] MHA 구성(Part 2. Replication 설정)

728x90

이전 포스트

 

[MariaDB] MHA 구성(Part 1. MariaDB 10.11.8 설치)

1. MariaDB 바이너리 설치아래 설치 파일들을 모두 다운로드 받습니다.OS : Red Hat Enterprise Linux release 8.10 (Ootpa)MariaDB 10.11.8 엔진 다운로드(master, slave 서버 필요)https://mariadb.org/download/?t=mariadb&p=mariadb&r=

khyup.tistory.com


2. Replication 설정

basedir, datadir 설정 확인(master, slave)
MariaDB [(none)]> select @@basedir;
+------------------+
| @@basedir        |
+------------------+
| /usr/local/mysql |
+------------------+
1 row in set (0.000 sec)

MariaDB [(none)]> select @@datadir;
+-----------------------+
| @@datadir             |
+-----------------------+
| /data/mariadb/master/ |
+-----------------------+
1 row in set (0.000 sec)

 

/etc/my.cnf 설정(master)
  • 아래 내용을 추가합니다.
# vi /etc/my.cnf

...
[mysqld]
server_id                       = 1

...

[mysqld_safe]
log_error                       = /var/log/mysqld.log
pid-file                        = /var/log/mysqld.pid
...
# systemctl restart mysqld
MariaDB [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.001 sec)

MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.000 sec)

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      342 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
/etc/my.cnf 설정(slave)
  • read_only=1, relay_log_purge=0으로 설정해야 MHA가 정상적으로 실행됨
# vi /etc/my.cnf

...
[mysqld]
server_id                       = 2
read_only                       = 1
relay_log                       = /data/mariadb/log-bin/relay_log
relay_log_purge                 = 0
log_slave_updates               = 1
...

[mysqld_safe]
log_error                       = /var/log/mysqld.log
pid-file                        = /var/log/mysqld.pid
...
# systemctl restart mysqld
MariaDB [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.001 sec)

MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.001 sec)

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      342 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

 

파라미터 관련 개념 설명

  • Binary Log :
    Binary Log에는 MySQL의 모든 변경 사항이 기록이 되고 Slave DB에서는 이 Binary Log(이하 binlog)를 이용하여 데이터 복제가 수행됩니다.
  • Binlog dump thread :
    Master(Source) 서버에 Slave(Replica) 서버가 연결되면(START SLAVE) 바이너리 로그 내용을 Slave(Replica) 서버로 보내는 Binlog Dump thread를 생성합니다. 이 thread는 Master(Source) 서버에서 SHOW PROCESSLIST 명령어의 출력 내용에서 Binlog Dump thread로 확인됩니다. Slave(Replica)서버의 I/O Thread 요청에 의해 Master(Replica) 서버의 Binlog Dump thread가 Binary Log를 읽어서 Slave(Replica)에 전송합니다.
  • I/O thread :
    START SLAVE(START REPLICA) 명령어가 Slave(Replica) 서버에서 실행되면 Slave(Replica) 서버는 Master(Source) 서버에 연결하고 binary log에 기록된 변경 내역을 보내도록 요청하는 I/O thread를 생성합니다. I/O thread는 Master(Source)서버의 Binlog Dump thread가 보내는 변경 내역을 읽고 이를 Slave(Replica) 서버의의 Relay Log에 기록합니다.
  • SQL thread :
    Slave(Replica) 서버에서 I/O thread가 작성한 Relay Log를 읽고 여기에 포함된 트랜잭션을 실행하기 위해 SQL thread를 생성하고 SQL thread는 Relay Log를 읽어서 Slave(Replica) 서버에 반영합니다.
  • log-bin 파라미터 :
    Binary Log가 기록되는 경로입니다.
  • relay_log 파라미터 :
    Relay Log가 기록되는 경로입니다.
  • relay_log_purge 파라미터 :
    TRUE or FALSE 값을 가집니다. TRUE로 설정 시 오래되고 필요없는 relay_log를 자동으로 삭제합니다.
  • log_slave_updates 파라미터 :
    Slave에서 log_slave_updates 파라미터가 활성화(1) 하게 되면 자신의 Binlog에도 기록하게 됩니다. log_slave_updates 파라미터는 Slave(Replica)에서 Master(마스터)로부터 수신한 변경 내용에 대해서 자신(Replica/Slave)의 Binary Log에 기록합니다.
Replication 유저 생성(master, slave)
MariaDB [(none)]> grant replication slave on *.* to rep@'%' identified by 'rep';
MariaDB [(none)]> flush privileges;

MariaDB [(none)]> use mysql
MariaDB [mysql]> select host, user, password from user;
+-----------+-------------+-------------------------------------------+
| Host      | User        | Password                                  |
+-----------+-------------+-------------------------------------------+
| localhost | mariadb.sys |                                           |
| localhost | root        | invalid                                   |
| localhost | maria       | invalid                                   |
|           | PUBLIC      |                                           |
| localhost |             |                                           |
| maria1    |             |                                           |
| %         | rep         | *9FF2C222F44C7BBA5CC7E3BE8573AA4E1776278C |
+-----------+-------------+-------------------------------------------+
7 rows in set (0.001 sec)

 

Replication 시작(slave)
  • 반드시 3306 포트가 열려있어야 합니다(방화벽 off)
  • MASTER_HOST : Master 서버 IP
  • MASTER_USER, MASTER_PASSWORD : replication용 User/Password
  • MASTER_LOG_FILE, MASTER_LOG_POS 값은 Master 서버의 show master status;로 확인한 값을 넣습니다.
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.137.171', MASTER_USER='rep',MASTER_PASSWORD='rep',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=342,MASTER_CONNECT_RETRY=10;
  • slave 시작
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)
  • Slave_IO_State, Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master 값 확인
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.137.171
                   Master_User: rep
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql-bin.000006
           Read_Master_Log_Pos: 645
                Relay_Log_File: relay_log.000002
                 Relay_Log_Pos: 858
         Relay_Master_Log_File: mysql-bin.000006
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
          Replicate_Rewrite_DB:
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table:
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 645
               Relay_Log_Space: 1161
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 1
Slave_Non_Transactional_Groups: 1
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)

ERROR: No query specified
동작 확인(master)
  • 실제로 Replication이 동작하는지 Master 서버에서 테이블 생성하고 Slave에도 생성되었는지 확인
MariaDB [(none)]> use test;

MariaDB [test]> create table test (id int);
Query OK, 0 rows affected (0.003 sec)

MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.000 sec)

 

동작 확인(slave)
MariaDB [(none)]> use test;

MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.000 sec)

 


다음 포스트

 

[MariaDB] MHA 구성(Part 3. MHA 설정)

이전 포스트 [MariaDB] MHA 구성(Part 1. MariaDB 10.11.8 설치)1. MariaDB 바이너리 설치아래 설치 파일들을 모두 다운로드 받습니다.OS : Red Hat Enterprise Linux release 8.10 (Ootpa)MariaDB 10.11.8 엔진 다운로드(master, sl

khyup.tistory.com

 

728x90