Keepalived + LVS + nginx를 nginx를 고 가용성 클러스터를 구축하는

  nginx를 등등 리버스 프록시, 요청 유통 지원, 매우 유용한 기능의로드 밸런싱, 캐싱 및를위한 아주 좋은 도구입니다. 요청 처리에서의 nginx는 모델 기반의 이벤트 리스너는 epoll 인 모델을 사용하기 때문에 매우 효율적 요청 처리 효율 수백만 번의 동시 도달 할 능력을 갖는다. nginx를 수신 된 요청이 애플리케이션 서버로드 밸런싱 전략의 다음 단계로 배포 할 수 있습니다, 이러한 서버는 일반적으로 클러스터에 배포, 따라서 불충분 한 성능, 응용 프로그램 서버는 시스템 트래픽 방법을 추가하여 확장 할 수 있습니다. 이 경우, 일부 대형 사이트의 병목, 성능의 nginx에서 온다, 독립 실행 형 동시성 등의 nginx는의 nginx의 규모에이 시간을 출장 및 클러스터 모델을 지원하지 않습니다 자체를 nginx에, 이렇게한다 그것은 특히 중요하다.
  
  keepalived 도구는 상태 검출 서버 장애이다. 구성 파일에서, 서버는 대기 서버가 요청의 상태를 검출 구성 될 수있다. 그 keepalived는 서버의 상태가 정상이 아니라면 정상을 나타냅니다 요청 200 상태 코드가 반환되는 경우, 서버 요청을 지정하는 구성 중에 제공되는 서비스의 요청을 보낼 계속, 다음이 keepalived합니다 서버를 오프라인, 온라인 상태로 다음 백업 서버로 끕니다.
  
  LVS는로드 밸런싱 도구 4 층이다. 네 개의로드 밸런싱 해당 일곱 네트워크 프로토콜, HTTP 프로토콜 일곱에 기반 등의 공통 프로토콜 및 즉 계층 -4 프로토콜에 작용 LVS 소위 : 전송 계층, 네트워크 계층, 데이터 링크 및 물리 계층. 여기에 주요 전송 계층 프로토콜 TCP 및 UDP 프로토콜, 즉 주요 지원 TCP 및 UDP 정맥 주사 방법입니다입니다입니다. 정맥 주사는 네 개의로드 밸런싱에 위치하기 때문에 또한, 따라서 요청을 처리 할 수있는 능력 등의 nginx 요청 처리가 일곱의 네트워크를 기반으로 한, 매우 일반적인 서버보다 더 높은,로드 밸런싱 정맥 주사가의 nginx입니다 10 배 이상.
  
  위의 설명을 통해, 우리는 대형 사이트에서 찾을 수 있습니다, 응용 프로그램 서버가 수평 확장 될 수 있으며, nginx를 수평 확장을 지원하지 않습니다, 다음의 nginx는 성능 병목이 될 것입니다. 우리는 정맥 주사와의 nginx를 결합하면, 당신은 여러 가지의 nginx 서버로 균형 분배를 요청합니다로드 밸런싱 정맥 주사를 통해 여러의 nginx 서버를 배포 할 수 있습니다 다음의 nginx 서버에서 분산 있도록 LVS는로드 밸런싱 도구입니다 각 응용 프로그램 서버에, 그래서 우리는의 nginx의 측면 확장을 얻을 수 있습니다. 자연의 nginx로 인해 애플리케이션 서버이며, 따라서 또한 내려갈 수 있으므로 이것은 keepalived Nginx의 결함 검출 및 스위칭 서비스와 함께 달성 될 수있다. 즉,에 의해 + 정맥 주사 +의 nginx, nginx를 우리가 달성 한 고 가용성 클러스터 모델을 keepalived.
  
  위의 설명에서, 우리는주의 것 비록 keepalived + 정맥 주사 + nginx를 nginx를 클러스터 모델을 얻을 수 있지만, 우리는 자체가 IP 및 포트의 nginx를 사용하는 경우, 기본 포트들을 80 및 443 다음 정맥 주사는 다른 IP와 포트 그것으로 서버의 nginx에 요청을 달성하는 방법은? 이것은 가상 IP를 통해 달성, 공통, 외부 클라이언트 요청이 IP 있으며, 정맥 주사는 가상 IP, 스케줄링 및 부하 분산 정책 구성에 대한 요청을받은 후, 선택을 제공 소위 가상 IP의 IP 밖에 타겟의 nginx 서버는 다음 요청을 서버로 전송한다. 다음은이 두 가지 개념은 정맥 주사하고, 스케줄러는로드 밸런싱 전략이다, 소위 스케줄러는 정맥 주사는 세 가지 주요 스케줄러가 있다는 방식으로 요청 및 응답 데이터를 처리합니다 말합니다 :
  
  네트워크 주소 변환 (VS 통해 가상 서버 / NAT) : 이 방법의 주요 원리는 사용자가 가상 IP에 요청을 보내는 것입니다, 정맥 주사 후 요청 대상 IP 패킷의 부하에 따라 알고리즘의 균형을 목표 처리 서비스를 선택합니다 주소 변경 대상 서버에 대해 계산하고, 서버에 송신. 상기 응답 패킷에 대한 응답 데이터 지정자의 소스 어드레스는 수정 된 가상 IP 어드레스에 대상 서버에 리턴한다. 이런 식으로, 클라이언트에서, 그 형태는 단일 서버를위한 것입니다. 그러나,이 방법의 단점은 요구하는 경우보다 큰 경우 상기 스케줄러에 필요한 모든 응답 데이터는, 그 스케줄러는 전체 시스템의 병목 될 것이라는 것이다.
  
  IP 터널링 (VS /를 통해 가상 서버 TUN) 이 VS / NAT이다 해결하는 주요 방법은, 응답 데이터는 스케줄러를 통해 발급합니다. VS / NAT 마찬가지로 데이터 운영자는 여전히 상기 요청을 수신하고, 상기 타겟의 IP 패킷의 타겟 서비스 IP 수정, 타겟 서비스 데이터를 처리 할 직접 소스 IP 응답 패킷 후 가상 IP를 수정 한 후 클라이언트에 요청을 보냅니다. 이러한 방식으로, 응답 데이터 인해 일반 요청 메시지 패킷에 크게 시스템 처리량을 개선한다 이와 같이, 스케쥴러로 복귀 할 필요없이 각각의 처리 대상의 서비스에 의해 수행하지만, 또한이 다수 스케줄러보다 작은 응답 만은 시스템의 전체 부하가 각 서버에 동일하게 공유됩니다 요청 패킷을 처리 할 필요가있다.
  
  직접 라우팅 (VS / 통하여 가상 서버 DR) VS / TUN에 대해 이런 방식으로는 큰 차이는 VS / NAT IP 어드레스가 타겟 서비스의 IP 주소를 변경하기위한 요청 메시지 인 것을, 그리고 VS / DR은 IP 주소 VS / TUN 결국입니다 전송 데이터를 MAC 주소로 변환 할 필요가 있기 때문에, 직접 효율적입니다 이런 식으로, 목적지 주소로 MAC 주소 요청 패킷을 수정하는 것입니다.
  
  1. 환경 준비
  
  1. VM웨어;
  
  2. 4 CentOs7 가상 호스트 : 172.16.28.130, 172.16.28.131는 172.16.28.132, 172.16.28.133은
  
  3. 시스템 서비스 다음 LVS, Keepalived
  
  4. 웹 서버 : Nginx와
  
  5. 클러스터 구조 : LVS DR 모드
  
  2. 소프트웨어 설치
  
  에 네 개의 가상 머신, 우리는 다음과 같은 방법으로 클러스터를 구축 :
  
  172.16.28.130 LVS + keepalived
  
  172.16.28.131 LVS + keepalived
  
  172.16.28.132의 nginx
  
  172.16.28.133의 nginx
  
  여기에 우리가 172.16.28.130 및 정맥 주사 + keepalived 작업 기계로 172.16.28.131이 기계를 사용, 그것은 주로로드 밸런싱 및 장애 감지 및 오프라인이 두 기계의 역할은 우리가 172.16.28.132와 172.16 사용 응용 프로그램 서버, 주로 외부 서비스 공급자로 .28.133이 기계. 네 개의 서버 전체 백엔드 서비스로 클러스터 및 제공하는 두 가상 IP는 172.16.28.120입니다. 서비스가 구성 밸런싱 똑같 부하 두 개의 서버, 두 서버는 마스터 서버로 한 백업 서버와 같은 하나 LVS 검출되는 경우 그것은 keepalived, 주목해야한다. 정상적인 상황에서는 클라이언트가 가상 IP를 요청하는 경우, LVS는 마스터 서버로 요청을 전달하고 서버로드 밸런싱 정책에 따라 구성된 마스터 응용 프로그램 서버를 선택하고 처리를 위해 응용 프로그램 서버에 요청을 보냅니다. 어떤 점에서 경우, LVS 인해 장애 조치 기능을 수행하기 위해, 서비스 라인을 제공하기위한 시스템의 고장 및 오류 오프라인, 다음 백업을 감지 keepalived 마스터 서버의 실패까지이다.
  
  장착 keepalived + 2.1 정맥 주사
  
  장착 172.16.28.131 172.16.28.130와 IPVS과 keepalived :
  
  #은 IPVS 장착
  
  하여가 ipvsadm 설치 sudo는 냠
  
  #이 keepalived 마운트
  
  sudo는 냠 설치 keepalived
  
  의 nginx에 장착 172.16.28.132 172.16.28.133 :
  
  # 설치가 nginx에
  
  sudo는 냠 nginx를 설치
  
  : 당신은 다른 정맥 주사 + keepalived 두 머신이 개 nginx를 서버에 요청하실 수 없습니다, 모두의 nginx 서버에 방화벽을 해제해야, 그 주
  
  #은 방화벽 해제
  
  firewalld.service systemctl 금지를
  
  두로드 밸런싱 머신을 참조 위해 LVS를 지원할지 여부 :
  
  sudo는 lsmod를 | ip_vs 그렙
  
  # 당신은 다음의 지원을 다음과 같은 결과가 표시되면
  
  [zhangxufeng @ localhost를 ~] $ sudo는 lsmod를 | 그렙 ip_vs
  
  145 497 0 ip_vs
  
  nf_conntrack 137 239 1 ip_vs
  
  libcrc32c 12,644 3 XFS, ip_vs, nf_conntrack
  
  위의 경우를 어떤 결과를 명령하지, 다음 IPVS를 시작한 후 명령 sudo는 ipvsadm 명령을 실행, 당신은 위의 명령으로 볼 수 있습니다. IPVS를 시작한 후, 우리는 마스터 시스템과의 / etc / keepalived / 편집 keepalived.conf 파일 디렉토리에, 우리는 172.16.28.130 기계, 마스터 노드는 다음과 같이 구성 할 수 있습니다 :
  
  # 무료 구성에 참여
  
  global_defs을 {
  
  LVS에 지정된 director1 ID 번호를 lvs_id
  
  }
  
  # 구성 VRRP
  
  위해 LVS {vrrp_instance
  
  주 마스터 # 현재 노드를 지정하는 마스터 노드입니다
  
  여기서 인터페이스 ens33 번호 ens33 카드의 이름은 ifconfig 또는 IP ADDR 볼 수있다
  
  여기에 지정된 51 # 가상 경로 ID, 마스터 노드와 백업 노드 virtual_router_id 동일한 지정할 필요
  
  151 # 현재 노드의 우선 순위 값을 지정 우선 더 높은 우선 순위, 노드보다 마스터 백업 노드
  
  1 #은 초에 VRRP 광고 지정된 간격을 보내 advert_int
  
  {인증을
  
  기본으로, 통과 # 인증을 AUTH_TYPE
  
  auth_pass 123456 # 액세스 암호 인증
  
  }
  
  virtual_ipaddress {
  
  172.16.28.120 # 가상 IP를 지정
  
  }
  
  }
  
  # 가상 서버 구성 - WWW 서버에 대한
  
  #의 무대 실제 호스트 구성
  
  VIRTUAL_SERVER 172.16.28.120 (80) {
  
  delay_loop # 1 건강 검진 간격
  
  RR 번호로드 밸런싱 전략 lb_algo을, 여기에 설문 조사입니다
  
  DR 번호 스케줄링 lb_kind은 형, 여기에 DR입니다
  
  persistence_time # 1 시간의 길이의 실제 호스트에 동일한 요청 명중 할 기간 지정
  
  프로토콜 TCP 번호는 실제 호스트 프로토콜 유형 무대 액세스를 지정합니다
  
  실제 구성 서버 1 #
  
  #은 실제 호스트를 지정 IP 1 포트
  
  172.16.28.132 80 {real_server
  
  체중 # 1 무게의 현재 호스트를 지정
  
  TCP_CHECK을 {
  
  10 # 지정된 타임 아웃 하트 비트 체크 connection_timeout
  
  nb_get_retry 3 # 하트 비트 제한 시간을 지정 반복의 횟수 이후
  
  3 # 얼마나 오래 지연 전에 지정 delay_before_retry
  
  }
  
  }
  
  2 실제 설정 서버
  
  172.16.28.133는 {80 real_server
  
  중량 www.tdcqpt.cn. (1 #)는 현재 호스트 중량 나타낸다
  
  TCP_CHECK을 {
  
  connection_timeout # 10 지정된 하트 비트 타임 아웃 체크
  
  nb_get_retry 반복 하트 비트 타임 아웃이 #. (3) 다음에 지정된
  
  delay_before_retry한다. 3 # 얼마나 오래 지연 전에 지정
  
  }
  
  }
  
  }
  
  위에서 백업 노드 keepalived 마스터 노드의 구성 구성된 거의 마스터 이 같은 단지 다른 상태 및 우선 순위 매개 변수입니다. 다음은 전체 구성 백업 노드입니다 :
  
  # 무료 구성에 참여
  
  global_defs을 {
  
  lvs_id director2 # 지정된 정맥 주사의 ID
  
  }
  
  # VRRP 구성
  
  위해 LVS {vrrp_instance
  
  백업 # 현재 노드를 지정 국가는 마스터 노드
  
  여기에 인터페이스 ens33 번호의 ens33 카드의 이름은 ifconfig를 통해 볼 수 있습니다 또는 IP 요지는
  
  51 virtual_router_id 여기 #입니다 가상 경로 ID, 마스터 노드 및 백업 노드가 동일한 지정해야 지정
  
  우선 150 # 현재 노드의 우선 순위를 지정하는 값을 더 큰 상위 노드보다 우선, 마스터 백업 노드
  
  (1 #)는 VRRP 광고를 보낼 지정 advert_int 간격 초에
  
  인증 {
  
  기본으로 AUTH_TYPE 패스 # 인증,
  
  auth_pass 123456 # 암호 인증에 액세스 할 수
  
  }
  
  {virtual_ipaddress을
  
  172.16.28.120 번호는 가상 IP를 지정
  
  }
  
  }
  
  # www.dongfangyuld.com에서 WWW 가상 서버의 구성 서버
  
  # 진정한 배경 호스트 구성
  
  (80) {172.16.28.120 VIRTUAL_SERVER
  
  delay_loop. 1 # 상태 점검 간격
  
  RR 번호 부하가 폴링 정책, 균형 lb_algo
  
  lb_kind DR # 스케줄러 유형, 이것이 DR의입니다
  
  persistence_time가. 1 개 # 길이는 요청이 동일한 실제 호스트를 공격 지정 시간의 길이
  
  프로토콜 TCP 번호는 실제 호스트 프로토콜 종류 무대 액세스 지정
  
  # 1 구성 서버 실제
  
  (1) 실제 호스트와 포트를 지정 #의 IP
  
  172.16.28.132 (80) {real_server
  
  체중 # 1 무게의 현재 호스트 지정
  
  TCP_CHECK {
  
  10 #를 지정 connection_timeout을 하트 비트 제한 시간 확인
  
  nb_get_retry 반복 하트 비트 제한 시간은 #. 3 다음에 지정된
  
  delay_before_retry을. 3 #이 시간을 지연하기 전에 지정
  
  }
  
  }
  
  # 2 리얼 구성 서버
  
  172.16.28.133가 {80 real_server
  
  무게 현재 호스트를 지정. 1 #을 무게
  
  TCP_CHECK는 {
  
  # 10 connection_timeout 하트 비트 시간 제한 검사를 지정합니다
  
  nb_get_retry 하트 비트 타임 아웃이 후 # 지정된 반복. 3
  
  delay_before_retry. 3 # 얼마나 지연 시도하기 전에 지정
  
  }
  
  }
  
  }
  
  마스터와 마스터 다운되면 판정 구성된 백업 정확하게 같은 것 때문에, 백업을 따라 구성 될 수있다 원활한 핸드 오버 서비스를 제공합니다.
  
  정맥 주사 + keepalived 시스템 구성이 완료되면, 우리는 다음과 같은 구성의 nginx는 두 개의 응용 프로그램 서버를 갖추고있다. 여기서 우리는 다음과 같이 응용 프로그램 서버가 상태 코드 (200)에 프로필을 반환하도록되어, 현재의 IP를 반환 호스트가 구성 될 때 nginx에 :
  
  자동 worker_processes,
  
  # PID가 /run/nginx.pid,
  
  이벤트 {
  
  worker_connections 786;
  
  }
  
  HTTP {
  
  서버 {
  
  80 듣고,
  
  여기에 # (200)는 직접 반환 상태 코드와 텍스트입니다
  
  위치 / {
  
  ; default_type 텍스트 / HTML
  
  ! "여보세요, 서버 [email protected] Nginx에 www.kunlunyule.com \ N-"반환 (200) ;
  
  }
  
  }
  
  }
  
  자동 worker_processes;
  
  /Run/nginx.pid PID #;
  
  이벤트 {
  
  worker_connections 786;
  
  }
  
  HTTP {
  
  서버 {
  
  청취 (80),
  
  여기에 # (200)는 직접 반환 상태 코드와 텍스트입니다
  
  위치 / {
  
  default_type www.renheyuLe.com 텍스트 / HTML,
  
  반환 200 "여보세요 ! "라고 N- \ Nginx에 서버 [email protected]는;
  
  }
  
  }
  
  }
  
  당신은 동일하지 않습니다 텍스트는 호스트의 IP에서 두 개의 기계를 돌려 볼 수 있습니다. nginx를 구성 후, 시작하려면 다음 명령에 의해 수행 될 수있다 :
  
  sudo는의의 nginx를
  
  우리가 스케줄러 전술 LVS 우리는이 모드에서, 앞서 언급 된 DR 모드를 사용하기 때문에 nginx를 시작 후, 우리는 가상 IP를 구성해야합니다, 클라이언트의 응답이 직접 클라이언트에게 실제 서버이며, 실제 서버는 가상 소스 IP IP 주소에 대한 응답 패킷을 수정해야, IP 여기의 역할을 가상 구성입니다. 우리는 다음과 같은 쓰기, /etc/init.d/lvsrs 파일을 편집
  
  # / 빈 / bash는!
  
  ifconfig를 LO : 0 172.16.28.120 172.16.28.120 최대 넷 마스크 255.255.255.255 브로드 캐스트
  
  경로 추가 -host 172.16.28.120 dev에 LO : 0
  
  에코 "0">은 / proc / SYS / NET /의 IPv4 / IP_FORWARD
  
  에코. "1">은 / proc / SYS / NET /의 IPv4 /를 CONT / LO / arp_ignore
  
  에코 "2">은 / proc / SYS / NET /의 IPv4 /를 CONT / LO / arp_announce
  
  . "1"에코 www.chenghylpt.com>은 / proc / SYS / NET /의 IPv4 / conf의 / 모든 / arp_ignore
  
  에코 "2">은 / proc / SYS / NET /의 IPv4 / conf의 / 모든 / arp_announce의
  
  출구 0
  
  LO : ; 호스트 네트워크 카드의 현재 실제 이름을 나타냅니다
  
  ; 가상 IP를 나타냅니다 : 172.16.28.120이
  
  완료 후 작성할 수 있습니다 스크립트 파일을 실행합니다. 그런 다음 keepalived 시스템에 두 개의 정맥 주사 + keepalived 서비스를 시작합니다 :
  
  sudo는 서비스 시작 keepalived
  
  : 다음 명령 + keepalived 전략의 구성을 볼 수 있습니다 마지막으로 정맥 주사를
  
  명령을 이용, ipvsadm -ln [zhangxufeng keepalived @ localhost를] $ sudo를
  
  IP 가상 서버 버전 1.2.1 (크기 = 4096)
  
  보호 해주는 보이나 인근 포트 스케줄러 플래그
  
  -> RemoteAddress :
  
  RR 172.16.28.120:80하는 TCP
  
  -.> 172.16.28.132:80 국도 1 개 0 0
  
  테스트 2.2 클러스터
  
  위의 단계에 따라, 우리는 구성 정맥 주사 + keepalived +의 nginx 클러스터를 완료했다. : 브라우저에서, 당신은 우리가 다음과 같은 응답을 볼 수 있습니다 http://172.16.28.120에 액세스 할 수 있습니다
  
  ! 헬로, Nginx에 서버 [email protected]
  
  다음과 같이 반복적으로 브라우저를 새로 고침 한 후, 당신은 브라우저 스위치의 텍스트를 볼 수 있습니다 LVS로드 밸런싱 전략은 생산 때문입니다
  
  ! 헬로, Nginx에 서버 [email protected]
  
  3. 요약
  
  먼저 정맥 주사와 작품 keepalived이 문서가 설명 된 후, 그 작품의 여러 모델을 도입 정맥 주사 + keepalived + nginx를 nginx를 자세히 설명과주의를 필요로하는 문제를 설명하기 위해 클러스터 접근 방식을 구축 할 수 있습니다.

추천

출처www.cnblogs.com/qwangxiao/p/11278978.html