Nginx+keepalived 高可用雙機熱備(主從模式/雙主模式)


基礎介紹

負載均衡技術對於一個網站尤其是大型網站的web服務器集群來說是至關重要的!做好負載均衡架構,可以實現故障轉移和高可用環境,避免單點故障,保證網站健康持續運行。

關於負載均衡介紹,可以參考:linux負載均衡總結性說明(四層負載/七層負載)

由於業務擴展,網站的訪問量不斷加大,負載越來越高。現需要在web前端放置nginx負載均衡,同時結合keepalived對前端nginx實現HA高可用。

1: nginx進程 基於Master+Slave(worker)多進程模型,自身具有非常穩定的子進程管理功能。

在Master進程分配模式下,Master進程永遠不進行業務處理,只是進行任務分發,從而達到Master進程的存活高可靠性,Slave(worker)進程所有的業務信號都 由主進程發出,Slave(worker)進程所有的超時任務都會被Master中止,屬於非阻塞式任務模型。

2: Keepalived 是Linux下面實現VRRP備份路由的高可靠性運行件。基於Keepalived設計的服務模式能夠真正做到主服務器和備份服務器故障時IP瞬間無縫交接。二者結合,可以構架出比較穩定的軟件LB方案。

Keepalived介紹:
Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。但是它一般不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一起工作來達到集群的高可用。

keepalived可以認為是VRRP協議在Linux上的實現,主要有三個模塊,分別是core、check和vrrp。
core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。
check負責健康檢查,包括常見的各種檢查方式。
vrrp模塊是來實現VRRP協議的。

VRRP協議:
VRRP全稱 Virtual Router Redundancy Protocol,即 虛擬路由冗余協議。可以認為它是實現路由器高可用的容錯協議,即將N台提供相同功能的路由器組成一個路由器組(RouterGroup),這個組里面有一個master和多個backup,但在外界看來就像一台一樣,構成虛擬路由器,擁有一個虛擬IP(vip,也就是路由器所在局域網內其他機器的默認路由),占有這個IP的master實際負責ARP相應和轉發IP數據包,組中的其它路由器作為備份的角色處於待命狀態。master會發組播消息,當backup在超時時間內收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master,保證路由器的高可用。

在VRRP協議實現里,虛擬路由器使用 00-00-5E-00-01-XX 作為虛擬MAC地址,XX就是唯一的 VRID (VirtualRouter IDentifier),這個地址同一時間只有一個物理路由器占用。在虛擬路由器里面的物理路由器組里面通過多播IP地址224.0.0.18 來定時發送通告消息。每個Router都有一個 1-255 之間的優先級別,級別最高的(highest priority)將成為主控(master)路由器。通過降低master的優先權可以讓處於backup狀態的路由器搶占(pro-empt)主路由器的狀態,兩個backup優先級相同的IP地址較大者為master,接管虛擬IP。

 

nginx 雙機高可用一般是通過虛擬IP(飄移IP)方法來實現的,基於Linux/Unix的IP別名技術。

雙機高可用方法目前分為兩種:

1)Nginx+keepalived 雙機主從模式:即前端使用兩台服務器,一台主服務器和一台熱備服務器,正常情況下,主服務器綁定一個公網虛擬IP,提供負載均衡服務,熱備服務器處於空閑狀態;當主服務器發生故障時,熱備服務器接管主服務器的公網虛擬IP,提供負載均衡服務;但是熱備服務器在主機器不出現故障的時候,永遠處於浪費狀態,對於服務器不多的網站,該方案不經濟實惠。

2)Nginx+keepalived 雙機主主模式:即前端使用兩台負載均衡服務器,互為主備,且都處於活動狀態,同時各自綁定一個公網虛擬IP,提供負載均衡服務;當其中一台發生故障時,另一台接管發生故障服務器的公網虛擬IP(這時由非故障機器一台負擔所有的請求)。這種方案,經濟實惠,非常適合於當前架構環境。

今天在此分享下,Nginx+keepalived 實現高可用負載均衡的兩種模式:

一:Nginx+keepalived 雙機 主從模式

