kong添加upstream

  • 整理的文档比较早,kong版本可能是0.10.3版本。详情请看官网最新文档

准备

使用kong代理后端请求
1.开放几个接口如下:
本地请求1:http://aaa.wyc.com:8888/aaa

返回:server_name:aaa.wyc.com,port:8888

本地请求2:http://aaa.wyc.com:8889/aaa

返回:server_name:aaa.wyc.com,port:8889

。。。

向kong注册后端请求

1.向kong里添加一条转发,将uri为/test的请求转发到本地请求request1
规则如下:

curl -i -X POST \
  --url http://127.0.0.1:8001/apis/ \
  --data 'name=wyc' \
  --data 'uris=/test' \
  --data 'upstream_url=http://aaa.wyc.com:8888/aaa' \
  --data 'preserve_host=true' \
  --data 'strip_uri=true'

然后请求http://localhost:8000/test,返回server_name:aaa.wyc.com,port:8888,说明添加成功。

2.在kong里添加一个名为test_v1的upstream

curl -i -X POST \
  --url http://127.0.0.1:8001/upstreams/ \
  --data 'name=test_v1' \
  --data 'slots=10'

生成:

{
    "orderlist": [
        1,
        6,
        7,
        8,
        2,
        4,
        10,
        5,
        9,
        3
    ],
    "slots": 10,
    "id": "6beedc5d-87fc-4382-92be-1dc752f28383",
    "name": "test_v1",
    "created_at": 1505217458404
}

3.在以上生成的upstream中添加target

curl -i -X POST \
  --url http://127.0.0.1:8001/upstreams/test_v1/targets \
  --data 'target=aaa.wyc.com:8888' \
  --data 'weight=10'

生成:

{
    "target": "aaa.wyc.com:8888",
    "id": "479dbc3a-74fe-47e7-b7b5-3ff188f5c08a",
    "weight": 10,
    "created_at": 1505269393596,
    "upstream_id": "6beedc5d-87fc-4382-92be-1dc752f28383"
}

如果要删除某个target,则将其weiget设置为0

curl -i -X POST \
  --url http://127.0.0.1:8001/upstreams/test_v1/targets \
  --data 'target=aaa.wyc.com:8888' \
  --data 'weight=0'

查看正常活跃的target:

curl -i -X GET \
  --url http://127.0.0.1:8001/upstreams/test_v1/targets/active

kong的upstreams配置来负载均衡

1.修改request1的upstream为test_v1

{
    "http_if_terminated": true,
    "id": "d7685fd9-4caa-4f61-9b2c-8cc874ebc4d9",
    "retries": 5,
    "preserve_host": false,
    "created_at": 1496395744000,
    "upstream_connect_timeout": 60000,
    "upstream_url": "http://test_v1/aaa",
    "upstream_read_timeout": 60000,
    "upstream_send_timeout": 60000,
    "https_only": false,
    "strip_uri": true,
    "uris": [
        "/test"
    ],
    "name": "wyc",
    "hosts": {}
}

然后重复执行上面步骤:
请求http://localhost:8000/test,返回server_name:aaa.wyc.com,port:8888。代理请求成功。

2.在upstream(test_v1)中再添加两条target

{
    "data": [
        {
            "weight": 10,
            "id": "66e30dcb-f504-408c-8269-fc86cbdc9cc6",
            "target": "aaa.wyc.com:8890",
            "created_at": 1505285074670,
            "upstream_id": "6beedc5d-87fc-4382-92be-1dc752f28383"
        },
        {
            "weight": 10,
            "id": "e4c20a71-50d6-4b0e-989b-67f04758dbcb",
            "target": "aaa.wyc.com:8889",
            "created_at": 1505285069882,
            "upstream_id": "6beedc5d-87fc-4382-92be-1dc752f28383"
        },
        {
            "weight": 10,
            "id": "cc79f82f-d9d8-4a8a-9dbd-9cb59f35f078",
            "target": "aaa.wyc.com:8888",
            "created_at": 1505273186303,
            "upstream_id": "6beedc5d-87fc-4382-92be-1dc752f28383"
        }
    ],
    "total": 3
}

三个target的权重相同,应该轮流返回如上接口返回的信息。但是结果貌似不对:
https://github.com/Mashape/kong/issues/2887

实际测试:请求kong总是代理请求到upstream的其中一个target,例如:aaa.wyc.com:8889.
如果将aaa.wyc.com:8889所在服务down掉,kong将自动选择其他的健康的节点,将请求代理过去。

用consul配置kong负载均衡和服务发现

健康检查

1.https://github.com/openresty/lua-resty-upstream-healthcheck
官方提供的健康检查,使用http方式定时调用,需要对应的上游服务器暴露一个api来验证。

将上述的接口放在test_v1的upstream中:

upstream test_v1 {
    server 127.0.0.1:8889;
    server 127.0.0.1:8890;
    server 127.0.0.1:8891 backup;
}

定义一个status的location查看upstream状态:

Nginx Worker PID: 45014
Upstream test_v1
    Primary Peers
        127.0.0.1:8889 up
        127.0.0.1:8890 up
    Backup Peers
        127.0.0.1:8891 up

将其中一个upstream去除:server 127.0.0.1:8890;返回结果:

Nginx Worker PID: 45160
Upstream test_v1
    Primary Peers
        127.0.0.1:8889 up
        127.0.0.1:8890 DOWN
    Backup Peers
        127.0.0.1:8891 up

2.https://github.com/upyun/lua-resty-checkups

3.https://github.com/upyun/slardar

posted @ 2019-02-18 10:43  mentalidade  阅读(4321)  评论(0编辑  收藏  举报