AWS의 EC2를 확장할 때와 DB 서버를 확장할 때는 약간 다르게 접근해야 하는데요.

RDS를 확장할 때의 전략중 하나가,

읽기 전용 서버들을 복제해서 부하를 분산시킬 때 사용하는 Replication입니다.

오늘은 이 방법에 대해서 정리해 보도록 하겠습니다.

 

참고로 이글은 RDB를 생성했다는 가정하에 쓰는 글이기 때문에,

RDB생성은 아래 링크를 참조해 주세요.

>> RDS 관계형 데이터베이스 서버 생성하기 #Free Tier #AWS

 

 

1. DB의 특성과 Read and Write

 

DataBase 서버 사용의 특징은 Read가 Write보다 훨씬 많다는 것입니다.

대부분의 조회에 쓰이는 Select문의 빈도가 매우 높구요.

프로필 수정이나 컨텐츠 게시 및 삭제등에 쓰이는,

insert, udpate, delete는 상대적으로 빈도가 낮습니다.

 

사용자가 많아지면, 어떻게 대응하면 좋을까요?

한 대의 컴퓨터를 Master로 정의하고,

나머지 컴퓨터를 Slave로 정의해서 Master를 복제한 Slave를 늘려가는 구조를 만들어 주면 되는데요.

이렇게 서버를 복제하는 것을 Replication이라고 하는데요.

 

Write(Insert, Update, Delete)를 Master에서만 이루어지도록 하고,

Master에서 Slave들이 데이터를 복제해가도록 하는 구조를 취하면 되는 것 이지요.

Read와 관련된 작업들은 모두 Slave에서 이루어지도록 해주면,

좀 더 효율적으로 DB를 구성할 수 있습니다.

(물론, Master도 감당을 하지 못할때는 Sharding이라고 하는 방법을 사용해서,

쓰기 작업들도 서버를 나누어야 하지만 말이지요.)

 

중요한 것은 저희가 이런 작업들을 Linux서버에 하는 것이 아니라,

이런 서비스를 제공해주는 AWS RDS서비스를 돈을 주고 사용하는 것 이지요.

 

2. RDS에서 Master와 Slave 설정하기

 

먼저 Service > RDS에서 Master로 사용할(복제할) 서버를 선택합니다. 

다음으로, Instance Actions 드롭다운 메뉴를 누른다음,

Create Read Replica를 선택해 주면 됩니다.

 

 

 

그럼 이제, Slave로 사용될 RDS 인스턴스를 생성할 때의 옵션들을 볼 수 있는데요.

먼저 할 일은 복제될 서버가 어떤 사양을 가지게 될지 정해 주는 것 인데요.

아래는 T2.micro로 선택되어 있습니다.

 

대부분의 설정이 RDS를 새로 생성할 때와 크게 다르지 않습니다.

예전에 RDS스냅샷을 설정하는 것에 다룬 적이 있었는데요.

그것과도 크게 다르지 않구요.

 

다만 차이가 있다면, 아래와 같은 부분들인데요.

 

Read Replica Source는 복제할 대상, 즉 Master를 선택해 주는 것이구요.

DB Instace Identifier는 Slave가 될 RDB Instance의 이름을 가르킵니다.

Slave 서버임을 알 수 있는 이름으로 정해주면 됩니다.

Slave서버는 계속 늘어날 수 있으므로 이름을 정해서 연속적으로 사용할 수 있도록 하면 좋을 것 같습니다.

 

 

Publicly Accessible은 특별히 외부에서 EC2를 거치지 않고 DB에 접속할 일이 없다면,

No로 해 주어야 안전하겠지요.

Availibility Zone도 선택할 수 있는데요.

Zone을 Master와 다르게 하면, 좀 더 안정적으로 서버를 구성할 수도 있을 것 같습니다.

 

 

 

다른 부분들은 수정하지 않고, Create Read Replica버튼을 눌러줍니다.

중요한 것은 이렇게 Replica를 만들 때,

과업이 완료될 때 까지 Master서버의 접속에도 문제가 발생할 수 있다는 점 입니다.

 

3. WepApp 코드 수정

이제 AWS에서 Master와 Slave구조가 생성되었습니다.

 

남은 것은, EC2에서 코드로 Write는 Master서버로 보내고, 

Read는 Slave서버로 보내주는 것 인데요.

 

가볍게, NodeJS기준으로 보자면,

Connection Configuration을 각각 다르게 해주면되는데요.

 

host위치는 RDS에서 각각의 Instance를 선택하면 나오는 화면에서,

아래와 같이 endpoint를 통해 확인할 수 있습니다.

 

 

예를들면, WebApp에 따라 다르겠지만,

NodeJS에서 아래와 같이 host부분에 read와 writeConnection을 서로 다르게 설정 해 주면 되겠습니다.

 

 

이상으로 AWS의 RDS서비스의 Replication을 설정하는 방법에 대해서 정리해 보았는데요.

다음 글에서는 이렇게 Replication된 RDS인스턴스들에게 Load를 분산하는 방법에 대해서 정리해 보도록 하겠습니다.

 

더 좋은 내용이 있다면 이 글을 통해서 업데이트 하도록 하겠습니다.

 

728x90
  1. Clazitive Developer 2021.06.29 23:30 신고

    Master Slave 설정을 해주었을때, Master가 다운되는 경우 App의 mysql Connection 호스트 정보를 바꾸어 줘야 하나요?

+ Recent posts