首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Nginx 實現 MySQL 負載均衡:基於 nginx_tcp_proxy_module 的 TCP 代理實戰

     編輯:MySQL 綜合教學

背景與挑戰

Nginx 原生僅支援 HTTP(七層),不支援 TCP 代理。需引入第三方模塊 `nginx_tcp_proxy_module` 實現 MySQL(3306 端口)負載均衡。

編譯安裝步驟

  1. 下載 Nginx 源碼與模塊補丁:
    
    wget https://nginx.org/download/nginx-1.2.1.tar.gz
    tar -xzvf nginx-1.2.1.tar.gz
    cd nginx-1.2.1/
    patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
    
  2. 配置編譯參數(含模塊路徑):
    
    ./configure --add-module=/usr/local/ngx_cache_purge-1.4 \
    --prefix=/usr/local/nginx --with-http_stub_status_module \
    --add-module=/path/to/nginx_tcp_proxy_module
    
  3. 編譯安裝:`make && make install`

Nginx 配置(nginx.conf)


http {
    server {
        listen 80;
        location /status {
            check_status;  # 狀態頁
        }
    }
}

tcp {
    upstream mysql {
        server 10.10.10.17:3306 weight=1;
        server 10.10.10.18:3306 weight=1;
        # check interval=3000 rise=2 fall=5 timeout=1000;  # 健康檢查
    }
    server {
        listen 3306;
        proxy_pass mysql;
    }
}

驗證日誌示例


2012/09/07 18:22:32 [3921] 10.10.10.107 0.0.0.0:3306 2012/09/07 18:22:31 10.10.10.18:3306 1446 4383
2012/09/07 18:22:32 [3921] 10.10.10.107 0.0.0.0:3306 2012/09/07 18:22:32 10.10.10.17:3306 1446 4383
...

日誌顯示請求按權重輪詢分發至兩台 MySQL 後端,負載均衡生效。

局限與替代方案

  • 第三方模塊維護不活躍,生產環境穩定性存疑。
  • 推薦使用 LVS (IPVS)、HAProxy、ProxySQL、MyCat 等專業四層/中間件方案。
  • MySQL 8.0+ 可配合 InnoDB Cluster / Group Replication 實現原生高可用與讀寫分離。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved