前言
Apache APISIX 是国人开源的微服务 API 网关目前发展势头旺盛性能强劲不知道此为何物的可以去 GITHUB 官方仓库文档里看看详细介绍。
系统版本
[rootfjr-ofckv-73-94 supdev]# cat /etc/issueCentOS release 6.10 (Final)
安装套件
注这里源码安装的目录都在 /www/down 内
OpenResty
因为 APISIX 是基于 OpenResty 开发因此这个是必须安装的而且最好安装二进制版本否则会出现一些稀奇古怪的问题比如 OpenSSL 版本低但升级 OpenSSL 后又出现相关 lua 模块少打开控制参数之类的费时费力的问题。
去官网下载二进制版本即可不用满网络搜索。
cd /etc/yum.repos.d/wget https://openresty.org/package/centos/openresty.repoyum -y install openresty
安装成功后会把相关的文件放入 /usr/local/openresty/ 目录内这时看一看下安装版本。
[rootfjr-ofckv-73-94 openresty]# openresty -vnginx version: openresty/1.15.8.3
Etcd
Etcd 在 APISIX 中用来存储相关配置并且 Etcd 天然支持分布式二者搭配可谓是强强联合。
这个直接去官方下除非有梯子否则那叫一个慢这里推荐一个华为开源镜像站搜索 etcd选择最新版本下载安装即可。
wget https://mirrors.huaweicloud.com/etcd/v3.4.7/etcd-v3.4.7-linux-amd64.tar.gztar xf etcd-v3.4.7-linux-amd64.tar.gzcd etcd-v3.4.7-linux-amd64cp -r etcd etcdctl /usr/bin
由于 APISIX 目前使用的是 V2 版本的信息而新版本默认是 V3 的信息因此需要在启动的时候知道 V2 版本。
nohup etcd --enable-v2true Etcd v3 的客户端使用 gRPC 与 server 进行通信通信的消息协议使用 protobuf 进行约定代替了 v2 版本的 HTTP-json 格式使用二进制替代文 本更加节省空间。同时 gRPC 使用的是 HTTP/2 协议同一个连接可以同时处理多个请求不必像 HTTP1.1 协议中多个请求需要建立多个连接 。同时HTTP/2 会对请求的 Header 和请求数据进行压缩编码常见的有 Header 帧用于传输 Header 内容另外就是 Data 帧来传输正文实体 。客户端可以将多个请求放到不同的流中然后将这些流拆分成帧的形式进行二进制传输传输的帧也会有一个编号因此在一个连接中客 户端可以发送多个请求减少了连接数降低了对服务器的压力二进制的数据传输格式也会是传输速度更快。
luarocks
由于 APISIX 使用的是 Lua 语言开发的这就势必用到 lua 相关库因此要用到 luarocks 来安装三方库。一句话luarocks 之于 Lua就像 Composer 之于 PHPGo Modules 之于 Go Maven 之于 Java。
yum install -y luarocks lua-devel
Apache APISIX
wget https://downloads.apache.org/incubator/apisix/1.2/apache-apisix-1.2-incubating-src.tar.gztar xf apache-apisix-1.2-incubating-src.tar.gzcd apache-apisix-1.2-incubating-src
然后依次执行以下命令
# 安装 Lua 模块依赖这一步耗时最长make deps# 初始化运行环境make init# 启动make run
也可以运行 make help 查看相关命令帮助。
[rootfjr-ofckv-73-94 apache-apisix-1.2-incubating]# make helpMakefile rules:help: Show Makefile rules.deps: Installation dependenciesutils: Installation toolslint: Lint Lua source codeinit: Initialize the runtime environmentrun: Start the apisix serverstop: Stop the apisix serververify: Verify the configuration of apisix serverclean: Remove generated filesreload: Reload the apisix serverinstall: Install the apisixtest: Run the test caselicense-check: Check Lua source code for Apache License
至此 APISIX 已成功安装并启动但官方同时为了易用基于 vue 开发了个管理界面需要安装 nodejs、yarn、dashboard。
nodejs
这一步得注意了别直接用系统提供的 node版本太低以致下一步安装 yarn 后提示 nodejs 版本低。同时也别使用高版本因为高版本使用的是 gcc 新版本编译的一旦下载下来运行 ./bin/node 会出现类似于这种的 Requires: libc.so.6(GLIBC_2.14) 提示。
当然了升级 gcc 也是一种尝试。
cd /etc/yum.repos.dwget http://people.centos.org/tru/devtools-2/devtools-2.repoyum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-cmv /usr/bin/gcc /usr/bin/gcc-4.4.7mv /usr/bin/g /usr/bin/g-4.4.7mv /usr/bin/c /usr/bin/c-4.4.7ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gccln -s /opt/rh/devtoolset-2/root/usr/bin/c /usr/bin/cln -s /opt/rh/devtoolset-2/root/usr/bin/g /usr/bin/ggcc --version
下面来安装 nodejs 二进制版本
wget https://nodejs.org/download/release/v11.0.0/node-v11.0.0-linux-arm64.tar.gztar xf node-v11.0.0-linux-arm64.tar.gzln -sf /www/down/node-v11.0.0-linux-arm64/bin/node /usr/bin/node
查看版本
[rootfjr-ofckv-73-94 node-v11.0.0-linux-x64]# node -vv11.0.0
yarn
wget https://github.com/yarnpkg/yarn/releases/download/v1.22.4/yarn-v1.22.4.tar.gztar xf yarn-v1.22.4.tar.gzln -sf /www/down/yarn-v1.22.4/bin/yarn /usr/bin/yarn
查看版本
[rootfjr-ofckv-73-94 node-v11.0.0-linux-x64]# yarn -v1.22.4
dashboard
git clone https://github.com/apache/incubator-apisix-dashboard.gitcd incubator-apisix-dashboard.gitgit submodule update --init --recursiveyarn 在浏览器上输入 http://IP:9080/apisix/dashboard就能看到如下界面
无需输入密码进入后展示
最后再唠叨下若是登陆后页面弹出 401 unauthorized也别慌就差临门一脚了别放弃重新删掉 dashboard再安装下载个再停掉 APISIX再开启再试试应该就成了。
牛刀小试
安装好后来个 demo 体验把。
动态 Upstream
使用过 Nginx 配置过 upstream 都晓得每在 upstream 里添加或摘取个服务地址都需要重启下很不方便若是能动态添加就便利多了也就是通过心跳检测 upstream 里那组服务若有服务故障摘取掉若流量增加那么就添加。这在 APISIX 都不叫事依次点击左侧 Upstream 菜单点击添加按钮进入配置页面。 其中Type 对应的 roundrobin 为轮询模式待会儿设置好后在浏览器上便会把请求依次转发到 80 和 8081 端口。
当然前提是在服务器上启动相关配置。这里使用在 openresty 里添加默认启动 openresty 服务80 端口就可以访问这里只需添加 8081 端口的配置。
server {listen 8081;location / {default_type text/html;content_by_lua_block {ngx.say("Hello World")}}}
启动 openresty访问 8081 端口便会返回 Hello World。
[rootfjr-ofckv-73-94 dashboard]# curl 127.0.0.1:8081Hello World
添加路由
好了动态路由配置好了现在需要在路由那应用了。点击左侧的 Routes 菜单再点击添加按钮进入配置页面。
其中 URIs 里的 index.html 为对外暴露的访问地址Methods 默认为 get 访问。
好了动态 Upstream 和 路由都配置好了这时只需在浏览器地址栏里输入 http://ip:8090/index.html每刷新一次内容就会变一次因为后台设置了轮询模式。