您的位置:首页 > 运维架构 > Nginx

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

2017-06-02 17:13 609 查看
默认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;)

user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
worker_connections  1024;
}

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

http {
include       mime.types;
default_type  application/octet-stream;

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

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

server {
listen       3306;
server_name  localhost;

#charset koi8-r;

#access_log  logs/host.access.log  main;

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

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

#error_page  404              /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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: