Linux基礎(chǔ)教程之Keepalived實(shí)現(xiàn)Nginx雙主高可用負(fù)載均衡集群
實(shí)驗(yàn)?zāi)康模菏褂胟eepalived實(shí)現(xiàn)Nginx的雙主高可用負(fù)載均衡集群。
實(shí)驗(yàn)環(huán)境:兩臺(tái)Nginx proxy(雙主Nginx,各需要兩塊網(wǎng)卡,eth0連接內(nèi)網(wǎng),eth1連接外網(wǎng))、兩臺(tái)web server(請(qǐng)求的負(fù)載均衡)、一臺(tái)client用于驗(yàn)證結(jié)果。
注意:為了不影響實(shí)驗(yàn)結(jié)果,在實(shí)驗(yàn)開(kāi)始前先關(guān)閉iptables和seLinux
操作步驟:
一、配置IP
1.配置A主機(jī)的IP
# ip addr add dev eth0 192.168.10.2/24
2.配置B主機(jī)的IP
# ip addr add dev eth0 192.168.10.23/24
3.配置C主機(jī)的IP
# ip addr add dev eth0 192.168.10.3/24
4.配置D主機(jī)的IP
# ip addr add dev eth0 192.168.10.33/24
二、配置web服務(wù)(C和D主機(jī)都做同樣配置,只需修改默認(rèn)主頁(yè)中的IP地址為本機(jī)的IP即可,以示區(qū)別)
1.安裝apache
# yum -y install apache
2.創(chuàng)建默認(rèn)主頁(yè)
# vim /var/www/html/index.html
<h1>192.168.10.3</h1>
3.啟動(dòng)apache
# service httpd start
三、配置sorry_server(此服務(wù)配置于Nginx proxy主機(jī)上,兩臺(tái)Nginx proxy都做同樣配置,只需修改默認(rèn)主頁(yè)中的IP地址為本機(jī)的IP即可,以示區(qū)別)
1.安裝apache
# yum -y install apache
2.創(chuàng)建默認(rèn)主頁(yè)
# vim /var/www/html/index.html
<h1>sorry_server:192.168.10.2</h1>
3.修改監(jiān)聽(tīng)端口為8080,以免與nginx所監(jiān)聽(tīng)的端口沖突
# vim /etc/httpd/conf/httpd.conf
Listen 8080
4.啟動(dòng)apache服務(wù)
四、配置代理(兩臺(tái)Nginx proxy都做同樣配置)
1.安裝nginx
# yum -y install nginx
2.定義upstream集群組,在http{}段中定義;
# vim /etc/nginx/nginx.conf
http {
upstream websrvs {
server 192.168.10.3:80;
server 192.168.10.33:80;
server 127.0.0.1:8080 backup;
}
}
3.調(diào)用定義的集群組,在server{}段的location{}段中調(diào)用;
# vim /etc/nginx/conf.d/default.conf
server {
location / {
proxy_pass?http://wersrvs;
index index.html;
}
}
4.啟動(dòng)服務(wù)
# service nginx start
五、配置keepalived
A主機(jī)上操作
1.安裝keepalived
# yum -y install keepalived
2.編輯A主機(jī)的配置文件/etc/keepalived/keepalived.conf,作如下配置:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id?CentOS6
vrrp_mcast_group4 224.0.100.39
}
vrrp_script chk_down {
script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
interval 1
weight -5
}
vrrp_script chk_nginx {
script “killall -0 nginx && exit 0 || exit 1”
interval 1
weight -5
fall 2
rise 1
}
vrrp_instance ngx {
state MASTER
interface eth1
virtual_router_id 14
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass MDQ41fTp
}
virtual_ipaddress {
192.168.20.100/24 dev eth1
}
track_script {
chk_down
chk_nginx
}
}
vrrp_instance ngx2 {
state BACKUP
interface eth1
virtual_router_id 15
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass XYZ41fTp
}
virtual_ipaddress {
192.168.20.200/24 dev eth1
}
track_script {
chk_down
chk_nginx
}
}
B主機(jī)也作同樣配置,稍作修改即可,需要修改的地方如下:
vrrp_instance ngx {
state BACKUP
priority 98
}
vrrp_instance ngx2 {
state MASTER
priority 100
}
六、模擬故障,驗(yàn)證結(jié)果
1.啟動(dòng)兩臺(tái)Nginx proxy的keepalived服務(wù)
# service keepalived start
2.訪問(wèn)192.168.20.100,結(jié)果應(yīng)是后端的web server輪詢響應(yīng)請(qǐng)求
3.訪問(wèn)192.168.20.200,結(jié)果應(yīng)是后端的web server輪詢響應(yīng)請(qǐng)求
4.將后端的web server關(guān)閉一臺(tái),訪問(wèn)192.168.20.100或192.168.20.200,響應(yīng)請(qǐng)求的將只是另一臺(tái)正常運(yùn)行web server的主機(jī)
5.將后端的web server都關(guān)閉,此時(shí)訪問(wèn)192.168.20.100或192.168.20.200,響應(yīng)請(qǐng)求的將只是Nginx proxy中定義的主server中的sorry_server
6.關(guān)閉一臺(tái)Nginx proxy 的nginx服務(wù),備server將把IP地址添加到本機(jī),繼續(xù)提供服務(wù),此時(shí)訪問(wèn)192.168.20.100或192.168.20.200并不會(huì)有任何察覺(jué)