keepalived + nginx組建高可用負載平衡Web server集羣

nginx負載均衡高可用

1.1 什麼是負載均衡高可用

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

爲了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監控程序,通過傳送諸如“I am alive”這樣的信息來監控對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務IP並繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。

 

 

 

1.2 keepalived+nginx實現主備

1.2.1 什麼是keepalived

keepalived是集羣管理中保證集羣高可用的一個服務軟件,用來防止單點故障。

  Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。

 

1.2.2 keepalived工作原理

keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。

虛擬路由冗餘協議,可以認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backupmaster上面有一個對外提供服務的vipVIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網內其他機器的默認路由爲該vip),master會發組播,當backup收不到VRRP包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backupmaster。這樣的話就可以保證路由器的高可用了。

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


1.1.1 keepalived+nginx實現主備過程

 

1.1.1.1 初始狀態

 

 

 

1.1.1.2 主機宕機

 

1.1.1.3 主機恢復

 

1.1.2 高可用環境

兩臺nginx,一主一備:192.168.100.205192.168.100.206

兩臺tomcat服務器:192.168.100.208192.168.100.209



 

1.1.1 安裝keepalived

1. 安裝環境

su - root

yum -y install kernel-devel*

yum -y install openssl-*

yum -y install popt-devel

yum -y install lrzsz

yum -y install openssh-clients

yum -y install libnl libnl-devel popt

2. 安裝keepalived

2.1. 安裝keepalived

將keepalived-1.2.15.tar.gz上傳到服務器/usr/local/下。

 

cd /usr/local

tar -zxvf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

 

執行配置命令

./configure --prefix=/usr/local/keepalived

 

3、編譯

make

4、安裝

make install

 

至此安裝成功

 

5、拷貝執行文件

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

6、將init.d文件拷貝到etc,加入開機啓動項

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

7、將keepalived文件拷貝到etc下,加入網卡配置

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

8、創建keepalived文件夾

mkdir -p /etc/keepalived

9、將keepalived配置文件拷貝到etc

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

10、添加可執行權限

chmod +x /etc/init.d/keepalived

2.2. 加入開機啓動:

chkconfig --add keepalived #添加時必須保證/etc/init.d/keepalived存在

chkconfig keepalived on

 

添加完可查詢系統服務是否存在:chkconfig --list

 

2.3. 啓動keepalived

啓動:service keepalived start

停止:service keepalived stop

重啓:service keepalived restart

 

3. 配置日誌文件

1.keepalived日誌輸出到local0

vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -d -S 0"

 

2./etc/rsyslog.conf裏添加:

local0.*  /var/log/keepalived.log

 

3.重新啓動keepalivedrsyslog服務:

service rsyslog restart

service keepalived restart

4. 打開防火牆的通訊地址

iptables -A INPUT -d 224.0.0.18 -j ACCEPT

/etc/rc.d/init.d/iptables save

1.1.1 配置keepalived

主nginx上的keepalived配置文件
global_defs {                       ##全局配置部分
#   notification_email {             ##下面幾行均爲全局通知配置,可以實現出現問題後報警,但功能有限,因此註釋掉,並採用Nagios監視lvs運行情況
#       [email protected]
#   }
#   notification_email_from [email protected]
#   smtp_server smtp.exmail.qq.com
#   smtp_connect_timeout 30
router_id LVS_DEVEL             ##設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 {            ##設置vrrp組,唯一且同一LVS服務器組要相同
state MASTER             ##備份LVS服務器設置爲BACKUP
interface eth0             # #設置對外服務的接口
virtual_router_id 51        ##設置虛擬路由標識
priority 100                   #設置優先級,數值越大,優先級越高,backup設置爲99,這樣就能實現當master宕機後自動將backup變爲master,而當原master恢復正常時,則現在的master再次變爲backup。
advert_int 1            ##設置同步時間間隔
authentication {         ##設置驗證類型和密碼,master和buckup一定要設置一樣
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {          ##設置VIP,可以多個,每個佔一行
192.168.100.16
}

}
virtual_server 192.168.100.16 80 {
delay_loop 6            ##健康檢查時間間隔,單位s
lb_algo wrr             ##負載均衡調度算法設置爲加權輪叫
lb_kind DR                              ##負載均衡轉發規則
nat_mask 255.255.255.0   ##網絡掩碼,DR模式要保障真實服務器和lvs在同一網段
persistence_timeout 50    ##會話保持時間,單位s
protocol TCP                           ##協議
real_server 192.168.100.205 80 {      ##真實服務器配置,80表示端口
weight 3                             ##權重
TCP_CHECK {                       ##服務器檢測方式設置 keepalived的健康檢查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 5    ##連接超時時間
nb_get_retry 3     ##失敗重試次數
delay_before_retry 3 ##失敗重試的間隔時間
connect_port 80      ##連接的後端端口
}
}
}

備nginx上的keepalived配置文件

global_defs {                       ##全局配置部分
#   notification_email {             ##下面幾行均爲全局通知配置,可以實現出現問題後報警,但功能有限,因此註釋掉,並採用Nagios監視lvs運行情況
#       [email protected]
#   }
#   notification_email_from [email protected]
#   smtp_server smtp.exmail.qq.com
#   smtp_connect_timeout 30
router_id LVS_DEVEL             ##設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 {            ##設置vrrp組,唯一且同一LVS服務器組要相同
state backup        ##備份LVS服務器設置爲BACKUP
interface eth0             # #設置對外服務的接口
virtual_router_id 51        ##設置虛擬路由標識
priority 50                   #設置優先級,數值越大,優先級越高,backup設置爲99,這樣就能實現當master宕機後自動將backup變爲master,而當原master恢復正常時,則現在的master再次變爲backup。
advert_int 1            ##設置同步時間間隔
authentication {         ##設置驗證類型和密碼,master和buckup一定要設置一樣
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {          ##設置VIP,可以多個,每個佔一行
192.168.100.16
}

}
virtual_server 192.168.100.16 80 {
delay_loop 6            ##健康檢查時間間隔,單位s
lb_algo wrr             ##負載均衡調度算法設置爲加權輪叫
lb_kind DR                              ##負載均衡轉發規則
nat_mask 255.255.255.0   ##網絡掩碼,DR模式要保障真實服務器和lvs在同一網段
persistence_timeout 50    ##會話保持時間,單位s
protocol TCP                           ##協議
real_server 192.168.100.206 80 {      ##真實服務器配置,80表示端口
weight 3                             ##權重
TCP_CHECK {                       ##服務器檢測方式設置 keepalived的健康檢查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 5    ##連接超時時間
nb_get_retry 3      ##失敗重試次數
delay_before_retry 3 ##失敗重試的間隔時間
connect_port 80      ##連接的後端端口
}
}
}


1. nginx介紹

1.1. 什麼是nginx

Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發鏈接,並且cpu、內存等資源消耗卻非常低,運行非常穩定。

1.2. Nginx的應用場景

1、http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。

2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。

3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集羣可以使用nginx做反向代理。並且多臺服務器可以平均分擔負載,不會因爲某臺服務器負載高宕機而某臺服務器閒置的情況。

 

2. nginx安裝

2.1. 下載

 

進入http://nginx.org/en/download.html 下載nginx1.8.0版本(當前最新穩定版本)。



1.1. 安裝

i. nginx安裝環境

nginxC語言開發,建議在linux上運行,本教程使用Centos6.5作爲安裝環境。

n gcc

安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gccyum install gcc-c++

n PCRE

PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginxhttp模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。

yum install -y pcre pcre-devel

注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。

n zlib

zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlibhttp包的內容進行gzip,所以需要在linux上安裝zlib庫。

yum install -y zlib zlib-devel

 

n openssl

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。

nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。

yum install -y openssl openssl-devel

 

ii. 編譯安裝

nginx-1.8.0.tar.gz拷貝至linux服務器。

 

解壓:

tar -zxvf nginx-1.8.0.tar.gz

cd nginx-1.8.0

 

1、 configure

./configure --help查詢詳細參數(參考本教程附錄部分:nginx編譯參數)

 

參數設置如下:

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi

 

注意:上邊將臨時文件目錄指定爲/var/temp/nginx,需要在/var下創建tempnginx目錄

 

 

2、 編譯安裝

make

make  install

 

安裝成功查看安裝目錄 :



1.1. 啓動nginx

cd /usr/local/nginx/sbin/

./nginx

 

查詢nginx進程:




注意:執行./nginx啓動nginx,這裏可以-c指定加載的nginx配置文件,如下:

./nginx -c /usr/local/nginx/conf/nginx.conf

如果不指定-cnginx在啓動時默認加載conf/nginx.conf文件,此文件的地址也可以在編譯安裝nginx時指定./configure的參數(--conf-path= 指向配置文件(nginx.conf))

 

1.1. 停止nginx

方式1,快速停止:

cd /usr/local/nginx/sbin

./nginx -s stop

此方式相當於先查出nginx進程id再使用kill命令強制殺掉進程。

 

方式2,完整停止(建議使用)

cd /usr/local/nginx/sbin

./nginx -s quit

此方式停止步驟是待nginx進程處理任務完畢進行停止。

 

 

1.2. 重啓nginx

方式1,先停止再啓動(建議使用):

nginx進行重啓相當於先停止nginx再啓動nginx,即先執行停止命令再執行啓動命令。

如下:

./nginx -s quit

./nginx

 

方式2,重新加載配置文件:

nginx的配置文件nginx.conf修改後,要想讓配置生效需要重啓nginx,使用-s reload不用先停止nginx再啓動nginx即可將配置信息在nginx中生效,如下:

./nginx -s reload

 

1.3. 安裝測試

nginx安裝成功,啓動nginx,即可訪問虛擬機上的nginx

Welcome to nginx!-192.168.100.206

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.



到這說明nginx基本上安裝成功。









發佈了30 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章