[DB] Master Slave 로의 Application 설정 변경
Master Slave구성된 DB에서 질의 Application에서의 설정
Master Slave 구성된 DB에서 질의 Application에서의 설정
목적
DB의 부하를 줄이기 위해서 Write, Read의 Master Slave 구성된 DB에서 분리하기 위함상세 설계
정보
현재 구성된 DB 구조는 Master(Write), Slave(Read) 2개로 구성되어 있음요구사항
Write(Create, Update, Delete)일 경우 Master로 사용
Read(Selete)일 경우 Slave로 사용구현 방법
Transactional 어노테이션의 ReadOnly 옵션 값 (true), (false)으로 설정
AOP를 사용한 DataSource를 Service Method단에서 사용자 지정 설정Transactional 구성 해야되는 부분은 똑같다. Propagation을 잘 고려하여야 한다. @Transactional 어노테이션을 모든 곳에 추가하여야한다. DataSource 지정 구성 해야되는 부분은 똑같다.참고사항
Replication 의 동작 방법
Master Slave로 나뉘어져 있는 DB에 데이터를 동기화가 어떻게 되는 것인가??
Master는 바이너리 로그라는 파일에 DB에서 발생한 변경내역을 계속해서 저장한다. Slave는 I/O Thread를 통하여 Master에 요청을하고, Master는 Binlog dump를 통하여 해당 내용을 전송하여 받은 다음, Slave는 전송받은 내용을 Relay Log를 만들고, 변경사항을 계속해서 동기화 한다. 만약 Master, Slave 1:1 구성일 경우 (대체로 Replication을 구성한다면 Master(1), Slave(3)의 셋트로 구성하는 것이 일반적이다) Slave가 죽는 경우가 발생하여 연결이 되지 않을 수 있다. 그런 경우, Multi Master(2대의 Master)로 구성을 고려 해 볼 수 있을 것 같다.
각각의 Master/Slave 구성 설정완료 후, 커넥션의 갯수가 증가하는 것을 아래 커맨드로 알 수 있다.
show status where variable_name in (
'max_used_connections',
'aborted_clients',
'aborted_connects',
'threads_connected',
'connections'
);
