首页 > 代码库 > Nginx四层负载反代MySQL

Nginx四层负载反代MySQL

1、安装Nginx并启用模块

Nginx从1.9.0开始发布ngx_stream_core_module模块,该模块支持tcp代理及负载均衡

  • 安装Nginx并启动模块

  ngx_stream_core_module这个模块默认没有启用,需要在便宜时通过指定with-strem参数激活这个模块

环境准备

[root@localhost /]# yum -y install pcre pcre-devel gcc gcc-c++ openssl openssl-devel

 

创建nginx用户

[root@localhost /]# useradd nginx -s /sbin/nologin -M

 

下载软件

[root@locahost /]# cd /usr/local/src/
[root@localhost src]# wget http://nginx.org/download/nginx-1.9.4.tar.gz
--2017-04-13 10:05:08--  http://nginx.org/download/nginx-1.9.4.tar.gz
Resolving nginx.org... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ...
Connecting to nginx.org|206.251.255.63|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 866423 (846K) [application/octet-stream]
Saving to: “nginx-1.9.4.tar.gz”

100%[=================================================================================>] 866,423     16.2K/s   in 36s     

2017-04-13 10:05:50 (23.3 KB/s) - “nginx-1.9.4.tar.gz” saved [866423/866423]

 

解压

[root@localhost src]# tar zxvf nginx-1.9.4.tar.gz
[root@localhost src]# cd nginx-1.9.4

 

配置、编译、安装

[root@localhost nginx-1.9.4]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
[root@localhost nginx-1.9.4]# echo $?
0
[root@localhost nginx-1.9.4]# make && make install
[root@localhost nginx-1.9.4]# echo $?
0

 

启动服务

[root@localhost nginx-1.9.4]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
[root@localhost nginx-1.9.4]# ll /usr/local/sbin/
total 0
lrwxrwxrwx 1 root root 27 Apr 13 13:29 nginx -> /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.9.4]# /usr/local/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost nginx-1.9.4]# /usr/local/sbin/nginx
[root@localhost nginx-1.9.4]# netstat -nlput | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1271/nginx  
[root@localhost nginx-1.9.4]# lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1271  root    6u  IPv4   9108      0t0  TCP *:http (LISTEN)
nginx   1272 nginx    6u  IPv4   9108      0t0  TCP *:http (LISTEN)
[root@localhost nginx-1.9.4]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.9.4
Date: Thu, 13 Apr 2017 05:37:43 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Thu, 13 Apr 2017 03:16:08 GMT
Connection: keep-alive
ETag: "58eeed78-264"
Accept-Ranges: bytes

 

代理MySQL

[root@localhost nginx-1.9.4]# cd /usr/local/nginx/conf/
[root@localhost conf]# echo  >nginx.conf
[root@localhost conf]# vim nginx.conf
worker_processes auto;
events {
    worker_connections  1024;
}
error_log /var/log/nginx_error.log info;

stream {
    upstream mysqld {
        hash $remote_addr consistent;
        server 172.19.10.98:3306 weight=5 max_fails=1 fail_timeout=10s;
#        server 192.168.1.43:3306 weight=5 max_fails=1 fail_timeout=10s;
    }

    server {
        listen 3306;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass mysqld;
    }

}

[root@localhost conf]# /usr/local/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost conf]# cat nginx.conf
worker_processes auto;
events {
    worker_connections  1024;
}
error_log /var/log/nginx_error.log info;

stream {
    upstream mysqld {
        hash $remote_addr consistent;
        server 172.19.10.98:3306 weight=5 max_fails=1 fail_timeout=10s;
#        server 172.19.10.94:3306 weight=5 max_fails=1 fail_timeout=10s;
    }

    server {
        listen 3306;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass mysqld;
    }

}

 

Nginx四层负载反代MySQL