初识 Kong 之负载均衡

使用 Kong Community Edition(社区版 v1.3.0)来搭建一个负载均衡器,由于 Kong 是基于 Openresty 的,而 Openresty 又是 Nginx 的二次封装,所有很多配置项和 Nginx 类似。

来看一个较为典型的 Nginx 负载均衡配置

upstream hello {
    server localhost:3000 weight=100;
    server localhost:3001 weight=50;
}

server {
    listen  80;
    location /hello {
        proxy_pass http://hello;
    }
}

nginx 监听来自本地 80 端口的请求,如果路径与 /hello 匹配,便将请求原封不动的转发到名称为 hello 的upstream,而该 upstream 我们配置了一个负载均衡器,会路由到本地的 3000 端口和 3001 端口。

@SpringBootApplication
@RestController
public class KongDemoApplication {

   public static void main(String[] args) {
      System.setProperty("server.port","3000");
      //System.setProperty("server.port","3001");
      SpringApplication.run(KongDemoApplication.class, args);
   }

   @RequestMapping("/hi")
    public String port(){
       return System.getProperty("server.port");
    }

}

启动两个 server 分别监听本地 3000 端口和 3001 端口。

如何你的机器已经安装好了 Kong,并对 Kong 的 admin api 有了基础的认识,接下来便可以针对 Kong 进行负载均衡的配置了。

配置 upstream 和 target

创建一个名称 hello 的 upstream

curl -X POST http://localhost:8001/upstreams --data "name=hello"

为 hello 添加两个负载均衡节点

curl -X POST http://localhost:8001/upstreams/hello/targets --data "target=localhost:3000" --data "weight=100"
curl -X POST http://localhost:8001/upstreams/hello/targets --data "target=localhost:3001" --data "weight=50"

如上的配置对应了 Nginx 的配置

upstream hello {
    server localhost:3000 weight=100;
    server localhost:3001 weight=50;
}

配置 service 和 route

使用老版本 Kong 的用户可能会接触过 api 这个概念,但是在 Kong v1.3.0 中,已经被废除了,取而代之的是 service 和 route 的配置。

配置一个 service

curl -X POST http://localhost:8001/services --data "name=hello" --data "host=hello"

host 的值便对应了 upstream 的名称,配置成功后会返回生成的 service 的 id,我的返回结果:8695cc65-16c1-43b1-95a1-5d30d0a50409

为上面的 service 配置路由信息

curl -X POST http://localhost:8001/routes --data "paths[]=/hello" --data "service.id=8695cc65-16c1-43b1-95a1-5d30d0a50409"

请求路径包含 /hello 的请求都会被转移到对应的 service 进行处理。

如上的配置便对应了

location /hello {
    proxy_pass http://hello;
}

测试 Kong 的负载均衡

curl http://localhost:8000/hello/hi

因为复杂均衡的原因,需要多测试几次,多次 curl 之后结果如下:

3000
3000
3000
3000
3000
3000
3001
3001
3001
3000
3001

参考文档

https://getkong.org/docs/0.13.x/loadbalancing/

https://getkong.org/docs/0.13.x/configuration/

原文发布于微信公众号 - Kirito的技术分享(cnkirito)

原文发表时间:2018-04-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

Redis简介以及和其他缓存数数据库的区别

Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

13920
来自专栏JavaEdge

JVM源码分析之synchronized1 字节码实现2 偏向锁

javap命令生成的字节码中包含 ** monitorenter ** 和 ** monitorexit **指令

9430
来自专栏开源优测

[接口测试 - 基础篇] 12 还是要掌握python日志管理模块的

python logging模块介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的...

37980
来自专栏jiajia_deng

Qt 5.11.1 静态编译

离线安装包:http://download.qt.io/archive/qt/5.11/5.11.1/

1.5K20
来自专栏SpringBoot 核心技术

第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费

409150
来自专栏乐百川的学习频道

做一个自动配置JDK环境变量的Powershell脚本

本来想把这篇的内容包括在我的Powershell系列文章之内的,后来写完之后才想起来,这时候我已经复制粘贴到简书、CSDN和SegmentFault三个地方了。...

27050
来自专栏jeremy的技术点滴

netty3与netty4的区别

1.5K40
来自专栏乐百川的学习频道

Spring学习笔记 Spring Roo 简介

一直以来,Java/Spring开发被认为是笨重的代表,无法快速生成项目原型和骨架。所以,Spring推出了Spring Roo这个项目,帮助我们快速生成项目原...

30470
来自专栏http://www.cnblogs.com

centos6.5编译安装php7

1.安装依赖软件库:   yum install -y libxml2-devel libtool* curl-devel libjpeg-devel libp...

512110
来自专栏王清培的专栏

spring rest 容易被忽视的后端服务 chunked 性能问题

spring boot 容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 背景 sp...

54480

扫码关注云+社区

领取腾讯云代金券