基于DNS的负载均衡
注:不了解DNS负载均衡的百度一下
1.如何启用DNS均衡负载
当kong服务中的host属性不是ip,不是上游的名称,也无法被本地host解析为ip,kong便会使用基于DNS的均衡负载策略
- Kong会优先使用DNS服务器返回的端口,即使你Kong服务设置了端口为123,但DNS返回的端口是456,那么会使用456
2.DNS解析方式
DNS有如下2中解析方式(好像不止)
1)A记录:使用轮询策略,即每条记录(IP)被解析到的概率都是相等的
2)SRV记录:每天记录具有权重,被解析的概率与权重成比
基于环形均衡器的负载均衡
当服务的host为上游对象名称时,将使用环形负载均衡。每个Kong上游对象都有一个环形均衡负载器,其在多个目标节点之间进行均衡负载
1.上游对象
1)上游对象的Slots(插槽)属性
Slots属性用于均衡负载,每个目标都会随机分布在插槽上,我们推荐每个目标都有100个插槽,如我们预期(注意,预期,即使现在只有2个目标)有8个目标,那么Slots应设置为800
2)不应修改上游对象
修改上游的成本较高,需要重新构建插槽,我们推荐删除然后添加的方式代替修改
2.目标节点
删除目标节点的最好方式是将权重设为0,Kong会在合适的时机移除目标节点
健康监测
Kong上游对象中可以开启健康监测,默认为不开启
1.健康监测类型
Kong有2中健康监测类型,选项卡Active health checks和Passive health checks分别针对主动健康监测和被动健康监测的配置
1)主动健康监测
Kong定期向目标节点发送请求,以此监测目标的状态,并随时更新目标节点的状态为[健康]或者[不健康],不健康状态的节点将不能参与均衡负载,主动健康监测可以将不健康的节点更新为健康状态
2)被动健康监测
Kong在转发请求过程中,通过目标返回的状态码来监测目标的状态,并随时更新目标节点的状态为[健康]或者[不健康],不健康状态的节点将不能参与均衡负载,被动健康监测只能手动更新不健康的节点为健康状态
2.开启主动健康监测
如下是主动健康监测的相关属性
Unhealthy HTTP failures :失败多少次被判断为不健康
Unhealthy interval:不健康的目标多久监测一次其健康状态(秒)
HTTP path:健康监测HTTP API
Timeout :连接超时时间(秒)
Healthy interval:健康的目标节点多久监测一次其健康状态(秒)
Healthy successes:成功多少次可以判断为健康
Kong集群
Kong作为微服务网关,其也是可以集群的,我们将多个kong都指向一个数据库即可完成kong的集群
1.相关配置
db_update_frequency:kong与数据库进行数据同步的时间间隔默认5秒
2.均衡负载
Kong的均衡负载可借助DNS均衡负载(需要每个kong都有独立的ip地址)或者LVS实现,后面介绍LVS均衡负载
Kong参数优化
1.reuseport(复用端口)
开启reuseport可以提高QPS(每秒查询率)(有什么弊端我不知道,书上没说明白),如下配置开启
proxy_listen = 0.0.0.0:80 reuseport, 0.0.0.0:443 ssl reuseport
2.客户端与kong服务器长连接
每次HTTP请求使用一个TCP连接为短连接,多次HTTP请求使用一个TCP连接为长连接。HTTP的Connection为keep-alive时表示使用长连接,目前HTTP 1.1 及以上默认使用长连接,如下kong的相关配置
# 单个长连接可以请求的数量
nginx_http_keepalive_requests = 100
# 长连接空闲超时时间
nginx_http_keepalive_timeout = 75s
3.Kong服务器与上游服务器长连接
# 单个长连接可以请求的数量
nginx_upstream_keepalive_requests = 100
# 长连接空闲超时时间
nginx_upstream_keepalive_timeout = 60s