有同学知道这类流量负载均衡的现成方案吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whyorwhynot
V2EX    宽带症候群

有同学知道这类流量负载均衡的现成方案吗?

  •  
  •   whyorwhynot 2020-02-16 11:59:22 +08:00 4368 次点击
    这是一个创建于 2067 天前的主题,其中的信息可能已经有所发展或是发生改变。

    avatar 计算机 A 要访问 google,中间的数据包负载均衡到 B1、B2、B3 服务器,并发走三条线路,并在 C 服务器完成汇聚。 现实的场景就是公开的酸酸乳和挂掉的个人 vps,用途你懂的。

    楼主 google 了一堆关键词(链路聚合,流量汇聚等等)都没有找到,来 V2X 求助啊 
    62 条回复    2020-03-15 11:06:08 +08:00
    huayumo
        1
    huayumo  
       2020-02-16 12:32:57 +08:00
    牛逼,好思路
    whyorwhynot
        2
    whyorwhynot  
    OP
       2020-02-16 12:51:29 +08:00
    就差一个程序员了
    wtks1
        3
    wtks1  
       2020-02-16 12:54:11 +08:00 via Android
    好像之前在 V 站看到过有人搞出过这个,但似乎没有公开
    idhrwb01296
        4
    idhrwb01296  
       2020-02-16 12:55:39 +08:00 via Android
    加钱加到位,是不是机场都帮你做好了呢,比如中转、BGP
    optional
        5
    optional  
       2020-02-16 12:58:27 +08:00
    洋葱
    SaigyoujiYuyuko
        6
    SaigyoujiYuyuko  
       2020-02-16 12:59:28 +08:00
    意淫了个方案 不知道可不可行: A 和 B* 的机器组网 | B* + C 机器组网 然后 B* 和 C 机器上面 装 酸酸乳,A 机器添加组网后的 B*机器的酸酸乳连接,使用酸酸乳自带的负载均衡。
    DGideas
        7
    DGideas  
       2020-02-16 12:59:47 +08:00 via Android
    问题是既然楼主提到“负载均衡”,为啥还“并发”走三个服务器呢?

    先明确下需求
    sujin190
        8
    sujin190  
       2020-02-16 13:13:04 +08:00
    实现过一个,B1、B2、B3 中间机器开启端口转发,A 通过 B1、B2、B3 建立三条固定到 C 的 TCP 连接,A 通过轮询 B1、B2、B3 方式把所有数据包通过三条 TCP 连接发往 C,C 重新组包排序,A 和 C 之间多路复用实现代理转发请求
    whyorwhynot
        9
    whyorwhynot  
    OP
       2020-02-16 13:21:20 +08:00
    @optional 类似 tor,但是是走酸酸乳线路节点,类似的有 MPTCP
    whyorwhynot
        10
    whyorwhynot  
    OP
       2020-02-16 13:23:05 +08:00
    @idhrwb01296 机场不一定安全,这样做流量从自己的 vps 出,还可以充分利用 vps
    whyorwhynot
        11
    whyorwhynot  
    OP
       2020-02-16 13:24:51 +08:00
    @DGideas 一个链接的数据包分流到三个线路去走,最大化吞吐率
    whyorwhynot
        12
    whyorwhynot  
    OP
       2020-02-16 13:27:20 +08:00
    @SaigyoujiYuyuko 貌似酸酸乳的负载均衡是基于连接的吧
    SaigyoujiYuyuko
        13
    SaigyoujiYuyuko  
       2020-02-16 13:29:24 +08:00
    @whyorwhynot 好像是的
    whyorwhynot
        14
    whyorwhynot  
    OP
       2020-02-16 13:37:27 +08:00
    @sujin190 我的想法差不多,不过不是端口映射,是直接本地搞个客户端通过 B1、B2、B3 的酸酸乳暴露在本地的多个 socks5 代理连接 vps 服务端,服务端程序负责组包
    zlkent
        15
    zlkent  
    PRO
       2020-02-16 13:38:16 +08:00
    没太看懂,现成的不是 haproxy 就能实现了? passwall 和 kool 的 ss 插件都带这个功能了。
    whileFalse
        16
    whileFalse  
       2020-02-16 13:40:42 +08:00
    可以看看 Speedify
    whyorwhynot
        17
    whyorwhynot  
    OP
       2020-02-16 13:50:05 +08:00
    @zlkent haproxy 应该还是基于连接做的负载均衡,单个 TCP 连接还是走的一条线路,我的想法是通过增加一个 vps 实现数据包的远端组包,一个连接的数据包可以走不同的链路
    opengps
        18
    opengps  
       2020-02-16 13:54:31 +08:00 via Android
    套娃
    Archeb
        19
    Archeb  
       2020-02-16 13:58:58 +08:00
    一个鸡肋套娃方案
    套娃,用 B1B2B3 的三个代理来连接 C 上的 VPN ( VPN over SOCKS5 )
    然后 A 上出来三个接口,C 上也出来三个接口
    直接两端对这三个接口做链路聚合即可( NIC Bonding )

    如果需要实用方案的话还是自己造轮子吧
    whyorwhynot
        20
    whyorwhynot  
    OP
       2020-02-16 14:03:55 +08:00
    @whileFalse 这个貌似是支持多链路的,原理差不多,轮子的自由 door 貌似也是
    digimoon
        21
    digimoon  
       2020-02-16 14:04:50 +08:00
    @whyorwhynot 假设你一个文件三等分,中间的那份特别慢,头和尾不还是要等中间的到了才能组合?

    还是说你想一个文件同时走三个网络,取最快返回结果的那个?
    whyorwhynot
        22
    whyorwhynot  
    OP
       2020-02-16 14:06:51 +08:00
    @Archeb 直连可能被 ban 或者速度慢,分成线连接,看起来似乎可以提速,效果还得实测。。
    whyorwhynot
        23
    whyorwhynot  
    OP
       2020-02-16 14:13:46 +08:00
    @digimoon 是前者,数据包的实时分流,增大带宽,的确会有慢的线路,如果真要做会对线路质量做测评。
    laminux29
        24
    laminux29  
       2020-02-16 14:20:14 +08:00   3
    你这不是负载均衡,而是智能路由。

    不仅需要拆包并发,还要实现瓶颈管理(优质线路满载时计算转发到劣质线路是否划算)、延时预算(走一条还是走多条,只走优质还是优劣并走)、重发管理(如果接收端存活,则缺失片段需要一直寻找不同线路重发)等等。

    这一套东西,是真正的科研,弥补了现有协议与路由运作方式的不足,这可不便宜,更别说免费了。
    whyorwhynot
        25
    whyorwhynot  
    OP
       2020-02-16 14:20:25 +08:00
    @opengps 想白 piao 公共节点做加速
    whyorwhynot
        26
    whyorwhynot  
    OP
       2020-02-16 14:24:11 +08:00
    @laminux29 考虑的因素多了的确很复杂,toy 就可以了。。。
    love4taylor
        27
    love4taylor  
    PRO
       2020-02-16 14:52:12 +08:00 via Android
    MPTCP
    ericbize
        28
    ericbize  
       2020-02-16 14:57:03 +08:00
    太复杂了,根本不需要这样子
    MiaRunis
        29
    MiaRunis  
       2020-02-16 15:29:33 +08:00
    @ericbize 有必要的,因为跨境链路这一节不稳定,随时可能被墙,这是高可用性的最佳实践
    MiaRunis
        30
    MiaRunis  
       2020-02-16 15:35:50 +08:00
    目前公开 /免费的负载均衡方案都没有直接并发的,直接并发的都没有高可用,
    不想付钱的话目前效果最好的只有 haproxy 真 https 检测模式+CDN 海量随机节点。
    自动剔除被 ISP 限流或墙掉的 ip,可以确保高可用,不能保证大流量和低延迟。
    whyorwhynot
        31
    whyorwhynot  
    OP
       2020-02-16 16:15:53 +08:00
    @MiaRunis 3ks,机场和自建的都在用,就是宅久了,想尝试些新玩意
    runshine
        32
    runshine  
       2020-02-16 17:22:34 +08:00 via Android
    TCP 乱序得问题很难解决
    GM
        33
    GM  
       2020-02-16 17:34:38 +08:00
    看你对通信品质的要求了。
    如果没要求,那很容易。
    如果对实时性要求比较高,那很难,很难,很难。

    多个节点的通信延迟是不一样的,A、C 每次都必须等待所有包都送达才能完成一次完整的通讯。延迟起码高 3 倍。
    whyorwhynot
        34
    whyorwhynot  
    OP
       2020-02-16 18:53:01 +08:00
    @GM 没有这么悲观吧,看个 youtube,三条线路同时走,会受限于延迟最高的那条线路
    whyorwhynot
        35
    whyorwhynot  
    OP
       2020-02-16 18:57:26 +08:00
    @runshine 只要考虑传递的流量数据的重排序就可以了吧
    Moofish
        36
    Moofish  
       2020-02-16 19:31:44 +08:00
    OpenWRT 有现成的方案,不过好的节点跑 8K 已经很轻松了,负载平衡其实意义不大
    whyorwhynot
        37
    whyorwhynot  
    OP
       2020-02-16 20:00:25 +08:00
    @Moofish 求问,Openwrt 的现成方案是啥
    hicdn
        38
    hicdn  
       2020-02-16 20:43:22 +08:00
    这不就是 CDN 吗?
    whyorwhynot
        39
    whyorwhynot  
    OP
       2020-02-16 21:11:18 +08:00
    @hicdn no,cdn 做不了数据包层级的分流和汇总
    Moofish
        40
    Moofish  
       2020-02-16 21:16:07 +08:00
    @whyorwhynot 某工具内嵌了负载平衡,可以同时用多个节点的,甚至你多 WAN 都可以指定哪个节点走哪条宽带
    ik
        41
    ik  
       2020-02-16 21:18:32 +08:00 via iPhone
    嫌机场不安全可以 在自建代理上套机场,是不是省事些
    whyorwhynot
        42
    whyorwhynot  
    OP
       2020-02-16 21:18:59 +08:00
    @Moofish 这个工具应该还是基于连接做的负载均衡吧,没办法将一个连接的数据包做分流的。并不是真的同时,只在多连接的情况下有效
    whyorwhynot
        43
    whyorwhynot  
    OP
       2020-02-16 21:25:20 +08:00   1
    @ik 其实更多的是想要利用公共资源(捡垃圾做出高性能的东西,图拉丁垃圾佬的梦想),和这种方案到底能够达到何种程度的加速
    hicdn
        44
    hicdn  
       2020-02-16 21:40:31 +08:00
    @whyorwhynot CDN 在特殊场景是可以做流量的汇总。比如在 vps 做个反向代理,然后用 CDN 加速,aria2c 利用多个 CDN 节点多源下载。速度叠加很明显,大概是 1+1+1=2。
    whyorwhynot
        45
    whyorwhynot  
    OP
       2020-02-16 21:50:18 +08:00
    楼主目前找到了 VPN Bonding、openmptcprouter、MLVPN、overthebox 貌似有希望。。。
    whyorwhynot
        46
    whyorwhynot  
    OP
       2020-02-16 21:53:19 +08:00
    @hicdn 这个还是基于连接的速度叠加,对单个连接无法加速。基于连接的酸酸乳和 haproxy 都可以做吧
    hicdn
        47
    hicdn  
       2020-02-16 21:57:25 +08:00
    @whyorwhynot 如果基于单个连接的加速搞出来,路由器多播叠加宽带就用着很爽了。等你好消息。
    akira
        48
    akira  
       2020-02-16 23:11:37 +08:00
    这个不就是 tor 么
    deorth
        49
    deorth  
       2020-02-16 23:16:45 +08:00
    v2ray 的负载均衡,不过我这里始终达不到带宽叠加的效果
    kennylam777
        50
    kennylam777  
       2020-02-17 00:10:43 +08:00
    同意 @laminux29 所的
    如果是多性能相同的媒介, Bonding/ECMP 就可以做到封包的分, 看很。

    但酷的就是每路性能不同, 真的是科研的西,
    MiaRunis
        51
    MiaRunis  
       2020-02-17 00:13:32 +08:00   1
    @whyorwhynot 大佬你做成了记得发出来,至少给我们提个思路谢谢。最怕那种问题挂着结果提问的人只写个“解决了”的,想打人
    totoro625
        52
    totoro625  
       2020-02-17 01:56:22 +08:00 via iPhone
    @ik #41 搭车问一下,是使用前置代理的功能么?
    iOS 端似乎没法实现
    charslee013
        53
    charslee013  
       2020-02-17 03:28:37 +08:00
    最简单的就是用 ssh 转发 C 机器的端口到 B1 B2 B3

    Example : ssh -CfNg -R <目标端口>:127.0.0.1:<转发机器端口> root@<目标 IP>

    不过这种不敢保证可用性,建议在 crontab 添加定时任务保证挂掉之后能重启

    又或者买个域名挂在 cloudflare 上走 CDN 通道 (移动网络不推荐
    GM
        54
    GM  
       2020-02-17 09:17:58 +08:00   1
    @MiaRunis 哈哈哈哈,简直不能再同意,每次搜问题碰到这种人,真想顺着网线爬过去打他一顿。
    ik
        55
    ik  
       2020-02-17 09:57:14 +08:00 via iPhone
    @totoro625 我差不多也就是这个意思吧,但是没有这样弄过。
    linux 用 proxychain-ng + python 版 ssr ,测试可以实现
    missdeer
        56
    missdeer  
       2020-02-17 10:36:43 +08:00
    如果我理解没错的话,3 个 B 上是酸酸乳?那么有 2 个现成的方案:
    1. haproxy,tcp 负载均衡,要求 3 个 B 上的设置完全相同
    2. https://github.com/cloudwu/mptun,原理是 https://blog.codingnow.com/2015/07/mptun.html
    linvon
        57
    linvon  
       2020-02-17 10:42:58 +08:00
    这种会不会对实际网络环境有过于理想化的依赖?
    yankebupt
        58
    yankebupt  
       2020-02-17 11:40:28 +08:00   1
    @whyorwhynot 是牲定性做代的。
    假每路 95%定性,差不多 5%波
    三聚合,如果流量波特性相互立的
    95%三次方大概 85.73%的定性...差不多 15%的波...
    路量差很多。
    除非冗...比如同包或者各…
    但是流量要的
    ghjexxka
        59
    ghjexxka  
       2020-02-17 15:50:47 +08:00
    公开 ssr 开启负载均衡和连接 C 的客户端开启前置代理到 ssr 的 socks5/http 吗?模式就选低错误优先好了
    chijiao
        60
    chijiao  
       2020-02-17 23:32:03 +08:00
    有一种可能,就是基于数据包的负载均衡,就是说第一个包走节点 1,第二个包走节点 2,但是还是没办法把带宽增加,因为包是连续的。这个用 iptables 就可以实现。
    whyorwhynot
        61
    whyorwhynot  
    OP
       2020-02-20 22:56:12 +08:00
    楼主自己抽空用 python 写了个蹩脚的聚合 socks5,socks 代理节点搞了 5 个都是内网的,聚合节点也是内网的,speedtest 测速结果才 3Mbps,也是服了。。不过 github 找到了一个 PoorMansBonding 项目,让 tun 流量走多条 tcp 连接,在 vps 汇聚,配合路由器上开个透明代理,自动负载均衡将 tcp 链接分配到多个链路,也算是实现了想法了
    whyorwhynot
        62
    whyorwhynot  
    OP
       2020-03-15 11:06:08 +08:00
    rabbit-tcp 配合 haproxy 负载均衡也类似
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5260 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 09:29 PVG 17:29 LAX 02:29 JFK 05:29
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86