그누보드 리플리케이션 문제
관련링크
본문
그누보드 부하가 심해져서 DB서버 사양을 업그레이드 해도 한계가 있더군요.
리플리케이션으로 문제를 해결하려다보니...
그누보드는 쓰기문만 마스터에서 처리가 힘든 구조입니다.
명랑폐인님의 아래 글을 보고 많은 참고가 되었습니다.
명랑폐인님의 댓글중
common.lib.php 에 sql_update 함수를 하나 더 추가하고
sql_query() 함수 인자의 insert/update/delete 쿼리문을 모두 찾아서 sql_update()로 바꿔주는 방법
이 가장 좋을것 같더군요.
모든 파일에서 sql_query() 함수를 찾아서 바꿔야 하나요?
아니면 common.lib.php 에서만 바꾸면 되나요?
이 방법을 쓰신분들께 사용하는 방법을 좀더 자세히 설명을 부탁드려도 될까요?
답변 3
그누보드 기본 기능에서 db 리플리케이션 쓰는건 이미 포기 했습니다.
코어 소스를 너무 많이 수정해야 해서, 소스 관리가 어렵게 됩니다.(보안패치등)
코어 소스 많이 수정하면, 나중에 후회하십니다.(진짜예요.)
기본 코드 이외에 신규로 만드는 코드만 마스트/슬레이브를 따로 사용합니다.
(보통 cronjob으로 실행하는 코드들이 slave를 대상입니다.)
이를 분리하기 위해서
master_db 용 pdo 객체와
slave_db 용 pdo 객체를 따로 만들고,
필요할때마다 따로 요청하도록 하였습니다.
$list = $master_db->query($select_sql)->fetchAll(PDO::FETCH_ASSOC);
$master_db->exec($update_sql);
$log_list = $slave_db->query($select_sql)->fetchAll(PDO::FETCH_ASSOC);
대략 이런식의 코드가 만들어집니다.
어디에서 문제가 생기는지리플리케이션이 부하를 일으킨다면 이건
master쪽의 이슈일 확률이 높습니다.
db개수와 트랜잭션을 조절해보심히.
쪽지주세요
파아랑님 답변 감사합니다.
리플리케이션 하기 전입니다.
쓰기문일때만 마스터로 접속하게 하는 부분을 처리하려고 하는데,
명랑폐인님의 댓글 방법 적용에 대해 자세한 설명이 필요해서였습니다.