서비스 마스터-slave 전환

1491 단어
서비스 리더-slave 전환
하나의 서비스가 만약에 매우 중요하다면 일반적으로 그에 대해 주비 배치를 해야 한다. 상태를 위주로 하는 노드는 대외적으로 서비스를 제공하고 노드에서 시시각각 대기하며 주 노드의 고장을 기다리며 주 노드가 대외적으로 서비스를 제공하는 것을 대체해야 한다.어떻게 효율적이고 정확하게 주종 전환을 진행하는가가 매우 중요하다.현재 주종 전환이 발생하는 장면은 다음과 같다.
  • 마스터 노드 프로그램 활성 종료
  • 마스터 예외 종료
  • 메인 노드와 etcd 네트워크 이상
  • 마스터 프로그램 활성 종료
    이런 상황은 처리하기 쉽다. 노드가 퇴출하기 전에 etcd에 등록된 노드를 삭제하고 노드watch에서 등록 노드로의 변화까지 주 노드로 경쟁한다.
    마스터 예외 종료
    이상 종료, 프로그램은 etcd에 등록된 노드를 정상적으로 삭제할 수 없고, 노드에서 주 노드의 이상을 감지할 수 없습니다.따라서 노드가 등록할 때ttl시간을 설정해야 한다. 주 노드와 etcd는keepalive보존을 하고 이상 후ttl시간을 초과하면 심장박동이 활성화되지 않으면 etcd는 등록 노드를 자발적으로 삭제하고 노드에서 감지하여 주 노드가 된다.
    주 노드와 etcd 네트워크 이상
    네트워크 이상 상황은 가장 처리하기 어렵다. 비록 ttl을 설치하고 정기적으로 심장 박동을 유지하지만 이런 방식은 노드에서 주요 노드로 경쟁한다는 것을 통지할 수 있기 때문이다.그러나 원래의 주 노드는 여전히 실행 중이다. etcd 네트워크와 이상하기 때문에 이 노드는 현재의 주 노드 정보를 모른다.간단한 해결 방법은 심장 박동을 유지할 때 실패할 때 서비스가 직접 종노드로 퇴출되고 새로운 선택한 주 노드가 원래 네트워크가 이상한 주 노드와 동시에 작동하는 것을 피하는 것이다. 그러나 이것은 서비스가 매우 불안정하고 주종 노드가 더욱 빈번하게 전환될 수 있다.우리는 etcd를 사용하여 ttl에 구성 요소 lease를 봉하여 이 기능을 실현할 수 있다.
    func (clientv3.Lease).KeepAliveOnce(ctx context.Context, id clientv3.LeaseID) (*clientv3.LeaseKeepAliveResponse, error)
    
    type LeaseKeepAliveResponse struct {
        *pb.ResponseHeader
        ID  LeaseID
        TTL int64
    }
    

    인터페이스Keep Alive Once를 사용하여 보증 업무를 하고 이lease의 남은 만료 시간ttl을 되돌려줍니다. 우리는 남은 ttl에 따라 예상 만료 시간을 계산하여 로컬에 저장한 다음에 현재 시간이 예상 만료 시간을 초과했는지 정시에 견지합니다. 그러면 우리는lease가 언제 만료되었는지 정확하게 알 수 있습니다. 그리고 제때에 주종 전환을 하고 주종 전환 절차가 외부의 etcd에 의존하지 않도록 합니다.

    좋은 웹페이지 즐겨찾기