13@nginx부하 균형
Nginx 부하 균형
\ # 메모: 대 리 는 기계 nginx 한 대 만 대리 할 수 있 고 한 위치 에서 대 리 를 할 수 있 습 니 다.
1. 왜 부하 균형 을 사용 합 니까?
Web , , , Web , Nginx , , 。 、 、
SLB(Server Load Balance) , SLB、 SLB 。 、 。
, , , , 。 , Nginx SLB
2. 흔히 볼 수 있 는 부하 균형
SLB
LB
CLB
ULB ucloud
#
Load Balance
LB
3. 부하 균형 상용 소프트웨어
Nginx # 1.9 ,1.9 ,
Haproxy # ,
LVS #
#LVS , ,LVS , ,
4. 부하 균형 유형
#
OSI , Nginx TCP/IP , TCP/IP , 、 , 。
#
, , http , http 、 、 、URL 、 、rewrite , , , Nginx SLB
#
, 、 , 。
, :http , Nginx ,URL 、head , 。
: ,
5. Nginx 부하 균형 설정
#Nginx proxy_pass .
Nginx Nginx ,Nginx location , Nginx upstream .
1. 부하 균형 설정 문법 ngxhttp_upstream_module
Syntax: upstream name {
... }
Default: —
Context: http
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name www.linux.com
location / {
proxy_pass http://backend;
}
}
2. 환경 준비
호스트
외부 네트워크 ip
인터넷 ip
신분.
lb01
10.0.0.4
172.16.1.4
부하 균형
web01
10.0.0.7
172.16.1.7
web
web02
10.0.0.8
172.16.1.8
web
3. 준비 사이트
#web01
[root@web01 conf.d]# vim node.conf
server {
listen 80;
server_name node.linux.com;
location / {
root /code/node;
inde index.html;
}
}
[root@web01 conf.d]# mkdir /code/node
[root@web01 conf.d]# echo " web01......" > /code/node/index.html
[root@web01 conf.d]# systemctl restart nginx
#web02
[root@web02 conf.d]# vim node.conf
server {
charset 'utf-8';
listen 80;
server_name node.linux.com;
location / {
root /code/node;
index index.html;
}
}
[root@web02 conf.d]# mkdir /code/node
[root@web02 conf.d]# echo " web02......" > /code/node/index.html
[root@web02 conf.d]# systemctl restart nginx
4. 부하 균형 설정 파일
[root@lb01 conf.d]# vim node_proxy.conf
upstream node {
#
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name node.linux.com;
location / {
proxy_pass http://node;
include proxy_params;
}
}
# include
[root@lb01 conf.d]# ll /etc/nginx/proxy_params
-rw-r--r-- 1 root root 275 Feb 28 15:24 /etc/nginx/proxy_params
[root@lb01 conf.d]# systemctl restart nginx
5. 최적화 프로필
[root@Nginx ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
6. nginx 부하 균형 흔 한 문제
,Nginx , down ,Nginx , , , down , :504、502、500, ,
# :
proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;
# 404,500... , ,
#
upstream test {
server 172.16.1.7:80;
server 172.16.1.8:80;
server 172.16.1.9:80;
}
server {
listen 80;
server_name linux.slb.cluster.local.com;
location / {
proxy_pass http://test;
include proxy_params;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
}
}
6. nginx 부하 균형 스케줄 링 알고리즘
스케줄 링 알고리즘
개술
폴 링
시간 순 으로 백 엔 드 서버 에 하나씩 할당 (기본 값)
weight
가중 폴 링, weight 값 이 클 수록 분 배 된 방문 확률 이 높 습 니 다.
ip_hash
모든 요청 은 IP 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 같은 IP 에서 백 엔 드 서버 에 고정 적 으로 접근 할 수 있 습 니 다.
url_hash
URL 에 접근 한 hash 결과 에 따라 요청 을 할당 합 니 다. 모든 URL 이 같은 백 엔 드 서버 로 향 합 니 다.
least_conn
최소 링크 수, 그 기 계 는 링크 수가 적 으 면 나 누 어 준다.
# , , ,
server 172.16.1.7:80 weight=1;
server 172.16.1.8:80 weight=5;
server 172.16.1.9:80 weight=100;
1. 폴 링 설정 방법
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
2. 가중 폴 링 설정 방법
#
upstream node {
server 172.16.1.7:80 weight=5;
server 172.16.1.8:80 weight=1;
}
3.ip_hash 설정 방법
# IP
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80;
ip_hash;
}
#
7. nginx 부하 균형 상태
상태.
개술
down
현재 server 는 부하 균형 에 잠시 참여 하지 않 습 니 다.
backup
예비 백업 서버
max_fails
요청 실패 횟수 허용
fail_timeout
경과 maxfails 실패 후 서비스 일시 정지 시간
max_conns
최대 수신 연결 수 제한
1. down 상태 설정 테스트
upstream node {
# ,
server 172.16.1.7:80 down;
server 172.16.1.8:80;
}
2. backup 상태 설정 테스트
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80 backup;
}
3. 접근 오류 상태
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80 max_fails=3 fail_timeout 10s;
}
4.max_conns 최대 연결 수 상태 설정 제한
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80 max_conns=120;
}
8. 부하 균형 nginx 건강 검진 모듈
#
[root@lb02 ~]# yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel patch
#
[root@lb02 ~]#wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@lb02~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
[root@lb02~]# tar xf nginx-1.16.1.tar.gz
[root@lb02~]# unzip master.zip
[root@lb02~]# cd nginx-1.16.1/
# p1: nginx p0 nginx
[root@lb02 nginx-1.16.1]# patch -p1 <..>
[root@lb02 nginx-1.16.1]#./configure --prefix=/data/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/data/nginx/nginx.conf --error-log-path=/data/log/nginx/error.log --http-log-path=/data/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=/root/nginx_upstream_check_module-master --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@lb02 nginx-1.16.1]# make -j && make install
[root@lb02 nginx-1.16.1]# vim /etc/nginx/conf.d/proxy.conf
upstream test {
server 172.16.1.7:80;
server 172.16.1.8:80;
server 172.16.1.9:80;
check interval=3000 rise=1 fall=2 timeout=1000;
}
server {
listen 80;
server_name linux.slb.cluster.local.com;
location / {
proxy_pass http://test;
# proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
include proxy_params;
}
location /upstream_check {
check_status;
}
}
interval:
rise:
fall:
timeout:
[root@lb02 nginx]# cat /etc/nginx/conf.d/test.conf
upstream test {
server 172.16.1.7:80;
server 172.16.1.8:80;
server 172.16.1.9:80;
check interval=3000 rise=1 fall=2 timeout=1000;
}
server {
listen 80;
server_name linux.slb.cluster.local.com;
location / {
proxy_pass http://test;
# proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
include proxy_params;
}
location /upstream_check {
check_status;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.