Kong安装以及Nginx配置优化调整

时间记录:2019-6-25
kong是一款微服务API网关平台,内部集成了nginx但是其默认配置不够好,在做负载均衡的时候不能发挥最大性能,kong支持自定义的nginx的配置,最近在了解kong的启动优化和相关配置文件的加载过程,在此做个记录。
此文做一下几点概述:kong的安装kong的启动
1:kong的安装
kong官方安装教程链接
这里我选择centos安装,kong的启动可以使用数据库也可以不使用数据库,这里我选择了数据postsql(postgres)
首先安装kong

sudo yum update -y
sudo yum install -y wget
wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo
export major_version=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d "." -f1`
sed -i -e 's/baseurl.*/&\/centos\/'$major_version''/ bintray-kong-kong-rpm.repo
sudo mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
sudo yum update -y
sudo yum install -y kong

注意:上述步骤主要是配置yum的repo源,会生成bintray-kong-kong-rpm.repo文件,然后install的时候会去寻找对应的文件

/etc/yum.repos.d/bintray-kong-kong-rpm.repo

yum使用中遇到的问题:我使用的是vmware的centos7的虚拟机,然后yum提示证书过期,是由于虚拟机的系统时间异常导致的,将系统的时间通过date -s XXX调整就可以了。这里可以研究下https的证书验证流程
再安装postgres
postgres官方安装教程链接

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql95
/*官网上这里给的是自行选择,这里不安装postgresql95-setup会找不到,不能初始化*/
yum install postgresql95-server
/*初始化数据库,这里的路径可能不一样需要自己修改,初始化如果提示文件已存在,需要将/var/lib/pgsql/9.5/data/下删除*/
/usr/pgsql-9.5/bin/postgresql95-setup initdb 
systemctl enable postgresql-9.5 
systemctl start postgresql-9.5

创建kong用户和kong数据库

su postgres
psql
create role kong login;
create database kong owner kong;

查看自己创建的数据库和用户

\du
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 kong      |                                                            | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

\l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 kong      | kong     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

退出 \q exit
注意:这里的用户名和数据库必须为kong,且有登录权限
启动kong

 kong migrations bootstrap
 kong start

2:kong的启动配置
kong的配置主要分为GENERALNGINXDATASTOREDATASTORE CACHEDNS RESOLVERTUNING & BEHAVIORDEVELOPMENT & MISCELLANEOUS 方面

kong.conf.default
kong的启动配置文件在 /etc/kong/kong.conf.default 下,这个配置文件是由konglua脚本生成的(lua位置 /usr/local/share/lua/5.1/kong/ ) 下,手动修改conf文件是没有用的,重启后会直接被覆盖。

nginx.conf
由配置的kong.conf.default文件会生成对应的nginx.conf文件,所以这个文件手动修改也是会被覆盖的

kong的启动提供了 –nginx-conf -c两个参数可以指定配置文件

自定义kong.conf.default文件
在相同文件夹下,复制源文件,打开后找到需要修改的内容删除#后修改内容即可,具体的值修改参考官方的文档(配置参数链接)

cp /etc/kong/kong.conf.default /etc/kong/kong.conf
------------------------------------------------------------------------------------------------------------------------------
nginx_worker_processes = 1   # Determines the number of worker processes
                                 # spawned by Nginx.
                                 #
                                 # See http://nginx.org/en/docs/ngx_core_module.html#worker_processes
                                 # for detailed usage of the equivalent Nginx
                                 # directive and a description of accepted
                                 # values.
类似于这样的修改

自定义nginx.conf文件
新建文件custom_nginx.template在你的kong目录下即nginx.conf位置

/usr/local/kong/custom_nginx.template
复制nginx.conf的内容到custom_nginx.template,然后即可自定义内容,参考nginx的配置
------------------------------------------------------------------------------------------------------------------------------
# ---------------------
# custom_nginx.template
# ---------------------

worker_processes 1; # can be set by kong.conf
daemon on;                     # can be set by kong.conf

pid pids/nginx.pid;                      # this setting is 强制的
error_log logs/error.log notice; # can be set by kong.conf

events {
    use epoll; # custom setting
    multi_accept on;
}

http {
    # include default Kong Nginx config
    include 'nginx-kong.conf';

    
}
类似于这个样子

其余的配置不做说明了,这里我主要的是nginx的配置,具体的配置参数如下
nginx官方核心参数配置解释

/---main-----/
worker_processes 2; // 工作进程数一般为核数性能最佳
worker_cpu_affinity 01 10; // 核数为位数从右到左为第几个核,0不启用,1启用,进程对应核
thread_pool name threads=number [max_queue=number]; //用于多线程读取和发送文件而不阻塞 工作进程的命名线程池,默认32个线程队列数65536个
timer_resolution interval; //减少工作进程中的计时器间隔,从而减少gettimeofday()系统调用的次数。默认情况下,gettimeofday()每次收到内核事件时都会调用。间隔降低,gettimeofday()每次指定只调用一次interval。
worker_rlimit_core size; // 每个worker最大能打开的核心文件数
worker_rlimit_nofile number; // 进程的最大打开文件数限制
daemon on | off; // 确定nginx是否应该成为守护进程,即脱离终端后台运行

/---events-----/
use epoll; 
multi_accept on/off; // 关闭则工作进程将一次接受一个新连接。开启则工作进程将尽可能多的接受连接
accept_mutex on/off; // 开启则工作进程将依次接受新连接,关闭则会通知所有的工作进程,进行抢夺,造成不必要的资源浪费
worker_connections  102400;// 每个工作进程的最大连接数
accept_mutex_delay 500; // accept_mutex开启,指定当另一个工作进程当前正在接受新连接时,工作进程将尝试重新启动接受新连接的最长时间,默认500毫秒(获取文件锁的等待时间)
worker_aio_requests number;

基本上的安装和配置如上,其余的内容还需要深入了解代码。
时间记录:2019-6-25

你可能感兴趣的:(Kong安装以及Nginx配置优化调整)