本文共 1614 字,大约阅读时间需要 5 分钟。
问题背景
某客户V3环境应用服务器想要连通V2环境Oracle数据库进行数据存储,解决办法是在V2环境搭建一台带nginx的ECS用来端口转发。原理图:
环境
• OS: Centos• Nginx: 1.12.1编译安装Nginx
从1.9.0开始,nginx就支持对TCP的转发,而到了1.9.13时,UDP转发也支持了。提供此功能的模块为ngx_stream_core。不过Nginx默认没有开启此模块,所以需要手动安装。cd /usr/local/srcwget http://nginx.org/download/nginx-1.12.1.tar.gztar zxf nginx-1.12.1.tar.gzcd nginx-1.12.1./configure --prefix=/usr/local/nginx --with-stream --without-httpmake && make install
配置Nginx
TCP转发目标:通过3000端口访问本机Mysql(其中mysql使用yum安装,默认配置文件)/usr/local/nginx/conf/nginx.conf配置如下:user nobody;worker_processes auto;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;stream { upstream cloudsocket { hash $remote_addr consistent; server 192.168.0.7:1521 weight=5 max_fails=3 fail_timeout=30s; } server { listen 3000;#公网机器监听端口 proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass cloudsocket; }}
首先,先通过1521端口访问oracle:
然后,启动Nginx:
最后使用3000端口访问mysql:
安装过程中可能遇到的问题
安装nginx的时候遇到如下问题:1. Configuration summary 2. + using system PCRE library 3. + OpenSSL library is not used 4. + using builtin md5 code 5. + sha1 library is not found 6. + using system zlib library
出现以上问题的原因是,在安装nginx的时候没有指定openssl的解压路径。正确的做法如下:
./configure --prefix=/usr/local/nginx --with-openssl=/usr/local/openssl-1.0.1j --with-http_ssl_module
如果pcre和zlib出现类似的问题,指定路径就可。
--with-pcre=/usr/local/pcre-7.7 --with-zlib=/usr/local/zlib-1.2.3 --with-http_stub_status_module
该架构存在的问题以及解决方式
该架构虽然解决了 V3环境 无法直接连通V2环境,但是通过代理转发,也存在一定问题,例如单点故障问题,若代理服务器负载过高,会影响整个架构的运行。解决方式是,在代理服务器层增加SLB负载均衡,可在一定程度上解决此问题。转载地址:http://vwhba.baihongyu.com/