nginx使用stream反向代理mysql
Posted 小Q职业生涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx使用stream反向代理mysql相关的知识,希望对你有一定的参考价值。
## 1,起因
使用rinted端口转发工具代理mysql,做端口的转发服务,开始一切正常,一段时间以后突然连接不上,报错如图:
登录服务器检查发现 rinted 服务 CPU使用率高达 100% 如图:
使用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的主要内容,如果未能解决你的问题,请参考以下文章