Haproxy + Nginx + Tomcat 동정 분리 페이지 구현

12445 단어
Haproxy + Nginx + Tomcat 동정 분리 페이지 구현
1. Haproxy 개술;2. Haproxy 원리 실현;3. Nginx, LVS, Haproxy 비교;4. Haproxy 프로필 설명;5. 사례: Haproxy + Nginx + Tomcat 가 사용 가능 한 클 러 스 터 를 구축 합 니 다.
1. Haproxy 개술;
요약: Haproxy 는 개 원 된 고성능 의 역방향 에이전트 또는 부하 균형 서비스 소프트웨어 중 하나 로 C 언어 로 작 성 된 것 으로 세 션 유지, 7 층 처리, 건강 검사, 고장 복구 후 자동 으로 로드, 동정 분 리 를 지원 합 니 다.HAProxy 는 현재 하드웨어 에서 실행 되 며 수만 개의 병렬 연결 을 지원 할 수 있 습 니 다.Haproxy 소프트웨어 는 frontend, backend 기능 을 도 입 했 습 니 다. frontend (acl 규칙 일치) 는 운영 관리자 가 임의의 HTTP 요청 헤더 에 따라 규칙 을 일치 시 킨 다음 요청 을 관련 backend (server pools 대기 전단 에서 요청 을 전달 하 는 서버 그룹) 로 지정 할 수 있 습 니 다.
2. Haproxy 원리 실현;
프 록 시 모드: 1. 4 층 tcp 프 록 시: 예 를 들 어 메 일 서비스 내부 프로 토 콜 통신 서버, Mysql 서비스 등에 사용 할 수 있 습 니 다.2. 7 층 응용 에이전트: 예 를 들 어 HTTP 에이전트 나 https 에이전트.4 층 tcp 프 록 시 모드 에서 Haproxy 는 클 라 이언 트 와 서버 간 에 만 양 방향 으로 트 래 픽 을 전송 합 니 다.그러나 7 층 모드 에서 Haproxy 는 응용 층 프로 토 콜 을 분석 하고 실행, 거부, 교환, 추가, 수정 또는 삭제 요청 (request) 또는 응답 (reponse) 에서 지정 한 내용 을 통 해 프로 토 콜 을 제어 할 수 있 습 니 다.4 층 에이전트: ISO 참조 모델 의 4 층 전송 층.4 층 부하 균형 은 4 층 교환기 라 고도 부 르 는데 주로 IP 층 과 TCP / UDP 층 의 유량 을 분석 함으로써 이 루어 진 IP 포트 기반 부하 균형 이다.흔히 볼 수 있 는 4 층 기반 부하 이퀄 라이저 는 LVS, F5 등 이 있다.흔히 볼 수 있 는 TCP 애플 리 케 이 션 의 경우 부하 이퀄 라이저 가 클 라 이언 트 로부터 첫 번 째 SYN 요청 을 받 을 때 설 정 된 부하 균형 알고리즘 을 통 해 가장 좋 은 백 엔 드 서버 를 선택 하고 메시지 의 대상 IP 주 소 를 백 엔 드 서버 IP 로 수정 한 다음 이 백 엔 드 서버 에 직접 전송 하면 부하 균형 요청 이 완 료 됩 니 다.이 과정 에서 볼 때 하나의 TCP 연결 은 클 라 이언 트 와 서버 가 직접 만 든 것 이 고 부하 이퀄 라이저 는 공유 기 와 유사 한 퍼 가기 동작 만 완성 했다.일부 부하 균형 정책 에 서 는 백 엔 드 서버 가 돌아 오 는 메 시 지 를 부하 이퀄 라이저 에 정확하게 전달 할 수 있 도록 메 시 지 를 전달 하 는 동시에 메시지 의 원래 소스 주 소 를 수정 할 수 있 습 니 다.전체 과정 아래 그림 에서 보 듯 이.7 층 에이전트: ISO 참조 모델 중 최고 층 7 층 응용 층.7 층 부하 균형 은 7 층 교환기 라 고도 부 르 는데 이때 부하 균형 기 는 여러 가지 응용 프로 토 콜 을 지원 하고 흔히 볼 수 있 는 것 은 HTTP, FTP, SMTP 등 이 있다.7 층 부하 균형 기 는 메시지 내용 에 따라 부하 균형 알고리즘 에 맞 춰 백 엔 드 서버 를 선택 할 수 있 기 때문에 '콘 텐 츠 교환기' 라 고도 부른다.예 를 들 어 웹 서버 의 부하 균형 에 대해 7 층 부하 균형 기 는 'IP + 포트' 방식 에 따라 부하 분 류 를 할 수 있 을 뿐만 아니 라 사이트 의 URL, 도 메 인 이름 방문, 브 라 우 저 유형, 언어 등에 따라 부하 균형 전략 을 결정 할 수 있다.예 를 들 어 두 개의 웹 서버 가 각각 중문 과 영문 두 개의 사이트 에 대응 하고 두 개의 도 메 인 이름 은 A, B 이다. A 도 메 인 이름 을 방문 할 때 중국어 사이트 에 들 어가 고 B 도 메 인 이름 을 방문 할 때 영문 사이트 에 들어간다. 이것 은 4 층 부하 균형 기 에서 거의 실현 되 지 않 는 다. 7 층 부하 균형 은 클 라 이언 트 가 도 메 인 이름 을 방문 할 때 해당 하 는 웹 페이지 를 선택 하여 부하 균형 처 리 를 할 수 있다.흔히 볼 수 있 는 7 층 부하 이퀄 라이저 는 HAproxy, Nginx 등 이 있다.여기 서 흔히 볼 수 있 는 TCP 애플 리 케 이 션 의 경우 부하 이퀄 라이저 가 메시지 의 내용 을 가 져 오 려 면 백 엔 드 서버 와 클 라 이언 트 를 대체 하여 연결 을 만 든 다음 에 클 라 이언 트 가 보 낸 메시지 내용 을 받 은 다음 에 이 메시지 의 특정 필드 에 부하 이퀄 라이저 에 설 치 된 부하 균형 알고리즘 을 추가 하여 최종 적 으로 선택 한 내부 서버 를 결정 할 수 있 습 니 다.전체 과정 을 살 펴 보면 7 층 부하 이퀄 라이저 는 이러한 상황 에서 프 록 시 서버 와 유사 하 다.전체 과정 은 아래 그림 과 같다.스케줄 링 알고리즘: balance roundrobin: 간단 한 폴 링 을 표시 합 니 다. 부하 균형 기초 알고리즘 balance static - rr: 가중치 balance leastconn: 최소 연결 자 를 표시 하여 balance source 를 먼저 처리 합 니 다. 요청 원 에 따라 IPbalance uri: 요청 에 따라 URI 를 표시 합 니 다.balance url_param: 요청 한 URL 매개 변수 에 따라 balance hdr (name) 를 조정 하 는 것 을 의미 합 니 다. HTTP 요청 헤더 에 따라 매번 HTTP 요청 을 잠 그 는 것 을 의미 합 니 다.balance rdp - cookie (name): 쿠키 (name) 에 따라 모든 TCP 요청 을 잠 그 고 해시 가 요청 하 는 것 을 의미 합 니 다.
요약: 61656. 대형 사이트 구조: 성능 에 대해 엄격 한 요구 가 있 을 때 lvs 나 하드웨어 F5 를 사용 할 수 있다. 단순히 부하 균형 의 측면 에서 볼 때 lvs 는 주류 가 되 고 현재 대형 인터넷 회사 에 더욱 적합 할 수 있다.* 61656. 중형 사이트 구조: 페이지 분리 요 구 는 명확 하 게 규정 되 고 성능 에 엄격 한 요구 가 있 을 때 haproxy 를 사용 할 수 있 습 니 다. 중 소형 사이트 구조: 예 를 들 어 일 PV 가 1000 만 보다 적 고 동시 다발 적 인 사 이 트 를 해 야 하거나 인터넷 에 엄격 하지 않 을 때 nginx 를 사용 할 수 있다.
4. Haproxy 프로필 설명;
전체 설정 영역 매개 변 수 는 프로 세 스 급 이 고 운영 체제 와 관련 이 있 습 니 다.이 매개 변 수 는 일반적으로 한 번 만 설정 하고 설정 이 틀 리 지 않 으 면 다시 수정 할 필요 가 없습니다.
 defaults: 기본 매개 변 수 를 설정 합 니 다. 이 매개 변 수 는 frontend, backend, Listen 구성 요소 에 사용 할 수 있 습 니 다.
