實驗拓撲圖:
實驗環境:
兩臺upstream server用於配置httpd服務,兩臺nginx反向代理服務器,同時將keepalived服務安裝在兩臺反向代理服務器上面,用於實現高可用性
基礎環境的準備:
關閉四臺主機的防火牆及selinux,同時在兩臺upstream server主機上配置httpd服務並準備測試頁面
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
selinux=disabled
四臺主機做同樣的設置
yum install -y httpd
systemctl start httpd
systemctl enable httpd
vim /var/www/html/index.html
<h1>This httpd-1 Page</h1>
另一臺upstream server主機做同樣配置
在兩臺負載均衡服務器上面安裝nginx服務,在nginx配置文件的http字段中定義upstream,並且在location字段中調用,重新啓動服務
yum install -y nginx //注意nginx的rpm包是在epel源中提供的
vim /etc/nginx/nginx.conf //編輯配置文件
upstream webservs { //在http字段中定義
server 192.168.153.7:80 weight=1;
server 192.168.153.8:80 weight=1;
}
location / { //在location中調用定義的upstream名稱
proxy_pass http://webservs/;
}
systemctl start nginx
systemctl enable nginx
備註:nginx根據版本不同有時候就只有一個nginx.conf的主配置文件,有時候除了主配置文件還會存在/etc/nginx/conf.d/default.conf的附加配置文件。如果nginx安裝完成後既有主配置文件又有附加配置文件,此時關於server字段以及location字段需要定義default.conf的附加配置文件中
使用netstat -tnlp查看確保80端口被nginx的master進程監聽
使用客戶端驗證一下nginx的反向代理功能
將配置文件複製到第二個反向代理服務器節點,並進行測試
接下來配置keepalived的高可用性,這裏我們先配置一組主備模式
對於keepalived來說通過判定nginx服務的在線狀態的結果來判斷這個主機是否可以成爲主節點
yum install -y keepalived //在反向代理服務器上安裝keepalived,並設置開機自啓
systemctl start keepalived
systemctl enable keepalived
編輯keepalived,設置檢測nginx是否在線的腳本
! Configuration File for keepalived
global_defs {
notification_email {
root@locahost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/chk_file.sh" //定義腳本
interval 1 //判斷命令返回結果
weight -10 //權重減10
}
vrrp_instance VI_1 {
state MASTER //主節點
interface ens33 //VIP配置到哪個接口的別名上
virtual_router_id 43 //虛擬路由ID
priority 100 //設置權重
advert_int 1
authentication {
auth_type PASS
auth_pass poiu
}
virtual_ipaddress {
192.168.153.200/32 dev ens33 label ens33:0 //設置VIP地址,配置的ens33網卡的第一個別名上
}
track_script {
chk_nginx //調用腳本
}
}
配置完畢後重新啓動服務並將配置文件複製到第二個節點上面
同時修改第二個節點上面的配置文件 state 改成BACKUP,priority改成99
創建檢測腳本
在/etc/keepalived目錄下創建chk_file.sh文件
內容爲killall -0 nginx &> /dev/null,並更改文件爲可執行狀態
然後查看主節點的IP地址信息
使用客戶端請求
現在我們手動停止主節點的nginx服務,然後查看備用節點的IP地址信息
此時訪問正常,重新啓動主節點的nginx服務後,VIP被重新爭搶回主節點
接下來配置keepalived的雙主模型實現nginx反向代理的高可用性
在主節點的keepalived的配置文件中添加以下配置信息
vrrp_instance VI_2 { //instance名稱更改爲2
state BACKUP //模式改爲備用
interface ens33
virtual_router_id 34 //虛擬路由ID任意更改,不能跟上面的VI_1一樣
priority 99 //權重設置爲99
advert_int 1
authentication {
auth_type PASS
auth_pass poiuytre
}
virtual_ipaddress {
192.168.153.201/32 dev ens33 label ens33:1 //將VIP192.168.153.201配置到ens33網卡的第二個別名上面
}
track_script {
chk_nginx
}
}
將新添加的配置信息複製到備用節點,並作相應的修改state更改成MSASTER,priority改成100
查看兩臺主機的ip地址信息
第一主節點IP信息爲:
第二主節點IP信息爲:
使用客戶端進行訪問驗證第二個主節點是否正常運行
手動停止第一臺高可用服務器的nginx服務,查看第二臺高可用服務器的IP信息用來驗證雙主模型是否成功
此時基於keepalived的雙主模型實現nginx反向代理的高可用性配置完畢,在實際生產環境中可以將兩個VIP地址配置在DNS服務器中,在DNS服務器的配置文件中做兩條A記錄指向,即可實現請求的負載均衡