2024. 1. 4. 01:05ㆍMySQL/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 정보
(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구성을 다룰 예정이며, 자주 등장하는 에러 및 해결 방안에서도 공부 해 보도록 하겠습니다.
'MySQL > Class' 카테고리의 다른 글
HA 구성 - (3) replication의 동작원리 (0) | 2024.01.08 |
---|---|
HA 구성 - (2) 운영 서버 (0) | 2024.01.06 |
M2(Mac)용 VMWare로 가상화 만들기 - (5) 복제 (0) | 2023.12.29 |
M2(Mac)용 VMWare로 가상화 만들기 - (4) MySQL 설치 (0) | 2023.12.26 |
M2(Mac)용 VMWare로 가상화 만들기 - (3) 공유폴더 (0) | 2023.12.24 |