1. 程式人生 > 資訊 >魅族公開對向車輛遠光燈判斷專利,可自動提醒對向車輛

魅族公開對向車輛遠光燈判斷專利,可自動提醒對向車輛

Nginx在1.9.0版本開始支援tcp模式的負載均衡,在1.9.13版本開始支援udp協議的負載,udp主要用於DNS的域名解析,其配置方式和指令和http 代理類似,其基於ngx_stream_proxy_module模組實現tcp負載,另外基於模組ngx_stream_upstream_module實現後端伺服器分組轉發、權重分配、狀態監測、排程演算法等高階功能。

如果編譯安裝,需要指定 --with-stream 選項才能支援ngx_stream_proxy_module模組

檢視是否新增該模組:nginx -V,搜尋是否包含--with-stream,如果包含則已新增過此模組。

nginx相關網址

官網:https://www.nginx.com/
文件:https://docs.nginx.com/
開源文件:https://nginx.org/en/docs/
TCP和UDP負載均衡說明:https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
TCP健康檢測:https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-health-check//
UDP健康檢測:https://docs.nginx.com/nginx/admin-guide/load-balancer/udp-health-check/


ngx_stream_proxy_module模組文件:https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html
ngx_stream_upstream_module模組文件:https://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
ngx_stream_upstream_hc_module模組文件:https://nginx.org/en/docs/stream/ngx_stream_upstream_hc_module.html

注意事項:

  • stream配置項和http同級
  • 不支援不同域名轉發不同Mysql的功能
stream {
    server {
       listen 13306; 
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass 192.168.1.20:3306;    
    }
}

http {
}

UDP負載均衡

stream {
    upstream dns {
       server 192.168.111.99:10086;
       server 192.168.111.100:10086;
    }

    server {
        listen 192.168.111.98:10086 udp;
        proxy_responses 1; #使用UDP協議時,設定代理伺服器響應客戶端期望的資料報數。該值作會話終止條件
        proxy_timeout 20s;
        proxy_bind $server_addr:$remote_port;
        proxy_pass dns;
        error_log logs/dns.log;
    }
}

tcp負載均衡配置引數

stream { #定義stream相關的服務;Context:main

    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
   
    access_log  /var/log/nginx/access.log  proxy; 

    upstream backend { #定義後端伺服器
        hash $remote_addr consistent; #定義排程演算法
        server backend1.example.com:12345 weight=5; #定義具體server
        server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }
    upstream dns { #定義後端伺服器
       server 10.0.0.1:53535; #定義具體server
       server dns.example.com:53;
    }
    server { #定義server
        listen 12345; #監聽IP:PORT
        proxy_connect_timeout 1s; #連線超時時間
        proxy_timeout 3s; #轉發超時時間
        proxy_pass backend; #轉發到具體伺服器組
    }
    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }
    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

負載均衡例項 : Redis

stream {
    upstream redis_server {
        #hash $remote_addr consistent;
        server 172.31.0.28:6379 max_fails=3 fail_timeout=30s;
        server 172.31.0.48:6379 max_fails=3 fail_timeout=30s;
    }
    server {
        listen 172.31.0.18:6379;
        proxy_connect_timeout 3s;
        proxy_timeout 3s;
        proxy_pass redis_server;
    }
}

負載均衡例項: MySQL

stream {
    upstream mysql_server {
        least_conn;
        server 172.31.0.28:3306 max_fails=3 fail_timeout=30s;
    }
    server {
        listen 172.31.0.18:3306;
        proxy_connect_timeout 6s;
        proxy_timeout 15s;
        proxy_pass mysql_server;
    }
}
stream {        
    upstream mysql {
        server 192.168.2.56:3306;  #後端資料庫的ip和埠,如果進行了域名解析,直接寫域名就好
    }
    server {
        listen 3306;   #如果監聽3306,遠端登入的時候不用加-p引數
        proxy_connect_timeout 10s;
        proxy_timeout 30s;
        proxy_pass mysql;
    }
}

官方示例分析

nginx監聽本地12345埠的TCP資料包,反向代理給stream_backend組,最小連線數方式進行負載均衡。
nginx監聽本地53埠的UDP資料包,反向代理給dns_servers組,最小連線數方式進行負載均衡。
nginx監聽本地12346埠的TCP資料包,直接反向代理給backend4.example.com:12346

stream {
    upstream stream_backend {
        least_conn;
        server backend1.example.com:12345 weight=5;
        server backend2.example.com:12345 max_fails=2 fail_timeout=30s;
        server backend3.example.com:12345 max_conns=3;
    }
    
    upstream dns_servers {
        least_conn;
        server 192.168.136.130:53;
        server 192.168.136.131:53;
        server 192.168.136.132:53;
    }
    
    server {
        listen        12345;
        proxy_pass    stream_backend;
        proxy_timeout 3s;
        proxy_connect_timeout 1s;
    }
    
    server {
        listen     53 udp;
        proxy_pass dns_servers;
    }
    
    server {
        listen     12346;
        proxy_pass backend4.example.com:12346;
    }
}

mysql代理示例

# ./nginx.conf
...

stream {
    proxy_connect_timeout 3s;
    include stream/*conf;
}

...
# ./stream/mysql.conf
upstream mysql {
    server 192.168.1.100:3306;
}
server {
    listen 3306;
    proxy_connect_timeout 3s;
    proxy_timeout 3s;
    proxy_pass mysql;
}

ssh 代理示例

# ./nginx.conf
...

stream {
    proxy_connect_timeout 3s;
    include stream/*conf;
}

...
# ./stream/ssh.conf
upstream ssh {
    server 0.0.0.0:22;
}
 
server {
    listen 22122;
    proxy_pass ssh;
}