集群转发配置
配置简介
cluster_conf.data为集群转发配置文件。
配置描述
基础配置
| 配置项 | 描述 | 
|---|---|
| Version | String 配置文件版本  | 
| Config | Object 各集群的转发配置参数  | 
| Config[k] | String 集群名称  | 
| Config[v] | Object 集群转发配置参数  | 
集群转发配置
注:以下配置项均位于名字空间Config[v], 在配置项名称中已省略
后端基础配置
| 配置项 | 描述 | 
|---|---|
| BackendConf.Protocol | String 后端服务的协议,当前支持http/https和fcgi, 默认值http  | 
| BackendConf.TimeoutConnSrv | Integer 连接后端的超时时间,单位是毫秒 默认值2000  | 
| BackendConf.TimeoutResponseHeader | Integer 从后端读响应头的超时时间,单位是毫秒 默认值60000  | 
| BackendConf.MaxIdleConnsPerHost | Integer BFE实例与每个后端的最大空闲长连接数 默认值2  | 
| BackendConf.MaxConnsPerHost | Integer BFE实例与每个后端的最大长连接数,0代表无限制 默认值0  | 
| BackendConf.RetryLevel | Integer 请求重试级别。0:连接后端失败时,进行重试;1:连接后端失败、转发GET请求失败时均进行重试 默认值0  | 
| BackendConf.OutlierDetectionHttpCode | String 后端响应状态码异常检查,""代表不开启检查,"500"表示后端返回500则认为后端失败 支持两种格式:"[0-9]{3}"(如"500")和"[0-9]xx"(如"4xx");多个状态码之间使用'|'连接 默认值"",不开启后端响应状态码异常检查  | 
| BackendConf.FCGIConf | Object FastCGI 协议的配置  | 
| BackendConf.FCGIConf.Root | String 网站的Root文件夹位置  | 
| BackendConf.FCGIConf.EnvVars | Map[string]string 拓展的环境变量  | 
健康检查配置
| 配置项 | 描述 | 
|---|---|
| CheckConf.Schem | String 健康检查协议,支持HTTP/HTTPS/TCP/TLS 默认值 HTTP  | 
| CheckConf.Uri | String 健康检查请求URI (仅HTTP/HTTPS) 默认值 "/health_check"  | 
| CheckConf.Host | String 健康检查请求HOST (仅HTTP/HTTPS) 默认值 ""  | 
| CheckConf.StatusCode | Integer 期待返回的响应状态码 (仅HTTP/HTTPS) 默认值 200。也可以配置为0,代表任意状态码均符合预期。  | 
| CheckConf.StatusCodeRange | String 期待返回的响应状态码 (仅HTTP/HTTPS) 具体参见: 注解 1. StatusCodeRange  | 
| CheckConf.FailNum | Integer 健康检查启动阈值(转发请求连续失败FailNum次后,将后端实例置为不可用状态,并启动健康检查) 默认值5  | 
| CheckConf.SuccNum | Integer 健康检查成功阈值(健康检查连续成功SuccNum次后,将后端实例置为可用状态) 默认值1  | 
| CheckConf.CheckTimeout | Integer 健康检查的超时时间,单位是毫秒 默认值0(无超时)  | 
| CheckConf.CheckInterval | Integer 健康检查的间隔时间,单位是毫秒 默认值1000  | 
GSLB基础配置
| 配置项 | 描述 | 
|---|---|
| GslbBasic.CrossRetry | Integer 跨子集群最大重试次数 默认值0  | 
| GslbBasic.RetryMax | Integer 子集群内最大重试次数 默认值2  | 
| GslbBasic.BalanceMode | String 负载均衡模式(WRR: 加权轮询; WLC: 加权最小连接数) 默认值WRR  | 
| GslbBasic.HashConf | Object 会话保持的HASH策略配置  | 
| GslbBasic.HashConf.HashStrategy | Integer 会话保持的哈希策略。0:ClientIdOnly, 1:ClientIpOnly, 2:ClientIdPreferred,3:RequestURI 默认值为1(ClientIpOnly)  | 
| GslbBasic.HashConf.HashHeader | String 会话保持的hash请求头。可选参数。可配置为能用于唯一区分一个客户端的Header。如果是一个cookie header, 格式为:"Cookie:key"  | 
| GslbBasic.HashConf.SessionSticky | Boolean 是否开启会话保持(开启后,可以保证来源于同一个用户的请求可以发送到同一个后端) 默认值False。设为False时,会话保持级别为子集群级别。  | 
集群基础配置
| 配置项 | 描述 | 
|---|---|
| ClusterBasic.TimeoutReadClient | Integer 读用户请求body的超时时间,单位为毫秒 默认值30000  | 
| ClusterBasic.TimeoutWriteClient | Integer 写响应的超时时间,单位为毫秒 默认值60000  | 
| ClusterBasic.TimeoutReadClientAgain | Integer 连接闲置超时时间,单位为毫秒 默认值60000  | 
| ClusterBasic.ReqWriteBufferSize | Integer 请求的写buffer大小,单位为Bytes。默认值512。建议使用默认值。  | 
| ClusterBasic.ReqFlushInterval | Integer 刷新请求的间隔时间,单位是毫秒。默认值为0,表示不进行周期性刷新  | 
| ClusterBasic.ResFlushInterval | Integer 刷新响应的间隔时间,单位是毫秒。默认值为-1,表示不对响应进行缓存。设置为0表示不进行周期性刷新。建议使用默认值。  | 
| ClusterBasic.CancelOnClientClose | Boolean 当服务端正在读后端响应时,如果客户端断连,是否取消该阻塞状态。默认值为false。建议使用默认值。  | 
后端服务HTTPS配置
| 配置项 | 描述 | 
|---|---|
| HTTPSConf.RSHost | String 后端服务实例的hostname,用来验证服务端证书。 默认值:前端请求头中的Host字段。  | 
| HTTPSConf.BFEKeyFile | String 私钥文件路径,支持双向认证时必填 BFE引擎向后端转发https请求时使用的私钥。私钥文件必须是pem格式  | 
| HTTPSConf.BFECertFile | String 证书文件路径,支持双向认证时必填 BFE引擎向后端转发https请求时使用的证书,证书文件必须是符合x509标准的pem格式,且每个pem文件中只能包含一张证书  | 
| HTTPSConf.RSCAList | []String BackendConf.Protocol为https,并且需要验证服务端的证书(即RSInsecureSkipVerify为false)时必填,如果不填则使用系统默认CA池。列表项为证书文件路径,证书文件必须是符合x509标准的pem格式证书,允许将CA信任链中的多个CA证书合入一个pem文件中。  | 
| HTTPSConf.RSInsecureSkipVerify | Boolean 服务端证书验证开关 true:不验证,false:验证(默认)  | 
AI服务配置
| 配置项 | 描述 | 
|---|---|
| AIConf.Key | String 后端大模型服务的API-Key 空 - 访问后端服务时不重置API-Key,仍保持请求的API-Key  | 
| ModelMapping | Map[string]string 原请求model -> 后端服务的model 的映射关系。访问后端服务时将根据请求的 model 字段查找此映射关系,命中的话则重写请求的 model 字段  | 
配置示例
{
    "Version": "20190101000000",
    "Config": {
        "cluster_example": {
            "BackendConf": {
                "TimeoutConnSrv": 2000,
                "TimeoutResponseHeader": 50000,
                "MaxIdleConnsPerHost": 0,
                "RetryLevel": 0,
                "OutlierDetectionHttpCode": "5xx|403"
            },
            "CheckConf": {
                "Schem": "http",
                "Uri": "/healthcheck",
                "Host": "example.org",
                "StatusCode": 200,
                "FailNum": 10,
                "CheckInterval": 1000
            },
            "GslbBasic": {
                "CrossRetry": 0,
                "RetryMax": 2,
                "HashConf": {
                    "HashStrategy": 0,
                    "HashHeader": "Cookie:UID",
                    "SessionSticky": false
                }
            },
            "ClusterBasic": {
                "TimeoutReadClient": 30000,
                "TimeoutWriteClient": 60000,
                "TimeoutReadClientAgain": 60000,
            }
        },
        "https_cluster_example": {
            "BackendConf": {
                "Protocol": "https",
                "TimeoutConnSrv": 2000,
                "TimeoutResponseHeader": 50000,
                "MaxIdleConnsPerHost": 0,
                "RetryLevel": 0
            },
            "CheckConf": {
                "Schem": "https",
                "Uri": "/",
                "Host": "example.org",
                "StatusCode": 200,
                "FailNum": 10,
                "CheckInterval": 1000
            },
            "GslbBasic": {
                "CrossRetry": 0,
                "RetryMax": 2,
                "HashConf": {
                    "HashStrategy": 0,
                    "HashHeader": "Cookie:UID",
                    "SessionSticky": false
                }
            },
            "ClusterBasic": {
                "TimeoutReadClient": 30000,
                "TimeoutWriteClient": 60000,
                "TimeoutReadClientAgain": 30000,
                "ReqWriteBufferSize": 512,
                "ReqFlushInterval": 0,
                "ResFlushInterval": -1,
                "CancelOnClientClose": false
            },
            "HTTPSConf":{
                "RSHost": "www.example.org",
                "BFEKeyFile": "../conf/tls_conf/backend_rs/r_bfe_dev_prv.pem",
                "BFECertFile": "../conf/tls_conf/backend_rs/r_bfe_dev.crt",
                "RSCAList": [
                    "../conf/tls_conf/backend_rs/bfe_r_ca.crt",
                    "../conf/tls_conf/backend_rs/bfe_i_ca.crt"
                ],
                "RSInsecureSkipVerify": false
            }
        },
        "fcgi_cluster_example": {
            "BackendConf": {
                "Protocol": "fcgi",
                "TimeoutConnSrv": 2000,
                "TimeoutResponseHeader": 50000,
                "MaxIdleConnsPerHost": 0,
                "MaxConnsPerHost": 0,
                "RetryLevel": 0,
                "FCGIConf": {
                    "Root": "/home/work",
                    "EnvVars": {
                        "VarKey": "VarVal"
                    }    
                }
            },
            "CheckConf": {
                "Schem": "http",
                "Uri": "/healthcheck",
                "Host": "example.org",
                "StatusCode": 200,
                "FailNum": 10,
                "CheckInterval": 1000
            },
            "GslbBasic": {
                "CrossRetry": 0,
                "RetryMax": 2,
                "HashConf": {
                    "HashStrategy": 1,
                    "HashHeader": "Cookie:UID",
                    "SessionSticky": false
                }
            },
            "ClusterBasic": {
                "TimeoutReadClient": 30000,
                "TimeoutWriteClient": 60000,
                "TimeoutReadClientAgain": 60000,
                "ReqWriteBufferSize": 512,
                "ReqFlushInterval": 0,
                "ResFlushInterval": -1,
                "CancelOnClientClose": false
            }
        }
    }
}
注解
1. StatusCodeRange
- 响应状态码范围。如果配置了StatusCode,则会忽略此验证条件
 - 合法的配置项举例:
 "3xx","4xx","5xx"其中之一- 特定的HTTP返回码,与StatusCode功能一致
 "|"符号连接的上述 (1)或 (2) 例如:"503|4xx""501|409|30x"