nginx搭建高可用集羣
在本文中,將利用keepalived + nginx搭建高可用集羣,分別介紹主從模式和雙主模式。
環境準備
首先需要準備環境,本文使用兩臺虛擬機搭建一個nginx高可用集羣,虛擬機上分別安裝nginx和keepalived,安裝步驟如下:
-
使用如下命令安裝相關依賴:
yum -y install make zlib zlib devel gcc c++ libtool openssl openssl dev el
-
安裝nginx,去官網下載對應tar包,上傳到虛擬機,解壓,進行解壓後的nginx安裝包目錄使用如下命令:
./configure make && make install
-
關閉防火牆或開放對應端口。(不同版本linux命令有所不同,下面是centos7使用firewall命令)
firewall-cmd --list-all #查看開放的端口號 firewall-cmd --add-service=80/tcp --permanent #設置開放的端口號 firewall-cmd --reload #重啓防火牆 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall開機啓動
-
安裝keepalived,使用如下命令:安裝完成後再/etc目錄下生成keepalived文件,其中有keepalived.conf配置文件。
sudo yum install keepalived -y
主從模式
主從模式是在搭建的nginx集羣中有一個啓用節點,在沒有出現宕機情況下由該節點完成反向代理等工作,當該節點宕機時,將會啓動備用節點,達到高容錯、高可用,不會因爲一臺nginx服務器掛掉而無法調用服務。
接下來進行配置文件的修改,首先查看本機聯網網卡的名字,利用ifconfig(centos7是使用ip命令),如下圖聯網網卡是eth1,記住這個id,後面再配置文件中有用。
-
修改keepalived.conf配置文件,內容如下:
! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL #路由id vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" #檢測腳本 interval 2 weight 2 } vrrp_instance VI_1 { state MASTER #該節點的狀態,從節點需要設置爲BACKUP interface eth1 #聯網網卡 virtual_router_id 51 #主從節點的virtual_router_id必須相同 priority 100 #主從節點取冉優先級,主機較大,從機較小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.145.220 #虛擬ip地址 } }
-
在
/usr/local/src/
目錄下增加檢測腳本,nginx_check.sh
,檢測腳本內容如下:#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
-
兩臺虛擬機分別啓動nginx和keepalived,命令如下:
./nginx #啓動nginx service keepalived start #centos6使用該命令啓動 systemctl start keepalived.service #centos7使用該命令啓動
下圖顯示錶示啓動成功:
- 啓動完成後,可以使用主機訪問虛擬ip地址,可以看到能夠正確訪問到nginx服務器,接下來停止剛纔爲MASTER的節點的nginx和keepalived,之後再用該虛擬地址訪問,同樣可以訪問到nginx服務器。這便是主從模式,當主節點宕機後,備份節點將代替主節點工作,繼續工作。
雙主模式
雙主模式,每個節點既是主節點也是備份節點,當一個節點宕機,兩個虛擬地址的請求都會轉移到另外一個節點。
主從模式情況下,一臺做主,一臺做從,但同時只有一臺機器工作,當主節點不出現故障時,另一臺機器便一直處於資源浪費狀態。所以雙主模式可以解決資源浪費的情況。
- 配置雙主模式,需要修改keepalived.conf配置文件,文件內容如下:(在主從模式情況下,主節點配置文件中添加虛擬實例VI_2即可)
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.220
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.230
}
}
在備份節點的keepalived.conf文件中添加以下內容:
vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.230
}
}
修改完成後重啓keepalived即可,這時通過192.168.145.220
和192.168.145.230
兩個虛擬地址都可以訪問到nginx服務器,停止其中一臺主機的keepalived和nginx服務後,還是可以訪問到。