[스타트업 백엔드 일기😕] AWS MariaDB 이중화 (Master-Slave)

All We Need is Data, itself !·2025년 2월 21일
0

백엔드 여행

목록 보기
3/6

실서버에 넣기 위한 MariaDB의 이중화를 해야할 것 같다..!
그래서 미리-미리- 이중화해두기 ㅎㅎ 왜냐면 시스템 올렸다 내렸다 편하게 할 수 있는 건 지금뿐이니까..!


중간에 도저히 안풀리는 문제가 있어서 지선생님 도움을 좀 받았다..^^!


AWS에서 사용하니 당연히, 두 DB 간의 보안 그룹을 열어주어야 한다 😕
두 인스턴스 간의 보안 그룹 설정 및 Public Subnet으로의 ssh 연동이 확인되었다면, 설정을 시작해보자.

일단, mariadb 최신 버전에서는 my.cnf를 쓰지 않는다.
고로 my.cnf 를 하루종일 변경해도 변경점이 저장되지 않음.

이 내용을 지선생이 몰랐나보다. 계속 my.cnf를 던져주길래

라고 물어보니까 이렇게 대답하드라구여,,,, ^^ 이좌식이 ~! 처음부터 제대로 검색하란말이야ㅠㅠ!!

이래서 내가 지선생을 안쓰는건데.. 회사 오니까 다들 쓰고있어서...나도쓰게...되었다

1. Master의 50-server.cnf 변경

server-id=1
log_bin=mysql-bin
binlog_do_db=your_database  # 복제할 데이터베이스 이름

이렇게 써줄건데, binlog_do_db 옵션의 경우 복제할 '데이터베이스' 이름이므로,
전체를 다 백업하는 용도라면 설정하지말자!


이렇게 하고, 꼭 systemctl restart mariadb를 한번 해주자.
안하고 show master status를 때리니까 암것두 안나온당 😕

2. Master 에서 Replication 계정 생성

CREATE USER 'replica_user'@'%' IDENTIFIED BY 'passwd';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;

유저를 생성해준다. 이 유저는 Slave 쪽에 crud를 해줄 아이인 것으로 보임! (내가 이해한거라 확실 X)

SHOW MASTER STATUS;

마스터의 설정을 확인해서, Slave에 전달해주어야 Slave로 Master의 기록을 찾아서 가져갈 수 있으므로, 마스터의 정보 조회를 해준다.

이런식으로 나올것이다.

여기의 FilePosition을 써먹어야 한다.
binlog_do_db는 위의 옵션을 추가할 경우 나오는데, 나는 추가안했으므로 안나온당!


3. Slave DB의 50-server.cnf 설정

server-id=2
relay-log=mysql-relay-bin

server-id 가 master/slave를 나눠주는 priority 처럼 작동하므로 server-id를 중복시키면 안된다!
그리고 relay-log의 경우

이런거라고 한다.
옵션이랑 같이 생각해서 체크해보면, Master 서버가 bin log에 변경된 애들을 기록해두면
slave가 와서 bin log를 읽어가고, 이 bin log를 relay log에 저장해두고 자기 DB에 업데이트를 시킨다고 보면 된다.
따라서 relay-log의 이름을 저장하라는 뜻임.

헷갈렸던 부분을 말하자면, log_bin 옵션과 relay-log 둘 다 log 파일의 이름을 저장하는 것이다.
처음 cnf 파일에는 위치가 저장되어 있을건데, (/var/log/...) 그렇게 하면 해당 로그 파일의 권한을 다시 설정해줘야 하고, 귀찮은 일들이 생긴다고 한다.
따라서 datadir이 디렉토리를 알아서 설정하게 내버려두고, 우리는 이름만 정해주자.

4. DUMP하기

내가 이것때문에 시간을 2시간이나 잡아먹었는데,,;; 나는 slave 한테 bin 정보를 주길래 '아 현 상태를 알아서 복제하나보다' 했는데 그게 아니었음.
처음에는 database와 데이터들을 직접 dump 떠서 넣어줘야 한다고 한다.

따라서 master 서버에서 dump를 떠서 slave 서버로 보내주자.

대충 이렇게... ssh 접속할 수 있는 web 서버에서 옮겨줬다.
나는 pem키 때문에 master에서 slave로 바로 전송 안될거라고 생각했는데 (당연히 두 DB서버 AZ 다름)
되는거같기도 하고...?ㅠㅠ 잘 모르겠다 아무튼 이렇게 옮겨줬다


5. Master과 Slave 둘 다 restart 하기!

이것때문에.. 미리 하는거임 ㅠ
오류가 생기면 계속 restart 해줘야한다,,,


6. Slave 에서 Master 정보 설정하기

설정이 끝났으면, Slave한테 나 완료되었으니 이제 Master 정보 입력해줄게 ~ 시작해 ~ 라고 알려줘야한다.

CHANGE MASTER TO
  MASTER_HOST='Master_DB_Private_IP',
  MASTER_USER='replica_user',
  MASTER_PASSWORD='passwd',
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=93704;

아까 show master status 해서 나온 값을 여기에 알려줘야한다.
니 마스터는 이 사람이야~ 이 사람의 초기 데이터는 이래~ 라고 알려주는 것과 같다.


7. Slave 복제 시작

START SLAVE;
SHOW SLAVE STATUS\G;

slave 복제를 시작하고, 복제가 되고 나면 status로 현 상태를 확인해준다.

대충 이런식으로 뜬다.
Waiting for master.. 어쩌구 뜨면 성공이다.

계속 Connecting 상태로 있을 경우 아래쪽을 읽어보면 Error가 보인다.
나의 경우 ip를 복사해서 썼더니 '100.10.10.10' 이 아니라 '100-10-10-10' 이렇게 넣어서 에러가 났다.

따라서 트러블슈팅을 해주면 된다.


8. 확인하기

정상적으로 동작하는지 확인하고 싶다면, master에다가 데이터를 하나 넣어보자.
그리고 나서 slave에 데이터가 있는지 확인하면 된다!

업데이트가 잘 되고 있는 경우 데이터가 잘 들어오고 status에도 따로 error가 뜨지 않는다.

끝 -


출처 : 개발진스 짤 dev-hee 님 😃https://velog.io/@heelieben/%EA%B0%9C%EB%B0%9C%EC%A7%84%EC%8A%A4-%EC%A7%A4-%EB%8D%B0%EB%A0%A4%EA%B0%80%EC%84%B8%EC%9A%942

profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글

관련 채용 정보