bco 发表于 2017-12-23 15:50:23

nginx 实现mysql的负载均衡【转】

  默认Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,还需要在编译时增加tcp代理模块支持,即nginx_tcp_proxy_module
  下面操作步骤只让nginx支持tcp_proxy,没有加入prce、gzip、ssl等功能,如需要,可自行在编译时加上相关参数。
  

wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip  
unzip master
  
tar -zxvf nginx-1.6.3.tar.gz
  
cd nginx-1.6.3
  
patch -p1 < ../nginx_tcp_proxy_module-master/tcp.patch
  
./configure --add-module=../nginx_tcp_proxy_module-master --prefix=/usr/local/nginx-1.6.3 --with-http_stub_status_module --with-http_gzip_static_module
  
make
  
make install
  

  nginx.conf主配置文件中增加如下配置配置:(也可以在主配置文件中配置include,包含tcp转发的配置文件include /usr/local/nginx-1.6.3/conf/tcp_proxy.conf;)
  

usernobody;  
worker_processes
1;  

  
#error_loglogs
/error.log;  
#error_loglogs
/error.lognotice;  
error_loglogs
/error.loginfo;  

  
#pid      logs
/nginx.pid;  

  

  
events {
  
worker_connections
1024;  
}
  

  
include
/usr/local/nginx-1.6.3/conf/tcp_proxy.conf;  

  
http {
  
include       mime.types;
  
default_typeapplication
/octet-stream;  

  
log_formatmain
'$remote_addr - $remote_user [$time_local] "$request" '  
'$status $body_bytes_sent "$http_referer" '
  
'"$http_user_agent" "$http_x_forwarded_for"';
  

  
#access_loglogs/access.logmain;
  

  
sendfile      on;
  
#tcp_nopush   on;
  

  
#keepalive_timeout0;
  
keepalive_timeout65;
  

  
#gzipon;
  

  
server {
  
listen       3306;
  
server_namelocalhost;
  

  
#charset koi8-r;
  

  
#access_loglogs/host.access.logmain;
  

  
location / {
  
root   html;
  
indexindex.html index.htm;
  
}
  

  
location /nginx_status {
  
stub_status on;
  
access_loglogs/nginx_status.log;
  
allow 10.195.197.124;
  
deny all;
  
}
  

  
#error_page404            /404.html;
  

  
# redirect server error pages to the static page /50x.html
  
#
  
error_page   500 502 503 504/50x.html;
  
location = /50x.html {
  
root   html;
  
}
  

  
}
  

  
}
  

  include /usr/local/nginx-1.6.3/conf/tcp_proxy.conf;
  

tcp {  
upstream mysql {
  
server
10.207.238.66:3306;  
server
10.207.238.67:3306;  

  
check interval
=3000 rise=2 fall=5 timeout=1000;  
#check interval
=3000 rise=2 fall=5 timeout=1000  
#check interval
=3000 rise=2 fall=5 timeout=1000  
#check_http_send
"GET /HTTP/1.0\r\n\r\n";  
#check_http_expect_alive http_2xxhttp_3xx;
  
}
  

  
server {
  
listen
3307;  
proxy_pass mysql;
  
}
  
}
  

  说明:
  check interval 健康检查,单位是毫秒
  rise 检查几次正常后,将reslserver加入以负载列表中
  fall 检查几次失败后,摘除realserver
  timeout 检查超时时间,单位许毫秒
  具体可查看nginx_tcp_proxy_module-master/README,很详细。
  转自
  nginx 实现mysql的负载均衡 - ---張榮---的个人空间
  https://my.oschina.net/ambari/blog/615203
页: [1]
查看完整版本: nginx 实现mysql的负载均衡【转】