背景:
根据组长背景描述,具备以下前提
1. Mysql服务器为 某A云厂商的RDS SAAS服务,但是不开通外网服务
2. EC2 服务器一台,某A云厂商LaaS服务,也不开通外网
3.阿里云服务器一台,这台服务器有服务需要连接Mysql服务
需求: 让阿里云服务器中的服务,可以访问到Mysql服务。
解决方案:在A云厂商的EC2服务器中,部署Nginx服务,有Nginx服务代理Mysql服务
前提需要:EC2服务器能够访问Mysql服务,阿里云服务器能够访问EC2服务,它们之间的网络可以连通
方案搭建
注意Nginx,尽量不要使用yum方式来安装,为什么呢?
Mysql服务不是Http连接,需要使用Upstream这个模块,yum方式安装的nginx不好再次去配置和安装upstream,尽量使用编译方式来安装;本文以编译方式来安装
1. 编译安装Nginx
需要确保具备wget这个命令
cd /tmp/
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar xf nginx-1.22.1.tar.gz
2.查漏补缺安装
我下载好后直接编译
sudo ./configure --prefix=/usr/local/nginx-my-stream/nginx1.22.1 --with-stream --with-http_stub_status_module --with-http_ssl_module
报错如下 ,缺少gcc等编译工具
可以按照提示,缺少什么就安装什么,可以直接以空格分割 一次性安装完毕
sudo yum -y install gcc
sudo yum -y install gcc-c++
sudo yum -y install openssl openssl-devel
sudo yum -y install openssl*
sudo yum install -y zlib-devel
3.编译
sudo ./configure --prefix=/usr/local/nginx-my-stream/nginx1.22.1 --with-stream --with-http_stub_status_module --with-http_ssl_module --without-http_rewrite_module
编译成功是不带有error灯关键字的,哪里缺少就会到第二步,yum install -y 缺少的模块
4. 安装
输入如下命令
sudo make
sudo make install
看到如下界面就是配置成功,如果有error关键字,就重新看下详细信息,我当时没有加sudo 就报错了
5.启动
通过上述安装成功的命令可以查看到,已经安装到下述这个目录中,配置文件在这个目录下的conf下
/usr/local/nginx-my-stream
进入/usr/local/nginx-my-stream/nginx1.22.1/sbin/nginx目录,使用命令
1. sudo /usr/local/nginx-my-stream/nginx1.22.1/sbin/nginx
2. 检查服务是否启动 ps -aux | grep nginx
当然应该也可以配置成systemctl方式启动,我懒得配了,有兴趣的同学可以再去研究
6.配置Nginx代理Mysql服务
这个代码段可以放到http代码段的上面,要和http这个块平级
#mysql 地址映射
stream {
upstream mysql {
server IP地址:3306 weight=1 max_fails=2 fail_timeout=30s; #原Mysql地址
}
server {
listen 3306;
proxy_connect_timeout 30s;
proxy_timeout 30s;
proxy_pass mysql;
}
}
7.测试连接
此时在阿里云服务器中安装yum install mariadb105-server -y,用以连接Mysql测试
输入命令,根据命令输入密码,即可通过跳板机连接到RDS Mysql数据库
mysql -h 跳板机IP -P 3306 -u root -p