题目:kong-以cassandra作为配置源安装
延续上一篇,《kong-以conf文件作为配置源安装》,本篇主要讲解以数据库作为配置源安装。kong以数据库作为配置源有两种选择,一种是postgreSql,一种是cassandra。主要是基于如下考虑,既然采用数据库作为配置源,若强调参数的集中管控和可视化,可以选用postgreSql,若是强调参数的安全性和兼顾微服务下的无状态,则可以选用cassandra。我这次是打算将网关应用于微服务框架,所以就选择cassandra了,还有一处小私心,我在很久以前玩过postgreSql,所以这次就借机会折腾下cassandra了。
有些内容与之前的一篇有些重叠,主要是不想在做cassandra安装时,还需要参考上一篇内容,所以就适度冗余了,反正都是自己写的。
目录
安装openssl
下载lua-kong-nginx-module
安装OpenResty
安装lua-kong-nginx-module
安装Luarocks
安装kong
安装Cassandra
启动cassandra
操作cassandra
配置kong
启动kong
安装openssl
下载openssl的源码包
cd /opt/app/software/openssl wget -R -O https://www.openssl.org/source/openssl-1.1.1g.tar.gz tar xvzf openssl-1.1.1g.tar.gz
安装,指定安装目录为 /opt/app/openssl。
cd openssl-1.1.1g ./config --prefix=/opt/app/openssl make make install
下载lua-kong-nginx-module
下载此模块,编译OpenResty时会用到。
cd /opt/app/software/kong wget -R -O https://github.com/Kong/lua-kong-nginx-module/archive/0.0.6.tar.gz tar xvzf 0.0.6.tar.gz
安装OpenResty
下载OpenResty的源码包
cd /opt/app/software/kong wget -R -O https://openresty.org/download/openresty-1.15.8.3.tar.gz tar xvfz openresty-1.15.8.3.tar.gz
安装,指定安装目录为 /opt/app/kong/openresty。其中-j2是指所部署服务器的CPU数量,方便进行系统优化,也可以不指定。
cd openresty-1.15.8.3 ./configure -j2 --prefix=/opt/app/kong/openresty --with-pcre-jit --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/opt/app/software/openssl/openssl-1.1.1g --add-module=/opt/app/software/kong/lua-kong-nginx-module-0.0.6/ make -j2 make install
配置环境变量。
cd .. cp openresty.env /opt/app/kong/openresty/ echo "" >> ~/.bashrc echo "# openresty env" >> ~/.bashrc echo ". /opt/app/kong/openresty/openresty.env" >> ~/.bashrc
环境变量文件 openresty.env 内容和格式如下:
# add openresty path export PATH=/opt/app/kong/openresty/bin:/opt/app/openresty/nginx/sbin:$PATH
测试
. ~/.bashrc openresty -h
安装lua-kong-nginx-module
安装lua-kong-nginx-module模块
cd /opt/app/software/kong/lua-kong-nginx-module-0.0.6
make install LUA_LIB_DIR=/opt/app/kong/openresty/lualib
安装Luarocks
luarocks是lua的包管理器,可以对标于python的pip。
下载
cd /opt/app/software/kong curl -R -O https://luarocks.github.io/luarocks/releases/luarocks-3.3.1.tar.gz tar xvfz luarocks-3.3.1.tar.gz
安装,指定安装目录为 /opt/app/kong/luarocks,同时指定使用openresty的luajit。luajit是lua的即时编译环境,简单说就是执行效率更高。
cd luarocks-3.3.1 ./configure --prefix=/opt/app/kong/luarocks --rocks-tree=/opt/app/kong/openresty/luajit --sysconfdir=/opt/config/kong/luarocks --lua-suffix=jit --with-lua=/opt/app/kong/openresty/luajit --with-lua-include=/opt/app/kong/openresty/luajit/include/luajit-2.1 make make install
配置环境变量。
cd .. cp luarocks.env /opt/app/kong/luarocks/ echo "" >> ~/.bashrc echo "# luarocks env" >> ~/.bashrc echo ". /opt/app/kong/luarocks/luarocks.env" >> ~/.bashrc
环境变量文件 luarocks.env 内容和格式如下:
# add luarocks path export PATH=/opt/app/kong/luarocks/bin:$PATH export LUA_PATH="/opt/app/kong/luarocks/share/lua/5.1/?.lua"
测试
. ~/.bashrc luarocks -h
安装kong
安装依赖包。
yum install libyaml libyaml-devel
下载
cd /opt/app/kong wget -R -O https://github.com/Kong/kong/archive/2.0.4.tar.gz tar xvzf 2.0.4.tar.gz
安装,解释一下,make中使用luarocks进行安装,所以无需重新指定安装目录。另外因为 lua-resty-openssl 0.6.2-1 0.4.4-1 版本问题,需要安装两遍 make install。
cd kong-2.0.4 ## for lua-resty-openssl 0.6.2-1 0.4.4-1, you need install twice. make install make install
设置环境变量。
cd /opt/app/software/kong cp kong.env /opt/app/kong/kong-2.0.4 echo "" >> ~/.bashrc echo "# kong env" >> ~/.bashrc echo ". /opt/app/kong/kong-2.0.4/kong.env" >> ~/.bashrc
环境变量文件 kong.env 内容和格式如下:
# add kong path export PATH=/opt/app/kong/kong-2.0.4/bin:$PATH
测试
. ~/.bashrc cd /opt/app/kong/kong-2.0.4 kong -h
将kong的路径放入到lua_path中。始终未找到合适的方式。通过lua_path环境变量设置总是未生效,而又不想修改lua的文件requires的内容。所以这个环节留着以后补充调整吧。
安装Cassandra
在kong的官网上明确,需要cassandra的3.x.x版本,所以就选择了3系列的最新版3.11.6。
下载,这里玩了一下 gpg。以后在项目中可以用下,挺规矩的。
mkdir -p /opt/app/software/cassandra cd /opt/app/software/cassandra wget -R -O https://mirror.bit.edu.cn/apache/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz ## check file gpg --print-md SHA256 apache-cassandra-3.11.6-bin.tar.gz curl -L https://downloads.apache.org/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz.sha256 tar xzvf apache-cassandra-3.11.6-bin.tar.gz
安装,cassandra是直接复制即可。这里创建了一个空文件夹 logs,否则程序启动时会报错,我分析是作者在本机环境中是有的,但在提交git时,由于是空文件夹,默认是不提交的,所以就忽略了。咱就手工给补上。此外还需要配置一下java的内存使用,本来是可以不配置的,cassandra会自动计算。但咱用的环境实在是资源不够用,默认的配置就内存不足了。它的计算是依据总内存,而不是当前的可用内存。所以调整一下,只使用256M。
mkdir -p /opt/app/cassandra cp -r apache-cassandra-3.11.6 /opt/app/cassandra/ ## append logs cd /opt/app/cassandra/apache-cassandra-3.11.6 mkdir logs ## adjust jvm memory bak conf/jvm.options vi conf/jvm.options ### add after "#-Xmx4G" -Xms256M -Xmx256M
启动cassandra
启动cassandra,使用pidfile记录pid。其中 ### 的内容是文件的输出结果。
## start cassandra cd /opt/app/cassandra/apache-cassandra-3.11.6 ### bin/cassandra -p pidfile bin/cassandra ### Node localhost/127.0.0.1 state jump to NORMAL ## open a new session cd /opt/app/cassandra/apache-cassandra-3.11.6/logs tail -f system.log ### Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)...
操作cassandra
这点cassandra的官网不友好,只是记录了如何启动,而不写如何停止。查了一下资料,最终在bin下找到了官方推荐的操作内容。还是stack overflow靠谱啊,主要是写的干货多些。依旧 ### 是说明,在平时使用时,还是通过egrep查进程号后kill -9省事儿些。这点cassandra应该改进下,应通过默认pidfile的方式提供友好停止方式。
## check the status of Cassandra cd /opt/app/cassandra/apache-cassandra-3.11.6 bin/nodetool status ### the status column in the output should report UN which stands for “Up/Normal”. ## connect to the database bin/cqlsh ### exit ## stop cassandra ### `cat bin/stop-server` to see detail cd /opt/app/cassandra/apache-cassandra-3.11.6 ### kill `cat pidfile` pgrep -u `whoami` -f cassandra | xargs kill -9
配置kong
生成kong.yml
cd /opt/app/kong/kong-2.0.4 kong config init ll kong.yml
创建配置文件kong.conf,其中 ### 的内容为文件kong.conf需要修改的内容。这里是采用了database = cassandra。
cp kong.conf.default kong.conf vi kong.conf ### prefix = /opt/app/kong/kong-2.0.4 ### database = cassandra ### declarative_config = /opt/app/kong/kong-2.0.4/kong.yml
[[kong migrations]] == kong migrations
migration不好翻译,没找到贴切的用词,所以用原文了。
kong migrations bootstrap -c /opt/app/kong/kong-2.0.4/kong.conf
启动kong
启动、停止、测试指令如下:
## start cd /opt/app/kong/kong-2.0.4 kong start -c /opt/app/kong/kong-2.0.4/kong.conf ## stop kong stop -p /opt/app/kong/kong-2.0.4 ## test curl -i http://localhost:8001/