redis 클 라 이언 트 가 읽 기와 쓰기 로 분 리 된 방식 에 대한 상세 한 설명 을 실현 합 니 다.

배경
(1)redis 단일 기기 의 읽 기와 쓰기 성능 은 몇 만 가지 가 볍 지만 온라인 환경 은 대머리 의 한 노드 만 있 지 않 고 sentinel 에 맞 춰 슬 레이 브 를 높 은 사용 가능 한 노드 로 배치 할 것 이다.
그러나 standby 의 slave 노드 는 대외 적 으로 서버 를 제공 하지 않 아 어느 정도 에 자원 을 낭비 하 게 만 들 었 다.
(2)업무 가 계속 발전 할 때 원래 의 단일 노드 캐 시 데이터(예 를 들 어 상품 정보 캐 시,설정 정보 등)의 조회 qps 가 계속 높 아 지고(qps 가 많이 증가 하지 않 음)십 몇 만,몇 십 만 을 돌파 할 때 이때 한 노드 가 견 딜 수 없 기 때문에 우 리 는 몇 개의 redis slaves 노드 를 추가 하여 이런 조회 의 부담 을 분담 해 야 한다.즉,읽 기와 쓰기 분리 이다.
그러나 자주 사용 하 는 redis 클 라 이언 트 jedis 는 읽 기와 쓰기 분리 능력 을 지원 하지 않 습 니 다.
실현 방식
(1)설정 센터 에서 master 와 slaves 의 연결 정 보 를 가 져 와 master 를 연결 하 는 쓰기 연결 풀 과 slave 의 읽 기 연결 풀 을 각각 초기 화 합 니 다.
(2)명령 을 분류 합 니 다:쓰기 명령 을 실행 하면 master 의 연결 풀 에서 연결 을 꺼 내 실행 합 니 다.읽 기 명령 이 라면 slave 의 연결 풀 에서 연결 을 꺼 내 실행 합 니 다.
여러 개의 slave 노드 가 있 을 수 있 습 니 다.일정한 전략 에 따라 부하 균형(가중치,랜 덤,폴 링..etc)을 할 수 있 습 니 다.그 중의 slave 노드 의 연결 탱크 에서 연결 을 가 져 올 수 있 습 니 다.
대략 이렇게 생 겼 다.

고가 용 버 전
앞의 실현 방식 은 정상 적 인 상황 에서 가능 합 니 다.
하지만:
(1)실행 중 master 가 끊 으 면 어떻게 합 니까?어떻게 자동 페 일 오 버 전환 합 니까?
(2)만약 에 유량 이 갑자기 증가 하면 동태 적 으로 하나 이상 의 slave 노드 를 확대 해 야 하 는데 어떻게 동태 적 으로 효력 이 발생 합 니까?
설정 파일 에서 master 와 slaves 의 ip+port 를 가 져 올 수 없습니다.redis ha 구성 요소 에서 현재 master 와 사용 가능 한 slave 목록 의 노드 정 보 를 동적 으로 가 져 와 야 합 니 다=>sentinel
1.초기 화
sentinel 에 게 master 와 slaves 의 노드 정 보 를 가 져 오 라 는 명령 을 보 냅 니 다.

//    masterName     master    ,        mater ha,    <masterName>  
SENTINEL get-master-addr-by-name <masterName>
//     slaves    
SENTINEL slaves <masterName>

연결 을 받 은 후 계속 시작 하 는 방식 으로 연결 풀 을 만 들 면 됩 니 다.
2.동적 페 일 오 버,확장
초기 화 완료 후,실행 중 master 노드 와 slaves 는 변 할 수 있 습 니 다.예 를 들 어
(1)master 고장,네트워크 파 티 션,sentinel 은 slave 를 새로운 master 로 향상 시 킵 니 다.
(2)슬 레이 브 노드 를 추가 하여 갑 작 스 러 운 증가 에 대응 합 니 다.
우 리 는 어떻게 클 라 이언 트 를 다시 시작 하지 않 고 동적 전환 을 할 수 있 습 니까?
sentinel 은 master 전환,slave 변경 등 작업 을 할 때 대응 하 는 channel 에 사건 을 발표 합 니 다.우 리 는 이러한 사건 을 바탕 으로 해당 하 는 변 화 를 감지 할 수 있 습 니 다.
참고:https://redis.io/topics/sentinel
2.1 페 일 오 버 전환 마스터
sentinel 이 master failover 전환 을 할 때 채널:switch-master 에 알림 을 보 냅 니 다.클 라 이언 트 가 이 채널 을 구독 하고 이 벤트 를 받 은 후에 초기 화 절 차 를 다시 진행 하면 됩 니 다.

2.2 확장 슬 레이 브
새로운 slave 노드 가 가입 하면 sentinel 이 감지 하면 channel:+slave 에 이 벤트 를 발표 합 니 다.저희 가 감청 한 후에 slaves 노드 정 보 를 다시 가 져 와 slaves 의 연결 탱크 를 재 구축 하면 됩 니 다.(여 기 는 master 의 변화 와 관련 되 지 않 습 니 다)

총결산
sentienl 획득 과 동적 감지 master,slaves 노드 정보의 변 화 를 바탕 으로 우리 의 읽 기와 쓰기 분리 클 라 이언 트 는 높 은 사용 가능+동적 확장 감지 능력 을 가 질 수 있 습 니 다.
여기 서 redis 클 라 이언 트 가 높 은 읽 기와 쓰기 분 리 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 redis 읽 기와 쓰기 분 리 된 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!

좋은 웹페이지 즐겨찾기