HA 구성 - (2) 운영 서버

2024. 1. 6. 01:51MySQL/Class

반응형

# 운영 서버는 사용 중인 데이터가 이미 존재하기 때문에 신규 서버처럼 binlog 와 position값으로만 복제를 해서는 안됩니다.

먼저 운영서버(master)의 데이터를 가져와서 HA 구성을 해야 합니다.

 

1. 백업본

모든 전체 데이터가 백업되었다고 가정하였을 때 dump로 가져오던지, 파일 복사를 이용하던지 어떤 방법을 사용하던 운영서버에는 어떠한 영향을 주지 않기 때문에 가장 깔끔하게 HA를 구성할 수 있는 방법입니다. 아래 내용들을 참고하여 백업본에서 작업을 하는 것을 추천 드립니다.

 

2. 파일 복사

- 운영 DB가 shutdown 된 상태에서 파일 복사가 이뤄져야 해야하기 때문에, 작업을 진행하는 동안 서비스를 중지할 수밖에 없습니다.

 

# Master

(1) 운영 DB shutdown

shutdown & 데이터 폴더

 

(2) 데이터 파일 복사

파일 복사

 

(3) auto.cnf 삭제

server-uuid는 유니크 해야 하기 때문에 관련 정보가 저장되어 있는 auto.cnf 파일을 삭제해줍니다. 이 파일은 mysql 데몬이 실행되면 새롭게 생성되니 문제가 되지는 않습니다.

[root@test03 mysql_data]# rm -rf auto.cnf

 

(4) master 정보 확인

 - 복사가 완료 되면 운영DB는 바로 재시작 후 master 의 binlog와 postion 값을 확인합니다.

 - 서비스가 아직까지는 내려가있는 상태입니다. DML 작업이 이뤄지지 않는다는 가정입니다. 

 - 해당 정보는 앞서 DB가 shutdown 하기 전에 확인하는 것도 좋습니다.

master 정보

 

(5) 테스트 데이터 입력

 - 운영 서버가 아니기 때문에 운영 서버인척 하기 위해 테스트를 해보겠습니다.

 - 서비스가 올라간 순간 부터는 master 서버는 다시 운영 중이기 때문에 데이터가 계속 들어온다는 가정을 하고 테스트 데이터를 입력 해 보겠습니다.

 - 이후 slave에서 replication 을 설정 이후 신규 데이터가 있다면 파일은 복사하지 않았지만, 동기화되는 것을 확인해 볼 수 있을 것입니다.

테스트 화면

 

(6) replication 을 위한 계정 생성

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

 

 

# Replica

(1) change master

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

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

 

show replica status

 

(2) 데이터 확인

 - Master 에서 인서트한 데이터가 제대로 동기화가 되었는지 확인해봅니다.

데이터가 동기화 되었다.

 

 

3. mysqldump

- export 진행중에도 DML이 발생하여 데이터의 변화가 발생되기 때문에 필히 DML작업을 못하도록 차단 후에 작업을 진행해야합니다.

서비스에서 막거나, DB 자체를 read-only(restart 필요)로 설정하여 작업 진행을 하면 될 것입니다. 그리고 slave는 master와 동일한 셋팅으로 DB가 있어야 합니다. DML을 차단하는 작업은 다루지는 않겠습니다. DB설치는 여기를 참고해 주세요.

 

# Master

(1) export

[root@centOS9-04 data]# /mysql/local/mysql_8033/bin/mysqldump -uroot -p --all-databases -S /tmp/mysql> /home/mysql/fullDB.sql

 

(2) master 정보 확인

show master status

 

(3) dump 파일 복사

복사화면

 

(4) 데이터 insert

테스트 화면

 

(5) replicator 계정 생성

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

 

# Slave

(1) 초기 DB 확인

 

(2) import

[root@test03 data]# /mysql/local/mysql_8033/bin/mysql -uroot -p -S /tmp/mysql_8033.sock< /home/mysql/fullDB.sql

데이터 이관 확인

 

(3) change master

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

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

 

(4) 데이터 확인

데이터가 동기화 되었다.

 

 

# 데이터가 존재하는 디비서버(또는 운영서버) 에 대해 HA구성을 해보았습니다.

# 다른 방법이 있다면 댓글로 알려주시면 감사하겠습니다.

# 포스팅 순서가 잘못되었다고 생각되지만, 다음에는 replication 되는 과정을 한번 살펴 보도록 하겠습니다.

 

 

반응형