kong 负载均衡的实现

1、需求背景

对于核心 api,需要保证搞可靠性,那么就要对于该 api 有多个 backend service,即实际后端对该 api 有多个服务的节点;那么最好在 api-gateway 即 kong 这一层实现负载均衡;

2、具体的方案

相关的参考链接有:http://www.cnblogs.com/SummerinShire/p/6925308.html ;https://getkong.org/docs/0.11.x/loadbalancing/ ; https://getkong.org/docs/0.11.x/admin-api/#upstream-objects

实际在操作过程中,采用的是 kong 的 Ring-balancer 做负载均衡。

kong 负载均衡的实现_第1张图片
add-upstream.png

添加一个 upstream,该 upstream 的名字是填写在 api 的 upstream_url 中的。

kong 负载均衡的实现_第2张图片
upstream-example.png

1)具体的例子,例如有一个 api

kong 负载均衡的实现_第3张图片
upstream-instance.png

其 upstream_url 填写的是 test-upstreams,那么在 test-upstreams 的配置中,给 test-upstreams 配置了两个 target,权重都是 100

kong 负载均衡的实现_第4张图片
targets.png

这样就完成了一个 api 的负载均衡。

2)测试的 nginx.conf

worker_processes  auto;        #nginx worker 数量
events {
    worker_connections 1024;
    use epoll;
}
pid /home/work/var/kong-test/nginx.pid;
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for" '
        '$request_time';
    access_log logs/access.log main;
    error_log logs/error.log notice;
    keepalive_timeout  65;
    server {
        listen 8999;
        server_name 999;
        default_type application/json;
        root /home/work/app/nginx-upstream/;
        location / {
            return 999;
        }
    }
    server {
        listen 8988;
        server_name 998;
        default_type application/json;
        root /home/work/app/nginx-upstream/;
        location / {
            return 998;
        }
    }
}

测试结果:

kong 负载均衡的实现_第5张图片
test1.png
kong 负载均衡的实现_第6张图片
test2.png

你可能感兴趣的:(kong 负载均衡的实现)