V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
deepkolos
V2EX  ›  程序员

如何做隧道的负载均衡?

  •  
  •   deepkolos ·
    deepkolos · 2018-01-09 16:58:21 +08:00 · 3914 次点击
    这是一个创建于 2505 天前的主题,其中的信息可能已经有所发展或是发生改变。

    内网一个网站但是多个服务器主机, 大概有 3 台可用的, 部分时间段会开启 6 台, 来应对并发高峰, 现在先假设只有 3 台是可用的

    202.192.xxx.129
    202.192.xxx.131
    202.192.xxx.134

    一台可以访问内网也可以访问外网的隧道客户端主机 (上下行 100 兆)
    端口设置:

    81 -> nginx 反代到 202.192.xxx.129
    82 -> nginx 反代到 202.192.xxx.134
    83 -> nginx 反代到 202.192.xxx.131
    84 -> nginx 反代到 202.192.xxx.134

    81 隧道到服务端主机 1 的 8081
    82 隧道到服务端主机 2 的 8081
    83 隧道到服务端主机 3 的 8081
    84 隧道到服务端主机 4 的 8081

    4 台有公网 ip 的隧道服务端主机 (均为上下行 1 兆) (师弟手里的服务器)
    服务主机 1,2,3,4
    8081 -> http
    8083 -> ngrok controll link

    分配一批子域名到对应的主机的公网 ip
    主机 1: ngrok-1.xxxx.cn
    主机 2: ngrok-2.xxxx.cn
    主机 3: ngrok-3.xxxx.cn
    主机 4: ngrok-4.xxxx.cn

    还有一个爬虫(缓存)主机, 目前部署在的云服务器里面, 然后通过隧道爬虫内网的网站, 再对外提供服务

    那么如何做这样的隧道结构的负载均衡?

    在爬虫那里做一层? 然后内网隧道客户端主机做一层?

    爬虫否应该搬到隧道客户端主机?

    20 条回复    2018-01-10 11:06:08 +08:00
    defunct9
        1
    defunct9  
       2018-01-09 17:07:09 +08:00
    看得我头晕,画个图吧
    deepkolos
        2
    deepkolos  
    OP
       2018-01-09 17:29:04 +08:00
    defunct9
        3
    defunct9  
       2018-01-09 17:46:07 +08:00
    折腾这个就为了避过备案?老老实实备案去吧
    defunct9
        4
    defunct9  
       2018-01-09 17:49:35 +08:00   ❤️ 1
    感觉这个架构太累了。
    直接外网找单独一个服务器做 openvpn server, 装 nginx 和 openvpn。
    内网的三台直接拨通 openvpn,或者中间那台代理 haproxy,拨出去,然后就内外可见了。用 nginx 代理即可。
    N0stalgia
        5
    N0stalgia  
       2018-01-09 18:04:56 +08:00
    做个 DNS 的解析负载均衡岂不是美滋滋?
    deepkolos
        6
    deepkolos  
    OP
       2018-01-09 18:49:44 +08:00
    @defunct9 不是哈, 教务系统爬虫来的
    deepkolos
        7
    deepkolos  
    OP
       2018-01-09 18:54:36 +08:00
    @defunct9 现在用的是 ngrok 做内网穿透, 但是云服务器带宽只有一兆, 所以想叠加几台, 期末查成绩会并发和流量都比较大大, 因为成绩是以图片的形式展示的, 课表也是
    hljjhb
        8
    hljjhb  
       2018-01-09 19:33:53 +08:00 via Android
    为什么要把内网服务器反代到多个端口?
    deepkolos
        9
    deepkolos  
    OP
       2018-01-09 19:42:28 +08:00
    @hljjhb 教务系统有多个内网地址, 129 是学校官网暴露出去的, 134, 131 是遍历 ip 测出来的, 有就拿来用嘛
    hljjhb
        10
    hljjhb  
       2018-01-09 19:47:04 +08:00 via Android
    @deepkolos 😂直观想法难道不是挂到 nginx 负载均衡上吗
    likuku
        11
    likuku  
       2018-01-09 19:54:33 +08:00   ❤️ 1
    结构不作大的变更的话,那就:

    所有可被访问到的 web 主机前面都放负载均衡器(nginx,haproxy,F5,netscaler 等等),无论内外网,无论哪里访问。

    宗旨:把负载均衡插入 web 服务器 与 发起 web 访问的客户端(人类,机器,爬虫,balala) 就可以了。
    okletswin
        12
    okletswin  
       2018-01-09 19:55:53 +08:00
    爬虫(缓存)主机是关键点吧?外部云主机的数据来源是此缓存主机吧?要是的话,和云主机放同一个内网
    另外,云主机只有 1M 带宽?现在流行的方案是云主机只有内网 IP,在云主机前加负载均衡,按需调整整体带宽,教务系统这种,其实按流量计费就足够了吧
    为什么要把内网服务器反代到多个端口?
    deepkolos
        13
    deepkolos  
    OP
       2018-01-09 20:40:50 +08:00
    @okletswin @hljjhb
    没没经验, 所以跑来问嘛😂
    defunct9
        14
    defunct9  
       2018-01-09 21:38:54 +08:00   ❤️ 1
    @deepkolos 恩。那就按我上条来呗。ngrok 维护带宽和 openvpn 相比是大的。
    hljjhb
        15
    hljjhb  
       2018-01-09 22:52:44 +08:00   ❤️ 1
    @deepkolos 建议找个对象存储,七牛或腾讯都有免费额度

    把内网服务器负载均衡到隧道客户端主机,同时在此主机上跑爬虫,缓存的图片都扔到对象存储,隧道到外网云服务器提供 web 或 api 服务
    just1
        16
    just1  
       2018-01-09 23:05:05 +08:00 via Android   ❤️ 1
    简单的方法:
    4 台隧道的服务器(ngrok-xx)设置同一个域名。
    爬虫本地开 nginx 反代这个域名,4 均衡负载
    但是这不好,这是 4to4,内网对应服务器 down 了这台云服务器也没用了。

    好的办法:
    内网 100m 服务器 nginx 均衡负载,6ip ( nginx 会自己决定走哪个)。4 台 1m 用 nginx 外代,对外暴露域名一致。
    爬虫本地开 nginx 反代这个域名,4 均衡负载
    litter123
        17
    litter123  
       2018-01-09 23:29:41 +08:00
    @deepkolos 又是一个学校相关信息微信公众号大佬
    flowfire
        19
    flowfire  
       2018-01-10 10:57:41 +08:00
    emmm 我比较想问的是 202 开头的内网地址。。。。?
    deepkolos
        20
    deepkolos  
    OP
       2018-01-10 11:06:08 +08:00
    @flowfire 广东的教育网 202.192.0.0 ~ 202.199.255.255
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.