* 61656. frontend: 요청 한 가상 노드 를 처리 하고 Frontend 는 로 컬 지역 에 일치 하 는 요청 을 아래 의 backend 에 전달 할 수 있 습 니 다. backend: 백 엔 드 서비스 클 러 스 터 의 설정 은 실제 서버 이 고 백 엔 드 는 하나 이상 의 실체 서버 에 대응 합 니 다.
프로필 샘플:
5. 사례: Haproxy + Nginx + Tomcat 고가 용 클 러 스 터 구축
사례 토폴로지:
사례 절차: nginx 노드 를 구축 하고 설정 하 며 웹 페이지 를 준비 하고 서 비 스 를 시작 합 니 다. 테스트 노드 (두 대의 nginx 설정 이 같 습 니 다. 여기 서 한 대의 설정 을 보 여 줍 니 다).* 61656. tomcat 노드 를 구축 하고 설정 하 며 웹 페이지 를 준비 하고 서 비 스 를 시작 합 니 다. 테스트 노드 (두 대의 tomcat 설정 이 같 습 니 다. 여기 서 한 대의 설정 을 보 여 줍 니 다). Haproxy 프로그램 소프트웨어 설치; Haproxy 서비스 설정; Haproxy 서 비 스 를 시작 합 니 다.『 61656 』 클 라 이언 트 방문 테스트 검증 클 러 스 터; Haproxy 의 로그 파일 을 분리 합 니 다 (보기 편 합 니 다). Haproxy 서비스의 로그 관리 인터페이스 설정; 클 라 이언 트 가 테스트 Haproxy 의 로그 관리 인터페이스 에 접근 하기;
     nginx  ,    ,    ,    (  nginx    ,         );
