日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

keepalived实现nginx负载均衡

發布時間:2024/3/24 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 keepalived实现nginx负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

keepalived 實現nginx 負載均衡+主備高可用

概述

nginx作為負載均衡器,所有請求都到nginx,可見nginx處于非常重點的位置,如果nginx服務器宕機,后端web服務將無法提供服務,影響嚴重。

所以在架構設計中,可以利用nginx的反向代理和負載均衡實現后端應用的負載均衡和高可用性,同時我們還需要考慮Nginx的單點故障。真正做到架構高可用性。

主要考慮以下幾點:

1、Nginx服務因為意外現象掛掉

2、服務器宕機導致nginx不可用

目前主流的解決方案就是keepalived+nginx 實現nginx的故障轉移,同時做好監控報警。在自動故障轉移的同時能通知到相關的應用負責人檢查相關應用,排查隱患,徹底解決問題。

keepalived的HA分為搶占模式和非搶占模式,搶占模式即MASTER從故障中恢復后,會將VIP從BACKUP節點中搶占過來。非搶占模式即MASTER恢復后不搶占BACKUP升級為MASTER后的VIP。

使用阿里云epel鏡像

兩臺虛擬機都安裝

[root@nginx01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@nginx01 ~]# yum -y install nginx?

啟動服務和開機自啟

[root@nginx01 ~]# systemctl start nginx

[root@nginx01 ~]# systemctl enable nginx

安裝keepalived

用剛才實驗的倆臺虛擬機,暫時不用安裝,沒有的話按之前安裝下

修改keepalived.conf配置文件

nginx-01主機上的keepalived.conf文件的修改

[root@nginx01 ~]# vim? /etc/keepalived/keepalived.conf

keepalived.conf配置文件完整內容如下所示:

! Configuration File for keepalivedglobal_defs {router_id nginx01 } vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh"interval 2weight -20} vrrp_instance nginx {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}track_script{chk_nginx} }

重啟服務

[root@nginx01 ~]# systemctl restart nginx

把配置文件傳給nginx02

[root@nginx01 ~]# scp /etc/keepalived/keepalived.conf? 192.168.10.7:/etc/keepalived/

[root@nginx02 ~]#vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id nginx02 } vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh"interval 2weight -20} vrrp_instance nginx {state MASTERinterface ens33virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}track_script{chk_nginx} }

重啟服務

[root@nginx02 ~]# systemctl restart nginx

創建nginx服務檢測腳本

? 分別在nginx-01和nginx-02服務器的/etc/keepalived目錄下創建nginx_check.sh腳本,并為其添加執行權限。用于keepalived定時檢測nginx的服務狀態,如果nginx停止了,會嘗試重新啟動nginx,如果啟動失敗,會將keepalived進程殺死,將vip漂移到備用機器上。

[root@nginx01?~]# vim /etc/keepalived/nginx_check.sh

#!/bin/bashnum=$(ps -C nginx --no-header | wc -l)if [ $num -eq 0 ];thensystemctl start nginx #嘗試重新啟動nginxsleep 1 #睡眠1秒if [ $(ps -C nginx --no-header | wc -l) -eq 0 ];thenkillall keepalived #若nginx啟動失敗,將keepalived服務殺死。將vip漂移到其它備份節點fifi

說明:

ps -C nginx --no-header | wc -l一般用于shell腳步編寫用

-C <指令名稱> 選項用來指定程序的名稱

--no-header選項去掉頭部

killall命令由軟件包psmisc提供,確保兩臺主機要安裝psmisc

[root@nginx-01 ~]# chmod +x /etc/keepalived/nginx_check.sh? ?

[root@nginx01 ~]# scp /etc/keepalived/nginx_check.sh 192.168.10.7:/etc/keepalived/

[root@nginx02?~]#chmod +x /etc/keepalived/nginx_check.sh

查看進程

[root@nginx01]#ps -ef | grep keepalived

查看進程

[root@nginx02]#ps -ef | grep keepalived

看到如上進程信息,表示keepalived已經啟動成功。下面用ip addr命令查看vip綁定的情況,如下所示:

[root@nginx01 ~]# ip addr show dev ens33

?[root@nginx02 ~]# ip addr show dev ens33

vip地址192.168.10.100綁定在nginx01的ens33網卡上。

測試

搶占模式

將nginx-01的keepalived服務和nginx服務停掉,查看vip是否漂移到nginx-02

[root@nginx01 ~]# systemctl stop keepalived

[root@nginx01 ~]# nginx -s stop

下面用ip addr命令查看vip綁定的情況,如下所示:

[root@nginx01 ~]# ip addr show dev ens33

?[root@nginx02 ~]# ip addr show dev ens33

從上面顯示可以看出,vip已經成功從nginx-01漂移到了nginx-02。

將nginx-01的nginx服務和keepalived服務啟動,查看搶占模式的效果。

[root@nginx01 ~]# nginx

[root@nginx01 ~]# systemctl start keepalived

[root@nginx01 ~]# ip addr show dev ens33

此時再將nginx-01的nginx服務和keepalived服務啟動后,由于nginx-01是MASTER且優先級高,所以會將nginx-02的VIP搶占過來。從上面的顯示結果可以看到,VIP又漂移到了nginx-01主機。

非搶占模式

和搶占模式的配置相比,只改了兩個地方:

在vrrp_instance塊下,兩個節點各增加了nopreempt指令,表示不爭搶vip。

兩個節點的state都為BACKUP。

在非搶占模式下,兩個keepalived節點都啟動后,默認都是BACKUP狀態,雙方在發送組播信息后,會根據優先級來選舉一個MASTER出來。由于兩者都配置了nopreempt,所以MASTER從故障中恢復后,不會搶占vip。這樣會避免VIP切換可能造成的服務延遲。

改nginx-01和nginx-02的keepalived.conf內容(標紅色部分):

?重啟keepalived? ? ? ?systemctl restart keepalived

?[root@nginx01 ~]# ip addr show dev ens33

?[root@nginx02 ~]# ip addr show dev ens33

停掉nginx01上服務后在查看

?[root@nginx01 ~]# ip addr show dev ens33

?[root@nginx02 ~]# ip addr show dev ens33

VIP地址漂移到了nginx-02上

再將nginx-01的keepalived服務啟動,查看是否搶占VIP

??[root@nginx01 ~]# ip addr show dev ens33

?[root@nginx02 ~]# ip addr show dev ens33

VIP還在nginx02上面說明沒搶占VIP

總結

以上是生活随笔為你收集整理的keepalived实现nginx负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。