>백엔드 개발 >PHP 튜토리얼 >nginx+keepalived 고가용성 로드 밸런싱

nginx+keepalived 고가용성 로드 밸런싱

WBOY
WBOY원래의
2016-08-08 09:27:521178검색

말할 것도 없이 nginx 설치 및 구성, 로드 밸런싱에 대해서는 제가 쓴 "nginx 로드 밸런싱 실습"이라는 다른 글을 읽어보실 수 있고, 로드 밸런싱에 대해서는 제가 쓴 다른 두 글을 읽어보실 수 있습니다. 하나는 "lvs+keepalived 로드 밸런싱"이고 다른 하나는 "haproxy+keepalived 로드 밸런싱"입니다. 세 가지 유형의 로드 밸런싱 간의 차이점은 제가 재인쇄한 "Software Level Load Balancer"(소개) 기사를 참조하세요. 및 LVS/HAProxy/Nginx 기능 비교)" 구성 단계로 바로 이동합니다.

1. 시스템 환경

[일반] 보기 일반 사본

  1. 시스템 버전: CentOS 릴리스 5.9(최종) x86 32비트
  2. nginx 버전: 1.2 .8
  3. 연결 유지 버전: 1.2.4
  4. 마스터 연결 유지:192.168.207.130
  5. 킵얼라이브에서:192.168.207.131
  6. VIP: 192.168.207.140
  7. WEB_1:192.168.207.129 포트 80 🎜 >WEB_2:192.168.207.13 0 8080 포트
  8. WEB_3:192.168.207.131 8080 포트
  9. 2.Custom nginx 구성 파일
에서 작동 중입니다. 192.168.207.130 및 192.168.207.131


[일반] 보기 일반 사본

useradd nginx
  1. vi /usr/local/nginx/conf/nginx.conf
  2. 내용은 다음과 같습니다.

