nginx 를 통 해 udp 메시지 부하 균형 진행

5799 단어
1. nginx 설치
1.1 yum 을 통한 설치
[root@yaoxiang ~]# yum install nginx

1.2 nginx 버 전 보기
[root@yaoxiang ~]# nginx -v
nginx version: nginx/1.12.2

nginx 버 전 은 1.9.0 이상 이 어야 합 니 다. 1.9 부터 nginx 는 TCP 에 대한 리 트 윗 을 지원 하고 1.9.13 이 되면 UDP 리 트 윗 도 지 원 됩 니 다.
1.3 기본 컴 파일 매개 변수 보기
[root@yaoxiang ~]# nginx -V
nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'

nginx 는 TCP / UDP 의 퍼 가기 가 Stream 모듈 에 의존 합 니 다. 기본 컴 파일 매개 변수 에 * * * -- with - stream 매개 변수 가 포함 되 어 있 는 지 확인 하면 위의 매개 변수 에 -- with - stream = dynamic * * 가 포함 되 어 있 는 것 을 볼 수 있 습 니 다. 이 는 동적 으로 Stream 모듈 을 불 러 왔 음 을 설명 합 니 다.
2. nginx 설정 수정
2.1 스 트림 블록 증가
[root@yaoxiang ~]# vim /etc/nginx/nginx.conf
...
events {
    worker_connections 1024;
}
stream {
#          upstream   
upstream dns {
 # zone   dns 64k;
  server 172.27.9.204:4005;#        
  server 172.27.9.204:4006 weight=5;#weight   ,    1
  server 172.27.9.204:4007 max_fails=3 fail_timeout=30s;#max_fails - NGINX                   。fail_timeout NGINX             。
  server 172.27.9.204:4008 backup;#backup      ,         ,      
}

server {
  listen 4000 udp;#  udp4000  ,   udp     tcp

  proxy_responses 1;#1      ,      ;0       

  proxy_timeout 20s;#      ,         

  proxy_pass dns;#     、    

  proxy_buffer_size 512k;#       ,                     。

}

}
http {
...}

2.2 부하 균형 전략
  • round - robin (폴 링) - 기본 값, Nginx 는 폴 링 알고리즘 부하 균형 통신 을 사용 합 니 다.기본 방법 이기 때문에 round - robin 명령 이 없습니다.upstream 설정 블록 만 최상 위 stream 컨 텍스트 에 만 만 들 고 이전 단계 와 같이 server 명령 을 추가 합 니 다.
  • last_conn (최소 연결) - Nginx 는 현재 활성 화 된 연결 수가 적은 서버 를 선택 하 십시오.
  • least_tome - Nginx 는 최소 평균 지연 과 최소 활성 연결 서버 를 선택 합 니 다.최소 활성 연결 least 기반time 명령 의 다음 매개 변수 계산:
  • connect - upstream 서버 연결 시간
  • first_byte - 첫 번 째 데이터 바이트 수신 시간
  • last_byte - 서버 에서 전체 응답 을 받 는 시간
  • hash - Nginx 는 사용자 정의 키 를 바탕 으로 서버 를 선택 합 니 다. 예 를 들 어 원본 IP 주소
  • \ # \ # \ # \ # 예: 최소 연결 과 hash 부하 균형 정책 사용
    upstream dns {
     last_conn;#      
     server 172.27.9.204:4005;#        
     server 172.27.9.204:4006;
     server 172.27.9.204:4007;
     server 172.27.9.204:4008;
     }
    
    upstream stream_backend {
    
        hash $remote_addr;
    
        server backend1.example.com:12345;
    
        server backend2.example.com:12345;
    
        server backend3.example.com:12346;
    
    }
    

    3. nginx 시작
    [root@yaoxiang nginx]# sudo nginx
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    

    상기 알림 이 나타 나 면 포트 가 점용 되 고 nginx. conf 에서 http 모듈 의 포트 번 호 를 수정 합 니 다.
    4. 테스트
    4.1 nginx 호스트 에 메시지 보 내기
    4.2 프 록 시 서버 그룹 호스트 의 서로 다른 포트 가 모두 수신 되 었 음 을 볼 수 있다.
    4006 포트
    4005 포트
    4.3 수신 단 프 록 시 서버 가 nginx 호스트 에 메 시 지 를 답장 합 니 다.
    4.4 보 내 는 쪽 에서 답장 을 받 았 습 니 다.
    다음으로 전송:https://juejin.im/post/5c734b2251882561ad329f51

    좋은 웹페이지 즐겨찾기