【云小课】应用平台第4课 一招搞定公网访问Redis

应用万花筒 发表于 2020/04/10 16:52:10 2020/04/10
【摘要】 本文提供一种便捷实惠的方式,实现公网访问VPC内的DCS Redis实例。适用于开发与测试环境的跨网络搭建

DCS Redis实例运行在VPC(虚拟私有云)内,客户端程序与Redis实例使用VPC内子网地址通信,网络低延时高IO,且安全防护性更高。如果本地开发/测试环境想要访问Redis实例,则可以为实例绑定弹性IP,客户端程序通过弹性IP与实例通信。

然而,各位亲是否有过类似的烦恼:

  • 安全规定不允许Redis实例绑定弹性IP。(安全:只要我觉得不安全,那就是不安全)

  • 几十上百个Redis实例,使用弹性IP成本太高了。(财务:能省一点是一点)

  • Redis4.0以及Redis5.0版本目前不支持绑定弹性IP。(技术:实在无解... ...)

小编在这里提供一种便捷、安全,而且非常实惠的方式,即通过跳板机访问VPC内Redis实例。


如下图所示,安装了Haproxy代理工具、并绑定了弹性IP的ECS就是一台跳板机,Redis客户端访问Haproxy的监听端口,Haproxy将请求内容转发到不同的Redis实例。

接下来,小编为您详细介绍Haproxy的搭建,以及Redis客户端访问

购买一台ECS

如下所示,小编的Redis实例,在虚拟私有云“vpc-01”内。


于是,小编买了一台同在“vpc-01”的ECS,并为其绑定一个弹性公网IP,按需选择带宽,够用就好。

安装Haproxy

买了ECS后,小编开始在ECS上安装Haproxy(为了方便亲们抄作业,我把所有执行过的命令都贴出来了。

  1.  登录ECS,下载Haproxy

    cd /root

    wget https://www.haproxy.org/download/1.6/src/haproxy-1.6.12.tar.gz

    本示例以root用户操作,您可以自建普通用户。

  2. 下载完成后解压。

    tar -zxvf haproxy-1.6.12.tar.gz

    新建haproxy的安装和运行目录。

    mkdir p /usr/local/haproxy

  3. 编译和安装haproxy

     cd ./haproxy-1.6.12

     make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy        

    TARGET=linux26    #指定内核版本,可以使用uname -r查看系统内核信息,如果kernel大于2.6.28,则参数值填linux2628,否则填linux26。如:2.6.18-371.el5,此时该参数值填linux26ARCH=x86_64    #系统位数    PREFIX=/usr/local/haproxy  #haproxy安装路径 

         

  4. 安装haproxy

    make install PREFIX=/usr/local/haproxy

            

配置Haproxy

Haproxy安装后,需要配置请求转发规则,告诉Haproxy哪个端口收到的请求,应该转发到后端哪个Redis示例。

  1.  Haproxy的配置模板复制到Haproxy的安装目录。

    cp /root/haproxy-1.6.12/examples/transparent_proxy.cfg /usr/local/haproxy/haproxy.cfg

  2. 修改配置文件。

    cd /usr/local/haproxy

    vi haproxy.cfg

    配置示例如下:

    global
    defaults
        timeout client 30s   #客户端连接超时时间
        timeout server 30s #后端连接超时时间
        timeout connect 30s #前后端连接总超时时间
    frontend RedisFront01 #1个监听配置
        bind *:8080 #Haproxy监听端口,
        default_backend RedisBackend01 #转发对应的后端名称
    backend RedisBackend01
        mode tcp   #识别TCP报文后,转发对应的Redis后端。如果是http报文,则会拒绝。
        server server1 192.168.10.38:6379 #Redis后端地址与端口
    #如果有多个redis实例需要公网连接,可参考以下内容,配置多个frontendbackend
    frontend RedisFront02 #2个监听配置
        bind *:8081  #Haproxy监听端口
        default_backend RedisBackend02
    backend RedisBackend02
        mode tcp
        server server1 192.168.10.224:6379


  3. 启动haproxy

    nohup /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg &

  4.  验证启动是否成功。

    netstat -an|grep LISTEN |grep 808

     80808081两个端口都在监听状态,Haproxy启动成功。


通过Haproxy访问Redis

小编在公网环境中打开Redis命令行界面,输入如下命令,登录与查询都正常,大功告成。

redis-cli -h {myeip} -p {port} -a {mypassword}

注意,命令中的{myeip}为主机连接地址,需要填写ECS的弹性IP,端口需要填写ECSHaproxy的监听端口。如下图所示,小编设置的2个监听端口分别为80808081,对应后端2Redis实例。

    

    

 

    

小编猜测,您很有可能遇到下图所示的连接超时现象。

    

最常见的原因是跳板机的安全组入方向规则没放开,请登录虚拟私有云控制台,为安全组入方向放开80808081两个端口

    

至此,小编完成了跳板机的搭建,从此再也不用担心网络不通了。

除了HaproxyNginx也是一款优秀的开源代理软件,也能满足配置跳板机并访问DCS Redis示例的需要。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。