[root@ng1 ~]# yum -y install pcre-devel zlib-devel
[root@ng1 ~]# useradd -M -s /sbin/nologin nginx
[root@ng1 ~]# tar zxvf nginx-1.12.2.tar.gz -C /usr/src/
[root@ng1 ~]# cd /usr/src/nginx-1.12.2/
[root@ng1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@ng1 nginx-1.12.2]# make && make install
[root@ng1 nginx-1.12.2]# cd
[root@ng1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@ng1 ~]# vi  /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginxapi
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=kill -s HUP $(cat /usr/local/nginx/logs/nginx.pid)
ExecStop=kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid)
PrivateTmp=Flase

[Install]
WantedBy=multi-user.target
[root@ng1 ~]# echo "192.168.100.102" >>/usr/local/nginx/html/index.html
[root@ng1 ~]# systemctl start nginx
[root@ng1 ~]# systemctl enable nginx
[root@ng1 ~]# netstat -utpln |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3538/nginx: master

     tomcat  ,    ,    ,    (  tomcat    ,         );
[root@tm1 ~]# ls
apache-tomcat-9.0.10.tar.gz  jdk-8u171-linux-x64.tar.gz
[root@tm1~]# rpm -qa |grep java
[root@tm1 ~]# tar zxvf jdk-8u171-linux-x64.tar.gz
[root@tm1 ~]# mv jdk1.8.0_171/ /usr/local/java
[root@tm1 ~]# ls /usr/local/java
bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[root@tm1 ~]# cat <>/etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:/usr/local/java/bin
END
[root@tm1~]# source  /etc/profile
[root@tm1 ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@tm1 ~]# tar zxvf apache-tomcat-9.0.10.tar.gz
[root@tm1 ~]# mv apache-tomcat-9.0.10 /usr/local/tomcat
[root@tm1 ~]# ls /usr/local/tomcat
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work 
[root@tm1 ~]# vi /usr/local/tomcat/conf/server.xml
    150 
:wq
[root@tm1 ~]# mkdir -p /web/webapp
[root@tm1 ~]# vi /web/webapp/index.jsp


  
     JSP TEST PAGE1 
  
  
     
  

[root@tm1 ~]# /usr/local/tomcat/bin/startup.sh                  ##  apache-tomcat
[root@tm1 ~]# netstat -utpln |grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      14758/java

  Haproxy    ;
