使用Nginx实现公网访问DCS
方案概述
当前,华为云DCS的Redis 4.0及以上版本不支持绑定弹性IP,无法直接通过公网访问。
本章节主要介绍通过跳板机访问VPC内Redis 4.0/5.0/6.0单机、主备、读写分离、Proxy集群实例的操作,Cluster集群实例暂不支持使用该方案进行公网访问。
图1中安装了Nginx代理工具的ECS就是一台跳板机,它与DCS Redis实例在相同VPC,可通过子网IP访问Redis实例;为ECS绑定弹性IP后,公网可以访问ECS;Nginx支持监听多个端口,并将请求内容转发到不同的后端Redis实例。
不建议在生产环境中使用公网访问的方式,对于因公网网络性能造成的客户端访问异常不计入SLA。
购买一台ECS
- 确认Redis实例所在的虚拟私有云。
如下图所示,已购买了一个虚拟私有云在“vpc-demo”内的主备实例。图2 Redis缓存实例信息
- 购买一台同在“vpc-demo”的ECS,并为其绑定一个弹性公网IP,按需选择带宽。
图3 ECS信息
安装Nginx
购买ECS后,需要在ECS上安装Nginx,本文以ECS操作系统为Centos7.x为例进行安装,不同操作系统命令稍有不同。
- 执行以下命令,添加Nginx到yum源。
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 添加完之后,执行以下命令,查看是否已经添加成功。
yum search nginx
- 添加成功之后,执行以下命令,安装Nginx。
sudo yum install -y nginx
- 执行以下命令安装stream模块。
yum install nginx-mod-stream --skip-broken
- 启动Nginx并设置为开机自动运行。
sudo systemctl start nginx.service sudo systemctl enable nginx.service
- 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。
如果出现下面页面,则表示安装成功。
配置Nginx
Nginx安装后,需要配置请求转发规则,告诉Nginx哪个端口收到的请求,应该转发到后端哪个Redis实例。
- 打开并修改配置文件。
cd /etc/nginx vi nginx.conf
配置示例如下,如果有多个redis实例需要公网连接,可以配置多个server,在proxy_pass中配置Redis实例连接地址。
stream { server { listen 8080; proxy_pass 192.168.0.5:6379; } server { listen 8081; proxy_pass 192.168.0.6:6379; } }
proxy_pass参数配置值为同一vpc下的Redis实例的IP地址,具体可从缓存实例详情页面的“连接信息”区域获取。
图4 Nginx配置信息的输入位置
- 重启Nginx服务。
service nginx restart
- 验证启动是否成功。
netstat -an|grep 808
图5 启动Nginx及验证
8080和8081两个端口都在监听状态,Nginx启动成功。
(可选)长连接场景
- Nginx到后端server的超时时间
stream { server { listen 8080; proxy_pass 192.168.0.5:6379; proxy_socket_keepalive on; proxy_timeout 60m; proxy_connect_timeout 60s; } server { listen 8081; proxy_pass 192.168.0.6:6379; proxy_socket_keepalive on; proxy_timeout 60m; proxy_connect_timeout 60s; } }
proxy_timeout 默认值是10m(10分钟),可以根据用户需要设为60m或其他值。Nginx官网 proxy_timeout说明
- 客户端到Nginx的超时时间
http { keepalive_timeout 3600s; }
keepalive_timeout 默认值是75s,可以根据用户需要设为3600s或其他值。Nginx官网 keepalive_timeout 说明
通过Nginx访问Redis
- 登录ECS控制台,确认跳板机的安全组规则是否放开,如果没有,则需要为安全组放开8080和8081两个端口。
- 单击ECS实例名称,进入ECS详情页面。
- 选择“安全组”页签,单击“配置规则”,可进入安全组配置页面。
图6 进入ECS安全组
图7 添加安全组入方向规则
- 在公网环境中打开Redis命令行界面,输入如下命令,登录与查询都正常。
公网环境已参考Redis-cli连接中相关步骤,安装Redis-cli客户端。
./redis-cli -h {myeip} -p {port} -a {mypassword}
其中,命令中的{myeip}为主机连接地址,需要填写ECS的弹性IP,端口需要填写ECS上Nginx的监听端口。
如下图所示,设置的2个监听端口分别为8080和8081,对应后端2个Redis实例。
图8 通过Nginx代理连接第一个Redis实例
图9 通过Nginx代理连接第二个Redis实例