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 의 로그 관리 인터페이스 에 접근 하기;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.