魅族公開對向車輛遠光燈判斷專利,可自動提醒對向車輛
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;
}