1.環境介紹

操作系統:centos6.8  64位
centos6-1       192.168.139.130         nginx+keepalived-master
centos6-2       192.168.139.129         nginx+keepalived-backup
VIP:            192.168.139.200       //負載均衡器上配置的域名都解析到這個VIP上

2.環境安裝

在安裝nginx和keepalive服務(master和backup兩台服務器上的安裝操作完全一樣)

安裝依賴,關閉selinux(記得重啟)

臨時關閉:

[root@localhost ~]# getenforce Enforcing

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive

永久關閉:

[root@localhost ~]# vim /etc/sysconfig/selinux

SELINUX=enforcing 改為 SELINUX=disabled

重啟服務reboot
[root@centos6-1 ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel
[root@centos6-1 ~]# service iptables stop

下載最新安裝包

[root@centos6-1 ~]# cd /usr/local/src/
[root@centos6-1 src]# wget https://nginx.org/download/nginx-1.9.9.tar.gz
[root@centos6-1 src]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz

安裝nginx

[root@centos6-1 src]# tar -zxvf nginx-1.9.9.tar.gz
[root@centos6-1 src]# cd nginx-1.9.9
[root@centos6-1 nginx-1.9.9]# useradd www -M -s /sbin/nologin
[root@centos6-1 nginx-1.9.9]# vim auto/cc/gcc

小插曲 注:
1.添加www用戶,其中 -M參數表示不添加用戶家目錄,-s參數表示指定shell類型
2. vim auto/cc/gcc 文件,將這句“#CFLAGS="$CFLAGS -g“”注釋掉 取消Debug編譯模式 大概在179行

繼續安裝nginx

[root@centos6-1 nginx-1.9.9]#  ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
[root@centos6-1 nginx-1.9.9]# make && make install

安裝keepalived

[root@centos6-1 nginx-1.9.9]# cd ..
[root@centos6-1 src]# ll
total 1728
-rw-r--r--. 1 root root 873480 Aug 23 23:18 keepalived-2.0.7.tar.gz
drwxr-xr-x. 9 1001 1001   4096 Aug 28 18:26 nginx-1.9.9
-rw-r--r--. 1 root root 887908 Dec  9  2015 nginx-1.9.9.tar.gz
[root@centos6-1 src]# tar -zxvf keepalived-2.0.7.tar.gz 
[root@centos6-1 src]# cd keepalived-2.0.7
[root@centos6-1 keepalived-2.0.7]# ./configure

小插曲 注:

編譯提示警告如上,解決如下:

[root@centos6-1 keepalived-2.0.7]# yum -y install libnl libnl-devel
[root@centos6-1 keepalived-2.0.7]# yum install -y libnfnetlink-devel

繼續安裝 keepalived,這里更換版本為keepalived-1.3.2.tar.gz, 再次編譯

小插曲: 在keepalived-2.0.7版本,無論是編譯,還是make
都會報錯,如下,因此更換版本。估計是keepalived-1.4.5直接跳到2.0版本改動的問題

[root@centos6-1 src]#  wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz
 [root@centos6-1 src]# tar -zxvf keepalived-1.3.2.tar.gz 
 [root@centos6-1 src]# cd keepalived-1.3.2
 [root@centos6-1 keepalived-1.3.2]# ./configure
 [root@centos6-1 keepalived-1.3.2]# make && make install
 [root@centos6-1 keepalived-1.3.2]# cp /usr/local/src/keepalived-1.3.2/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
 [root@centos6-1 keepalived-1.3.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
 [root@centos6-1 keepalived-1.3.2]# mkdir /etc/keepalived
 [root@centos6-1 keepalived-1.3.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
 [root@centos6-1 keepalived-1.3.2]# cp /usr/local/sbin/keepalived /usr/sbin/
 #將nginx和keepalive服務加入開機啟動服務
 [root@centos6-1 keepalived-1.3.2]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
 [root@centos6-1 keepalived-1.3.2]# echo "/etc/init.d/keepalived start" >> /etc/rc.local

 

 

未完繼續

https://blog.csdn.net/u012599988/article/details/82152224


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM