基於Lua的Spring Cloud閘道器高可用通用Ngnix外掛
專案github地址:點選跳轉
場景痛點
在Spring Cloud微服務架構體系中,我們往往會部署一個Zuul叢集來橫向擴充套件我們的微服務應用,叢集的上層是Nginx軟負載,在實際情況中,往往會遇到Zuul宕機的尷尬事情,這時候從Nginx到這臺機器的請求就會全部失效。此專案針對此痛點,用lua指令碼實現定時拉取特定服務地址,動態無感知增減Zuul在Nginx中的負載節點。
如果您希望實現從Nginx直接到普通服務的動態節點負載,在下文配置服務名與Eureka註冊中心地址即可。
OpenResty安裝與配置
1、環境
yum -y install readline-devel pcre-devel openssl-devel gcc
2 、下載解壓OpenResty包
wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
tar -zxvf openresty-1.13.6.1.tar.gz
3、下載ngx_cache_purge模組,該模組用於清理nginx快取
cd openresty-1.13.6.1/bundle
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
4、下載nginx_upstream_check_module模組,該模組用於upstream健康檢查
wget https://github.com /yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
tar -zxvf v0.3.0.tar.gz
5、OpenResty配置增加
cd openresty-1.13.6.1
./configure --prefix=/usr/servers --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2
6、編譯安裝
make
make install
7 、OpenResty沒有http模組,需要單獨安裝
cd /usr/servers/lualib/resty
wget https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http_headers.lua
wget https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http.lua
8、專案指令碼拷貝到這裡
copy dynamic_eureka_balancer.lua into this dir
9、Nginx配置檔案
vim /usr/servers/nginx/conf/nginx.conf
Nginx配置
http {
#sharing cache area
lua_shared_dict dynamic_eureka_balancer 128m;
init_worker_by_lua_block {
-- init eureka balancer
local file = require "resty.dynamic_eureka_balancer"
local balancer = file:new({dict_name="dynamic_eureka_balancer"})
--eureka server list
balancer.set_eureka_service_url({"127.0.0.1:8888", "127.0.0.1:9999"})
--The service name that needs to be monitored
balancer.watch_service({"zuul", "client"})
}
upstream springcloud_cn {
server 127.0.0.1:666; # Required, because empty upstream block is rejected by nginx (nginx+ can use 'zone' instead)
balancer_by_lua_block {
--The zuul name that needs to be monitored
local service_name = "zuul"
local file = require "resty.dynamic_eureka_balancer"
local balancer = file:new({dict_name="dynamic_eureka_balancer"})
--balancer.ip_hash(service_name) --IP Hash LB
balancer.round_robin(service_name) --Round Robin LB
}
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://springcloud_cn/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
相關推薦
基於Lua的Spring Cloud閘道器高可用通用Ngnix外掛
專案github地址:點選跳轉 場景痛點 在Spring Cloud微服務架構體系中,我們往往會部署一個Zuul叢集來橫向擴充套件我們的微服務應用,叢集的上層是Nginx軟負載,在實際情況中,往往會遇到Zuul宕機的尷尬事情,這時候從Nginx到這臺
閘道器高可用之keepavlived全流程(安裝/配置/驗證/解析)
1.場景描述 因為要做閘道器的高可用,用到了keepalived+nginx,來保證nginx的高可用。(微服務時代之閘道器及註冊中心高可用架構設計),如下圖: 安裝了keepavlived,走了一些彎路,記錄下吧,nginx的安裝就不多說了,自己部落格已經介紹了好幾篇了。 2. 解決方案 2.1 安裝k
混合雲端儲存組合拳:基於雲端儲存閘道器與混合雲備份的OSS資料備份方案
前言阿里雲物件儲存(OSS)使用者眾多。很多使用者因為業務或者合規性需求,需要對OSS內的資料做備份,無論是線上備份,還是線下備份。使用者可以選擇使用OSS的開放API,按照業務需求,做資料的備份,也可以選擇OSS已有的服務進行資料備份,比如OSS的跨域複製。但是,前一種方式,存在易用性和備份效率問題;後一種
spring cloud 閘道器路由資訊動態配置
一、遠端git倉庫 api-gateway-dynamic.properties zuul.routes.api-a.path=/feign/** zuul.routes.api-a.service
spring cloud 閘道器路由
zuul.routes.stat.path=/s/** zuul.routes.stat.service-id = s1 zuul.routes.app.path=/a/** zuul.routes.a
spring cloud : 閘道器Zuul(過濾:安全、監控、限流、路由)
單點搭建注意:藍色虛線代表註冊;綠色虛線代表呼叫、紅色虛線代表心跳1. 新增依賴建立專案tcloud-gateway-zuulserver , pom.xml內容如下<project xmlns="http://maven.apache.org/POM/4.0.
spring cloud 閘道器服務
微服務 閘道器服務 閘道器服務是微服務體系裡面重要的一環。 微服務體系內,各個服務之間都會有通用的功能比如說:鑑權、安全、監控、日誌、服務排程轉發。這些都是可以單獨抽象出來做一個服務來處理。所以微服務閘道器應運而生。其主要作用作為微服務體系裡面流量的唯一入口去做一些功能的實現。 微服務的閘道器擔當的主要職責可
Angular SPA基於Ocelot API閘道器與IdentityServer4的身份認證與授權(四)
在上一講中,我們已經完成了一個完整的案例,在這個案例中,我們可以通過Angular單頁面應用(SPA)進行登入,然後通過後端的Ocelot API閘道器整合IdentityServer4完成身份認證。在本講中,我們會討論在當前這種架構的應用程式中,如何完成使用者授權。 回顧 《Angular SPA基於Oc
基於spring-cloud-zuul的路由閘道器設定
由於微服務的日益增多,管理也會不方便,所以需要一個可以集中管理所有服務的功能(類似sevelet的filter),可以在此做同一的許可權入口管理 新建一個模組spring-cloud-gateway 增加zuul及相關依賴如下: pom.xml <?xml vers
Spring Cloud Zuul(基於Netflix Zuul實現的API閘道器元件)
--p219 Spring Cloud Zuul提供了一套過濾器機制 開發者可以通過使用Zuul來建立各種校驗過濾器機制..... 簡述通過Zuul實現的API閘道器服務的構建過程? --p220 1,建立一個基礎的Spring Boot工程
微服務時代之閘道器及註冊中心高可用架構設計
1. 微服務關係架構圖 簡要說明: (1)所有應用或者服務要想對外提供服務(包括閘道器),必須首先到註冊中心進行註冊。 (2)所有訪問通過服務閘道器進行訪問,然後由服務閘道器路由到對應服務中心進行互動訪問。 2. 閘道器及註冊中心高可用架構圖 2.1 springcloud eureka高可用方案 由上圖
Spring Cloud(八)Zuul路由閘道器
文章目錄 1 概述 1.1 什麼是Zuul 1.2 為什麼要建造Zuul 1.3 Zuul有哪些功能 1.4 理解 2 Zuul路由功能 2.1 建立zuul服務 2.2 測試 2
Spring基礎:快速入門spring cloud(4):API閘道器之Zuul
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
spring cloud: zuul: 微閘道器-簡單使用與路由配置
spring cloud: zuul: 微閘道器-簡單使用與路由配置 首先引入依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo
Spring Cloud Zuul(API閘道器服務)(3)
過濾器 在Spring Cloud Zuul中實現的過濾器必須包含4個基本特徵:過濾型別,執行順序,執行條件,具體操作。這就是ZuulFilter介面中定義的4個抽象方法: public abstract String filterType(); public abst
Spring Cloud Zuul(API閘道器服務)(2)
路由詳情 傳統路由配置 傳統路由配置方式就是在不依賴與服務發現機制的情況下,通過在配置檔案中具體指定每個路由表示式與服務例項的對映關係來實現API閘道器對外部請求的路由。 單例項配置:通過zuul.routes.<route>.path與zuul.routes.<r
Spring Cloud Zuul(API閘道器服務)(1)
API閘道器是一個智慧的應用伺服器,它的定義類似於面向物件設計模式中的Facade模式,它的存在就像是整個微服務架構系統的門面一樣,所有的外部客戶端訪問都需要經過他來進行排程和過濾。它除了要實現請求路由,負載均衡,校驗過濾等功能之外,還需要更多能力,比如與服務治理框架的結合,請求轉發時的熔斷機制
spring cloud: zuul(二): zuul的serviceId/service-id配置(微閘道器)
spring cloud: zuul(二): zuul的serviceId/service-id配置(微閘道器) zuul: routes: #路由配置表示 myroute1:
spring-cloud(五)路由閘道器(zuul)(Finchley版本)
在微服務架構中,需要幾個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧路由、配置管理等,由這幾個基礎元件相互協作,共同組建了一個簡單的微服務系統 在Spring Cloud微服務系統中,一種常見的負載均衡方式是,客戶端的請求首先經過負載均衡(zuul、
Spring Cloud學習筆記18——API 閘道器
API 閘道器是一套主要用於統一API入口的應用元件,可以管理所有的API,形成一個API的入口 API閘道器的意義 集合多個API 統一API入口 API閘道器所帶來的好處 避免將內部資訊洩露給外部 為微服務新增額外的安全層 支