[일반] 보기 일반 사본
  1. #실행 중인 사용자
  2. 사용자 nginx nginx; 🎜>
  3. worker_processes 2; >
  4. #전역 오류 로그 및 PID 파일 
  5. error_log 로그/error.log 알림
  6. pid 로그/nginx.pid;
  7. 이벤트 {                                                                              *
  8. #http 서버를 설정하고 역방향 프록시 기능을 사용하여 로드 밸런싱 지원을 제공합니다. 🎜>                                                                                          >
  9. default_type 애플리케이션/옥텟- stream; #기본 데이터 유형
  10. #로그 형식 설정 >
  11. log_format main '$remote_addr - $remote_user [$time_local] '
  12. '"$request" $status $bytes_sent '
  13. '"$http_referer" "$http_user_agent" ' '
  14. '"$gzip_ratio"'; >
  15. log_format 다운로드 '$remote_addr - $remote_user [$time_local] '
  16. '"$request" $status $bytes_sent '
  17. '"$http_referer" "$http_user_agent" '
  18. '"$http_range" " $sent_http_content_range"';
  19. #요청 버퍼 설정
  20. client_header_buffer_size 1k;
  21. Large_client_header_buffers 4 4k; 
  22. #gzip 모듈 켜기
  23. #gzip on >
  24. #gzip_buffers 4 8k; >
  25. #gzip_types text/plain 🎜>
  26. #postpone_output 1460;
  27. #접속 로그 설정 🎜>
  28. client_header_timeout 3m;
  29. client_body_timeout 3m;
  30. tcp_nopush on; keepalive_timeout 65; 🎜>
  31.                                             🎜 >
  32. #weigth 매개변수는 가중치를 나타냅니다. 가중치가 높을수록 할당될 확률이 높아집니다. 🎜>
  33. >
  34. 서버 192.168.207.130:8080 가중치=5
  35. 웹 서비스, 감시 8080 포트
  36. 8080; > index index.html index.htm
  37. root /var/www/html
  38. #error_ 페이지 500 502 503 504 /50x .html;
  39. #location = /50x.html {
  40. html; # 루트 html; 🎜>                      8                                                       서버 { 
  41. 들어보세요 80;
  42.              #charset gb2312 ;                                ~                                  #파일이 많으면 이 방법은 권장하지 않습니다 왜냐하면 Squid를 통한 캐싱 효과가 더 좋기 때문이죠.
  43. #"/"에서 로드 밸런싱 활성화
  44. 위치 / {
  45.          Proxy_pass http: //mysvr; #이 형식으로 백엔드 웹 서버 사용
  46. proxy_redirect off;         
  47. proxy_set_header X-Real-IP $remote_addr ;
  48. Proxy_set_header for; 
  49.           client_max_body_size 10m;                            connect_timeout 90;
  50. Proxy_send_timeout
  51. proxy_read_timeout 90;
  52. proxy_buffer_size 4k;
  53. proxy_buffers 4 32k; > proxy_busy_buffers_size 64k;
  54. Proxy_temp_file_write_size 64k; 🎜> }  
  55. #Nginx 상태를 볼 주소를 설정합니다. 설치 시 --with-http_stub_status_module 매개변수를 추가하세요.
  56. Location/NginxStatus { _status on;                                   uth_basic_user_file conf/htpasswd ;  🎜> } 
  57. 3. 연결 유지 구성 파일 사용자 정의
  58. [일반] 보기 일반 사본
  59. vi /etc/keepalived/keepalived.conf
  60. 내용 :
  61. [일반] 보기 일반 사본
    1. global_defs {
    2. notification_email {
    3. root@localhost.localdomain
    4. 통지_email_from inform@keepalived.com 
    5.  smtp_server 127.0.0.1 
    6. smtp_connect_timeout 30
    7. router_id LVS_DEVEL
    8. }
    9. vrrp_script chk_http_port {
    10. 스크립트 "/etc/keepalived/check_nginx.sh" ###모니터링 스크립트
    11. 간격 2 간격 ###모니터링 시간
    12. 가중치 2 ~ >                                🎜> >
    13. virtual_router_id 51 ### 두 서버는 동일해야 합니다
    14. 우선순위 101                          ### 가중치 값 MASTRE는 BAUCKUP보다 커야 합니다
    15. 인증 {
    16. auth_pass 1111
    17. }
    18. track_script {
    19. 🎜>
    20.                                                                        >
    21. virtual_ipaddress {
    22. 192.168.207.140 ### VIP 주소
    23. }
    24. }
    25. 4. 사용자 정의 스크립트 작성
    26. [일반] 보기 일반 사본
      1. vi /etc/keepalived/check_nginx.sh >[일반] 보기 일반 사본

      !/bin/bash

      A=`ps -C nginx --no-header |wc -l`                                                                                                               ## 0의 가치가 있는 프로세스가 없는 경우
      1. /usr/local/nginx/sbin/nginx
      2. sleep 3
      3. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
      4. /etc/init .d/keepalived 중지 프로세스
      5. fi
      6. fi
      7. 여기서는 nginx가 잘 시작되는지 확인하기 위한 것입니다. 그렇지 않으면 nginx를 먼저 시작하십시오. 3초 후에도 시작되지 않으면 keepalived 프로세스도 종료되므로 keepalived가 높은 가용성을 제공할 수 있습니다. 서비스는 고가용성을 제공하고, nginx는 백엔드 웹 서버에 대한 로드 밸런싱을 제공합니다.
      8. 다음과 같이 스크립트에 실행 권한도 추가해야 합니다
      9. [일반] 보기 일반 사본

      chmod +x /etc/keepalived/check_nginx.sh

      5. 서비스 시작 및 테스트

        먼저 WEB_1에서 시스템과 함께 제공되는 Apache 웹 서버를 사용했습니다. 시작만 하면 됩니다. 좋은 마스터-슬레이브 연결 유지는 괜찮습니다. 왜냐하면 check_nginx.sh 스크립트를 사용하여 nginx를 자동으로 시작하기 때문입니다.
      1. 모든 것이 시작되었습니다. 교대로 3개의 백엔드 웹 서버의 콘텐츠에 액세스하려면 http://192.168.207.140을 방문하세요. 여기서 고가용성을 테스트하기 위해 기본 연결 유지 서비스를 끕니다 그러면 슬레이브에 있게 됩니다. keepalived 서버 /var/log/messages 다음과 같은 로그 보기

      [일반] 보기 일반 사본




      4월 19일 17:42:44 localhost Keepalived_vrrp: VRRP_Instance(VI_1) 마스터 상태로 전환


      Apr 19 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) MASTER STATE 진입

      Apr 19 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) 프로토콜 VIP 설정
      1. 4월 19일 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) 192.168.207.140에 대해 eth0에서 무료 ARP 보내기
      2. Apr 19 17:42 :45 localhost Keepalived_vrrp: Netlink 리플렉터는 IP 192.168.207.140을 보고합니다
      3. Apr 19 17:42:45 localhost Keepalived_healthcheckers: Netlink 리플렉터는 IP 192.168.2 07.140을 보고합니다
      4. 4월 19일 17:42:45 localhost avahi-daemon[4204]: eth0에 192.168.207.140에 대한 새 주소 레코드를 등록하는 중입니다.

      5. 계속해서 http://192.168.207.140을 방문하면 세 개의 백엔드 웹 서버에 계속 액세스할 수 있습니다.
        그런 다음 원래 마스터 연결 유지를 열면 다음의 로그를 관찰할 수 있습니다. 원래 슬레이브 연결 유지 서버

        표시[일반] 보기 일반 사본

        1. Apr 19 17:42:50 localhost Keepalived_vrrp: VRRP_Instance(VI_1) 192.168.207.140에 대해 eth0에서 무료 ARP 보내기
        2. 4월 19일 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1) 더 높은 우선순위 광고 수신
        3. 4월 19일 17:44:06 localhost Keepalived_vrrp: VRRP_Instance( VI_1) 백업 상태 시작
        4. Apr 19 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1)가 프로토콜 VIP를 제거합니다. :06 localhost Keepalived_vrrp: Netlink 리플렉터가 IP 192.168.207.140을 보고합니다.
        5. 4월 19일 17:44:06 localhost Keepalived_healthcheckers: Netlink 반사기가 IP 192.168.207.140 제거됨을 보고합니다.
        6. 4월 19일 17:44:06 localhost avahi-daemon[ 4204]: eth0에서 192.168.207.140에 대한 주소 레코드를 철회하면 원래 마스터-슬레이브 결과가 복원됩니다.
        7. 프로덕션 환경에서는 백엔드 머신도 끊길 수 있지만, nginx가 자동으로 좋은 백엔드 웹 서버에 세션을 할당하므로 걱정할 필요가 없습니다.
        자, 여기까지입니다. 개인 테스트를 연습하세요. 성공을 기원합니다
        출처: http://blog.csdn.net/ zmj_88888888 /article/details/8825471
        위에서는 nginx+keepalived 고가용성 로드 밸런싱을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.