1. 程式人生 > 實用技巧 >nginx基於tcp模組實現mysql代理

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代理,有興趣的同學可以前往官網檢視 文件