nginx基于tcp模块实现mysql代理

工具准备

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

环境描述

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

$ 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配置参数说明

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

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

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代理,有兴趣的同学可以前往官网查看 文档

nginx基于tcp模块实现mysql代理

上一篇:初始MySQL与MySQL的zip安装和配置


下一篇:mysql数据库查询结果导出