nginx基于tcp模块实现mysql代理

工具准备

1.Nginx的tcp模块补丁nginx_tcp_proxy_module
2.Tengine(淘宝优化过后的Nginx,Nginx同样可行)Tengine-2.1.0

环境描述

1
2
3
4
Nginx Proxy  Server: 192.168.1.100
Mysql Server Slave1: 192.168.1.1
Mysql Server Slave2: 192.168.1.2
Mysql Server Slave3: 192.168.1.3

打入tcp补丁并编译安装Tengine

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ cd /usr/local/src/
$ wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip
$ unzip master
$ wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz
$ tar zxvf tengine-2.1.0.tar.gz
$ cd tengine-2.1.0
$ yum install patch
$ patch -p1 </usr/local/src/nginx_tcp_proxy_module-master/tcp.patch
$ ./configure --prefix=/usr/local/nginx_mysql --add-module=/usr/local/src/nginx_tcp_proxy_module-master/
$ make && make install
$ vi /usr/local/nginx_mysql/conf/nginx.conf
tcp {
upstream mysql_proxy {
server 192.168.1.1:3306;
server 192.168.1.2:3306;
server 192.168.1.3:3306;
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 3306;
proxy_pass mysql_proxy;
}
}
$ mysql -h 192.168.1.100 -u root -p

Nginx配置参数说明

1
2
3
4
5
check interval: 健康检查,单位是毫秒
rise: 检查几次正常后,将reslserver加入以负载列表中
fall: 检查几次失败后,摘除realserver
timeout: 检查超时时间,单位许毫秒
PS: 具体可查看nginx_tcp_proxy_module-master/README,很详细。

模块指令是TCP,它是不属于HTTP框架内的,所以和HTTP{}同级别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {
upstream http_proxy {
server 192.168.1.10:80;
}
server {
listen 80;
server_name blog.ch2l.cn;
proxy_pass http://http_proxy;
}
}
tcp {
upstream tcp_proxy {
server 192.168.1.10:3306;
}
server {
listen 3306;
proxy_pass tcp_proxy;
}
}

扩展

原生Nginx在2016-02-09 发布的nginx-1.9.11 版本已经天然支持tcp代理,有兴趣的同学可以前往官网查看 文档