# 负载均衡 2

在前面的章节当中有提到过利用 V2Ray 的一个特性来实现负载均衡。但是由于这种负载均衡是投机取巧利用配置实现的,最终的效果不尽如人意,也就在特殊情况下用一用而已,也有人认为这种轮询的机制压根算不上负载均衡。不过经过漫长的等待,V2Ray 终于可均衡负载了,但是可能 V2Ray 认为时机还不成熟,官方文档上并没有负载均衡方面的描述。我研究了一番源代码,粗略测试了几分钟,V2Ray v4.3 版本可以均衡负载了,于是放出本篇教程给大伙尝尝鲜。

# 配置

负载均衡的配置位于 routing 字段,仅需在客户端上配置即可。在 routing 当中,配置一个 balancers 数组,代表这负载均衡的规则,每一个对象包含负载均衡唯一的标签,均衡策略(目前的策略好像只有随机选择)以及可选择的出站代理。然后在路由规则中根据需要配置特定的流量进行负载均衡。在本例中,最后一个路由规则为负载均衡。根据示例可以知道目的地址是私有 IP 或中国大陆的流量直连,其余的所有流量是负载均衡 b1(即 在 jp1 和 jp2 两者之间选择)。本例中没有使用到 b2 的负载均衡。

{

  "inbounds": [
    ...
  ],
  "outbounds": [
    {
      "tag": "us1",
      ...
    },
    {
      "tag": "jp1",
      ...
    },
    {
      "tag": "jp2",
      ...
    },
    {
      "tag": "hk1",
      ...
    },
    {
      "tag": "direct",
      ...
    }
  ],
  "routing": {
    "domainStrategy": "IPOnDemand",
    "balancers": [
      {
        "tag": "b1",
        "selector": [
          "jp1",
          "jp2"
        ]
      },
      {
        "tag": "b2",
        "selector": [
          "us1",
          "hk1"
        ]
      }
    ],
    "rules": [
      {
        "type": "field",
        "outboundTag": "direct",
        "ip": [
          "geoip:private",
          "geoip:cn"
        ]
      },
      {
        "type": "field",
        "outboundTag": "direct",
        "domain": [
          "geosite:cn"
        ]
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "balancerTag": "b1"
      }
    ]
  }
}

从配置中可以看出,V2Ray 的负载均衡同样有着高度灵活的优点,可以针对指定的流量进行负载均衡,也可以按需配置多个负载均衡,不同底层传输配置的出站协议也可以负载均衡,可以说 V2Ray 的路由有多灵活那么它的负载均衡就有多灵活。

可能是刚刚推出的原因,现在的均衡策略只有随机选择,随着时间的推进应该会陆续有其他的策略。

# 更新历史

  • 2018-11-09 初版
  • 2019-11-01 修正某些情况下 IP 规则无法匹配