[root@ha ~]# yum -y install pcre-devel bzip2-devel          ##       
[root@ha ~]# tar zxvf haproxy-1.4.24.tar.gz -C /usr/src/
[root@ha ~]# cd /usr/src/haproxy-1.4.24/
[root@ha haproxy-1.4.24]# uname -r
3.10.0-693.5.2.el7.x86_64
[root@ha haproxy-1.4.24# make TARGET=linux310           ##make  ,         3.10
[root@ha haproxy-1.4.24]# make install
[root@ha haproxy-1.4.24]# cd

  Haproxy  ;
[root@ha ~]# mkdir /etc/haproxy                                 ##        
[root@ha ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.cfg /etc/haproxy/
[root@ha ~]# vi /etc/haproxy/haproxy.cfg                         ##         
global
        log 127.0.0.1   local0 info                     ##      ;
        log 127.0.0.1   local1 notice
        maxconn 4096            ##    haproxy             
        uid 99                  ##           
        gid 99
        daemon                  ##       daemon,             
defaults
        log     global                          ##  global      
        mode    http                            ##     mode { tcp|http|health },tcp 4 ,http 7 ,health    OK
        option  httplog                         ##  http        
        option  dontlognull                     ##            
        option httpclose                        ##      
        retries 3                               ##          
        maxconn 2000                            ##     ,      global   
        contimeout      5000    ##      ,  ,    ,                 ,   
        clitimeout      50000   ##                       ,     ,            ,   
        srvtimeout      50000   ##                      ,             ,   

##################          ##############
#listen webcluster 0.0.0.0:80                   ##  haproxy         
#       option  httpchk GET /index.html         ##  http         
#       balance roundrobin                      ##        
#       server  inst1 192.168.100.155:80 check inter 2000 fall 3                ##  web  ,      ,     ,            
#       server  inst2 192.168.100.156:80 check inter 2000 fall 3

##################          ##############
frontend http                           ##     http
        bind *:80                       ##         
        acl linuxfan1 hdr_end(host) -i 192.168.100.101                  ##            ,-i      
        acl linuxfan2 hdr_end(host) -i www.linuxfan.cn

        acl linuxfan3 path_end -i .jsp .do .css .js                     ##         .jsp
        #acl linuxfan3 hdr_reg -i \.(css|png|jpg|jpeg|gif|ico|swf|xml|txt|pdf|do|jsp|js)$       ##       
        acl linuxfan4 path_end -i .html .css .png .jpg .jpeg .xml       ##         .html

        acl linuxfan5 path_beg -i /WebRoot                              ##    URL    , http://www.linuxfan.cn/WebRoot/index.jsp

        use_backend dongtai if linuxfan1 linuxfan3
        use_backend dongtai if linuxfan2 linuxfan3
        use_backend dongtai if linuxfan1 linuxfan5 linuxfan3
        use_backend dongtai if linuxfan2 linuxfan5 linuxfan3

        default_backend jingtai                                 ##       backend dongtai

backend jingtai         ##  backend :jingtai
        mode http                       ##    
        balance roundrobin              ##         
        server jingtai01 192.168.100.102:80 check inter 2000 fall 3             ##    
        server jingtai02 192.168.100.103:80 check inter 2000 fall 3

backend dongtai
        mode http
        balance roundrobin
        server dongtai01 192.168.100.104:8080 check inter 2000 fall 3
        server dongtai02 192.168.100.105:8080 check inter 2000 fall 3

  Haproxy  ;
[root@ha ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
[root@ha ~]# chmod +x /etc/init.d/haproxy
[root@ha ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/
[root@ha ~]# /etc/init.d/haproxy start
[root@ha ~]# netstat -utpln |grep haproxy       
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1264/haproxy        
udp        0      0 0.0.0.0:52177           0.0.0.0:*                           1264/haproxy

『 61656 』 클 라 이언 트 방문 테스트 검증 클 러 스 터;
 Haproxy       (    );
[root@ha ~]# vi /etc/rsyslog.conf   
     15 $ModLoad imudp
     16 $UDPServerRun 514 
##         , rsyslog      udp  514         
     74 local0.*        /var/log/haproxy/ha-info.log
     75 local1.*        /var/log/haproxy/ha-notice.log
## haproxy                              ,     ;
:wq
[root@ha ~]# vi /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r -m 0 -c 2"
##-r   udp 514          ;-m 0               ;-c 2        
:wq
[root@ha ~]# systemctl restart rsyslog
[root@ha ~]# /etc/init.d/haproxy  restart
[root@ha ~]# tail -f /var/log/haproxy/ha-info.log
Jul 27 18:14:44 localhost haproxy[1375]: 192.168.100.1:52965 [27/Jul/2018:18:14:44.167] http dongtai/dongtai01 0/0/0/2/3 200 349 - - ---- 0/0/0/0/0 0/0 "GET /index.jsp HTTP/1.1"

  Haproxy         ;
[root@ha ~]# vi /etc/haproxy/haproxy.cfg                    ###     
 listen status 0.0.0.0:8080      ##  8080      
    stats enable                 ##  stats   
    stats uri /stats             ##     url
    stats auth admin:123456  ##              
    stats realm (Haproxy\ statistic)    ##         
[root@ha ~]# /etc/init.d/haproxy restart

 클 라 이언 트 가 테스트 Haproxy 의 로그 관리 인터페이스 에 접근 하기;

좋은 웹페이지 즐겨찾기