天天看點

keepalived+Nginx實作高可用叢集

從單體到叢集(1) - 使用Nginx配置靜态資源并搭建Tomcat叢集

從單體到叢集(2) - keepalived+Nginx實作高可用叢集

從單體到叢集(3) - LVS+Keepalived+Nginx實作高可用叢集負載均衡

--------------------------------------------------------------------------------------------------------------------------

軟體版本:

       IDAE:2019.2.2

       VMware:12.5.2

       虛拟機鏡像:CentOs7.3标準版

       Xshell:Xshell6

       Postman:7.33.1

       Tomcat:8.5.41

       Nginx:1.18.0穩定版

       keepalived:2.0.18

       項目素材連結放上,需要的朋友請自行下載下傳。背景項目為​​foodie-dev​​,前端項目有兩個,​​foodie-shop​​為前端商城主體項目,​​foodie-center​​為前端商城個人中心項目。具體項目配置的話可以看下我的上篇博文架構篇:從單體到高可用叢集(1) - 使用Nginx配置靜态資源并搭建Tomcat叢集

       在上篇博文中,我們項目的架構由單體Tomcat部署前背景三個項目,演變成了由Nginx為靜态資源提供服務同時将請求轉發到後面的兩個Tomcat叢集上。上篇博文中的項目架構:

keepalived+Nginx實作高可用叢集

       這樣确實保證了背景服務不會因為單節點Tomcat當機而導緻整體服務崩潰,但這樣也有一個問題,用單節點Nginx為tomcat叢集作轉發,萬一Nginx挂了怎麼辦?是以我們今天的目标就是為單節點的Nginx搭建叢集,確定Nginx的高可用。我們的目标架構如下:keepalived+Nginx高可用叢集(雙主熱備模式)

       我們先來了解一下主備模式:

keepalived+Nginx實作高可用叢集

       可以明顯的看到主備模式的缺點,假設主機永遠不當機的話,備機一直處在待機模式,無法響應客戶的請求,造成資源的浪費。下面我們要說的雙主熱備模式就可以解決這個問題,主備是雙主熱備的前提,是以我們先來配置一下主備模式。配置之前我們首先要再去建立一台Nginx虛拟機配置靜态資源服務和搭建兩台Tomcat叢集,建立的步驟省略,不懂的小夥伴可以參考我上篇博文架構篇:從單體到高可用叢集(1) - 使用Nginx配置靜态資源并搭建Tomcat叢集。目前四台虛拟機是已經配置好了:

keepalived+Nginx實作高可用叢集

       接下來我們把keepalived安裝包上傳到/home/software路徑下,用tar指令解壓:

       進入剛解壓出的目錄,配置并生成Makefile

       然後執行make和make install

       這樣keepalived我們就安裝好了

       進入/etc/keepalived路徑,打開配置檔案,修改配置檔案内容為:

       儲存退出後,去/usr/local/keepalived/sbin路徑下啟動keepalived:

       之後用ip addr指令檢視一下,可以看到ens33網卡下生成配置好的虛拟IP

keepalived+Nginx實作高可用叢集

       同理在151這台機器上也安裝一個keepalived,隻不過配置檔案稍加修改:

      注:keepalived啟動需要時間,别剛啟動就去ip addr檢視虛拟ip,我剛開始安裝的時候就搞了半天,一直以為安裝失敗,汗-_-||。具體日志在/var/log/messages檔案中,如果真的啟動失敗可以手動檢視一下。

      現在兩台Nginx就配置好了叢集,我們把192.168.1.150這台電腦的keepalived程序Kill掉,再通路192.168.1.140會發現被轉發到了192.168.1.151這台電腦上,實作了Nginx的高可用。如果不想每次改完配置檔案都去kill程序的話,可以把keepalived配置成系統服務。我們再通路192.168.1.140:90,可以看到背景請求也被轉發到了192.168.1.151:90上,頁面資料展示正常:

keepalived+Nginx實作高可用叢集

      但這樣的配置存在一個問題就是,如果挂的不是keepalived而是這台電腦上的Nginx的話,keepalived的轉發就不會生效,因為它無法識别Nginx服務是否正常,解決方案是可以在keepalived.conf檔案中配置對Nginx的定時檢查,如果發現Nginx挂了,調用腳本重新開機Nginx。

      增加Nginx重新開機檢測腳本:

      增加運作權限

      在keepalived配置檔案中寫入監聽nginx腳本

      在 vrrp_instance 中新增監控的腳本

      最後重新開機keepalived即可,至此keepalived+Nginx高可用叢集(雙機主備模式)搭建完畢。

      雙主熱備的原理也很簡單,就是在雙機主備的基礎上再增加一對執行個體,使192.168.1.150和192.168.1.151這兩台虛拟機變成互為主備的關系。這次我們先打開原來的備用機151上keepalived的配置檔案,做如下修改:

      同理192.168.1.150這台虛拟機也進行相似的配置:

      之後進行儲存重新開機服務,可以看到150這台電腦綁定的虛拟IP:192.168.1.140,151這台電腦綁定的虛拟IP:192.168.1.141

keepalived+Nginx實作高可用叢集
keepalived+Nginx實作高可用叢集

      至此keepalived+Nginx高可用叢集(雙主熱備模式)搭建完畢。細心的小夥伴可能會問,現在相當于有了兩個前端通路入口(192.168.1.140和192.168.1.141),浏覽器到底應該寫哪一個呢?再來看一下我們的目标架構:

keepalived+Nginx實作高可用叢集

      可以看到前端請求在通路到虛拟IP之前,擋了一層DNS輪訓轉發,這需要購買一個營運商的DNS服務,在服務中進行配置就可以實作此功能。DNS是基于域名的,因為我沒有購買,是以就不能展示項目中這部分的配置了。但是不用急,接下來我會分享一篇“基于LVS+keepalived+Nginx實作高可用叢集架構”的文章,歡迎大家來踩。

繼續閱讀