nginx使用stream反向代理mysql

Posted 小Q职业生涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx使用stream反向代理mysql相关的知识,希望对你有一定的参考价值。

## 1,起因 

  • 使用rinted端口转发工具代理mysql,做端口的转发服务,开始一切正常,一段时间以后突然连接不上,报错如图:



  • 登录服务器检查发现 rinted 服务 CPU使用率高达 100% 如图:


nginx使用stream反向代理mysql


  • 使用strace 追一下系统调用



  • rinetd 没有使用epoll,而是用了select 

  • select是基于类似的轮训的机制,反复去查询fd的情况,并且会在内核空间和用户空间拷贝fd集合 

  • 在IO比较高的情况下,select相比epoll有更高的CPU消耗,并且select默认最大支持1024个fd 

  • 所以rinetd才把CPU打的比较高,导致转发服务异常




## 2,解决,

使用nginx的stream模块解决,并且CPU使用率也不高


  • 安装编译nginx


# 下载epel 源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


# 下载 pcre openssl 工具

yum -y install pcre pcre-devel

yum -y install openssl openssl-devel


# 添加nginx用户

useradd -s /sbin/nologin -M nginx


# 进入安装目录

cd /usr/local/


# 下载源码包

wget http://nginx.org/download/nginx-1.14.0.tar.gz


# 解压源码包

tar zxvf nginx-1.14.0.tar.gz


# 进入nginx编译目录

cd nginx-1.14.0/


# 进行编译

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module  --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module


# 编译安装

make && make install


# 进入nginx配置问价目录

cd /usr/local/nginx/conf


# 添加以下配置信息到nginx.conf文件

stream {

    upstream w {

        server 192.168.1.110:2999;

    }

    upstream l {

        server 192.168.1.110:2888;

    }

    upstream d {

        server 192.168.1.110:2777;

    }

    server {

        listen  299;

        proxy_connect_timeout 360s;

        proxy_timeout 360s;

        proxy_pass w;

    }

    server {

        listen  288;

        proxy_connect_timeout 360s;

        proxy_timeout 360s;

        proxy_pass l;

    }

    server {

        listen  277;

        proxy_connect_timeout 360s;

        proxy_timeout 360s;

        proxy_pass d;

    }

}


# 检查并启动

/usr/local/nginx/sbin/nginx  -t

/usr/local/nginx/sbin/nginx


## 3,测试连接


## 注:nginx版本至少1.9的版本,版本太低没有stream这个功能

以上是关于nginx使用stream反向代理mysql的主要内容,如果未能解决你的问题,请参考以下文章

使用Nginx实现UDP反向代理

nginx之TCP反向代理

Nginx stream如何获取ssl信息并反向代理至上游服务器

nginx之TCP反向代理

nginx之TCP反向代理

Nginx搭建反向代理服务器过程详解