php实战kong做微服务架构七(集群)
序言
通过前文的讲解,相信大家对于kong的应用有了更多了解。本篇将进一步提高服务扩展,讲解kong集群部署。
kong集群
kong允许我们在多台计算机部署kong服务,以提高水平扩展。在整个过程中所有节点将共享数据库,但为了进一步提高性能,所有节点将在内存中存储配置信息,例如(服务、路由、插件等)。
看到这里大家有没有想到什么呢?
各个节点都保存了一份数据,如果A节点删除,那么其它节点同步问题怎么办?
节点同步
kong通过定时轮询节点查询数据库,同步更新数据。
同步机制-定时轮询
kong提供了
db_update_frequency
配置项让我们来配置节点之间同步时间,单位秒(系统默认5s)。
通过配置
db_update_frequency
,在到达指定时间后,kong的所有运行中节点都会主动轮询数据库是否更新,从而同步自己内存中的信息。
同步机制-过期时间
如果你觉得上面的时间太久,担心其它节点在旧数据更新慢,那么可以设置
db_cache_ttl
,单位秒。
db_cache_ttl
它将给内存中的缓存信息设置生存时间,当这个时间到期,缓存内容将被清除,同时将会从数据库中重新获取。
集群部署
多节点kong部署
如何开启kong服务,在第一篇文章有写到,大家可参考:php实战kong做微服务架构一(kong简介与安装)
小伙伴们只需在你的不同主机上安装kong开启即可。
kong各节点连接数据库
例如我这里连接某台数据服务器,各节点共享相同数据。
vi /etc/kong/kong.conf 修改以下内容
pg_host = 23.102.211.112 #数据库主机地址
pg_port = 5432 #数据库端口
pg_user = kong #数据库登录用户名
pg_password = kong #数据库登录密码
pg_database = kong #数据库名
对kong节点设置负载均衡
通过你的nginx去代理它们吧~可以设置最少连接优先。
upstream kong {
least_conn;
server 23.124.111.122:8000;
server 123.14.161.172:8000;
}
运行效果
添加A节点
curl -i -X POST --url http://23.124.111.122:8001/apis/ --data 'name=api1' --data 'uris=/api2.html' --data 'upstream_url=http://cul.com'
B节点查询
curl http://123.14.161.172:8001/apis/
{
"total": 1,
"data": [{
"created_at": 1623747576534,
"strip_uri": true,
"id": "kdi394855-odi3-9876-sk87-309sije765e4",
"uris": ["\/api1.html"],
"name": "api1",
"http_if_terminated": false,
"https_only": false,
"retries": 5,
"preserve_host": false,
"upstream_connect_timeout": 60000,
"upstream_read_timeout": 60000,
"upstream_send_timeout": 60000,
"upstream_url": "http:\/\/cul.com"
}]
}
添加B节点
curl -i -X POST --url http://123.14.161.172:8001/apis/ --data 'name=api2' --data 'uris=/api2.html' --data 'upstream_url=http://cul.com'
A节点查询
curl http://23.124.111.122:8001/apis/
{
"total": 2,
"data": [{
"created_at": 1623747576534,
"strip_uri": true,
"id": "kdi394855-odi3-9876-sk87-309sije765e4",
"uris": ["\/api1.html"],
"name": "api1",
"http_if_terminated": false,
"https_only": false,
"retries": 5,
"preserve_host": false,
"upstream_connect_timeout": 60000,
"upstream_read_timeout": 60000,
"upstream_send_timeout": 60000,
"upstream_url": "http:\/\/cul.com"
}, {
"created_at": 1623747576656,
"strip_uri": true,
"id": "9384iu37-i873-938y-u873-odk92847g646",
"uris": ["\/api1.html"],
"name": "example-api2",
"http_if_terminated": false,
"https_only": false,
"retries": 5,
"preserve_host": false,
"upstream_connect_timeout": 60000,
"upstream_read_timeout": 60000,
"upstream_send_timeout": 60000,
"upstream_url": "http:\/\/cul.com"
}]
}