HA 구성 - (1) 신규 서버

2024. 1. 4. 01:05MySQL/Class

반응형

# 신규 서버에 처음 HA 구성(비동기 방식)하는 과정입니다.
# 서버는 총 4대이며 1 Master - 3 Slave로 구성할 것이지만, 본 글은 slave 1대만 설명 할 예정입니다.
 

1. HA 구성방식

동기 방식 비동기 방식
Master 는 Slave의 relay 로그까지 동기화여부를 판단한다.
Slave 의 데이터 동기화까지 관여하기 때문에, 응답속도가 느리나, 데이터의 안정성은 좋다.
Master 는 Slave가 데이터 동기화가 되었는지 알 필요가 없다.
응답속도가 빠른 장점을 가지고 있으나 데이터안정성이 동기방식에 비해 좋지 못하다.

 - 참고로 5.7 이전 버전에는 master-slave 라고 지칭 하였지만, 8.0 부터는 source-replica 로 변경되었습니다.
 - 5.7 버전도 사용을 해오고 있어 저도 모르게 혼용해서 사용할 것 같으니 이해바랍니다.
 

2. my.cnf 주의 사항

(1) server-id 가 서로 달라야 합니다.(참고로 저는 master는 100, 나머지 slave는 200,300,400을 각각 부여하였습니다.) 
(2) master를 제외한 slave는 read-only 로 설정해야 합니다. (master 와 slave 간의 데이터 틀어짐을 막기 위함입니다.)

Source Slave
[client]
port    = 3306
socket  = /tmp/mysql_8033.sock

[mysqld]
server-id = 100
port    = 3306
basedir = /mysql/local/mysql_8033
datadir = /data/mysql_data
socket  = /tmp/mysql_8033.sock

innodb_file_per_table
innodb_buffer_pool_size=500M

log-error= /data/mysql_data/mysqld.err
log_error_verbosity=1

relay-log=relay
[client]
port    = 3306
socket  = /tmp/mysql_8033.sock

[mysqld]
read-only
server-id = 200
port    = 3306
basedir = /mysql/local/mysql_8033
datadir = /data/mysql_data
socket  = /tmp/mysql_8033.sock

innodb_file_per_table
innodb_buffer_pool_size=500M

log-error= /data/mysql_data/mysqld.err
log_error_verbosity=1

relay-log=relay

 

3. Master 정보

(1) ip 정보

ip 확인


(2) binlog 및 Position
 - DB가 운영중이라면 master_log_pos 값은 계속 변경될 것입니다. 그러므로 운영서버를 잠시 중지 또는 DML작업을 중지(read-only) 시킨 후 show master status를 통해 master binlog, position 값을 확인해야 합니다.

mysql> show master status\G;
*************************** 1. row ***************************
             File: binlog.000001
         Position: 114
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

ERROR: 
No query specified

 

4. replication 을 위한 계정 생성

 - 단순 HA구성만을 위함이라면 master 하나에만 계정을 생성하면 됩니다. 그러나 MHA 구성을 위해서는 master, slave 모두 생성을 해야만 합니다.

mysql> create user replicator@'172.16.173.%' identified by '1234';
mysql> grant select, reload, replication slave, replication client, show view on *.* to replicator@'172.16.173.%';

 

5. master 연결(slave 작업)

 - master의 position값을 입력 해야하나 신규 서버이기 때문에 1로 입력해도 문제가 되지 않습니다.

mysql> change master to 
    -> master_host='172.16.173.130',
    -> master_user='replicator',
    -> master_password='1234',
    -> master_port=3306,
    -> master_log_file='binlog.000001',
    -> master_log_pos= 1,
    -> master_connect_retry=10;
Query OK, 0 rows affected, 3 warnings (0.01 sec)

mysql> start replica;
Query OK, 0 rows affected, 1 warning (0.00 sec)

 

6. slave 확인(slave 작업)

mysql> show replica status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.16.173.130
                  Master_User: replicator
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: binlog.000001
          Read_Master_Log_Pos: 114
               Relay_Log_File: relay.000001
                Relay_Log_Pos: 23
        Relay_Master_Log_File: binlog.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              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: 114
              Relay_Log_Space: 69
              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_UUID: 4671a053-8491-11ee-8958-000c29c44024
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.01 sec)

ERROR: 
No query specified

 
# 다음에는 운영서버의 HA구성을 다룰 예정이며, 자주 등장하는 에러 및 해결 방안에서도 공부 해 보도록 하겠습니다.

반응형