簡介
Keepalived是基于vrrp協(xié)議的一款高可用軟件呛梆。Keepailived有一臺主服務(wù)器和多臺備份服務(wù)器挑格,在主服務(wù)器和備份服務(wù)器上面部署相同的服務(wù)配置膘婶,使用一個虛擬IP地址對外提供服務(wù)恒水,當(dāng)主服務(wù)器出現(xiàn)故障時倔幼,虛擬IP地址會自動漂移到備份服務(wù)器继薛。
VRRP(Virtual Router Redundancy Protocol修壕,虛擬路由器冗余協(xié)議),VRRP是為了解決靜態(tài)路由的高可用遏考。VRRP的基本架構(gòu)
虛擬路由器由多個路由器組成慈鸠,每個路由器都有各自的IP和共同的VRID(0-255),其中一個VRRP路由器通過競選成為MASTER灌具,占有VIP青团,對外提供路由服務(wù),其他成為BACKUP咖楣,MASTER以IP組播(組播地址:224.0.0.18)形式發(fā)送VRRP協(xié)議包督笆,與BACKUP保持心跳連接,若MASTER不可用(或BACKUP接收不到VRRP協(xié)議包)诱贿,則BACKUP通過競選產(chǎn)生新的MASTER并繼續(xù)對外提供路由服務(wù)娃肿,從而實現(xiàn)高可用。
vrrp協(xié)議的相關(guān)術(shù)語:
虛擬路由器:Virtual Router
虛擬路由器標識:VRID(0-255)
物理路由器:
master :主設(shè)備
backup :備用設(shè)備
priority:優(yōu)先級
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
GraciousARP
安全認證:
簡單字符認證珠十、HMAC機制料扰,只對信息做認證
MD5(leepalived不支持)
工作模式:
主/備:單虛擬路徑器;
主/主:主/備(虛擬路徑器)焙蹭,備/主(虛擬路徑器)
工作類型:
搶占式:當(dāng)出現(xiàn)比現(xiàn)有主服務(wù)器優(yōu)先級高的服務(wù)器時晒杈,會發(fā)送通告搶占角色成為主服務(wù)器
非搶占式:
keepalived
核心組件:
vrrp stack:vrrp協(xié)議的實現(xiàn)
ipvs wrapper:為集群內(nèi)的所有節(jié)點生成IPVS規(guī)則
checkers:對IPVS集群的各RS做健康狀態(tài)檢測
控制組件:配置文件分析器,用來實現(xiàn)配置文件的分析和加載
IO復(fù)用器
內(nèi)存管理組件孔厉,用來管理keepalived高可用是的內(nèi)存管理
注意:
- 各節(jié)點時間必須同步
- 確保各節(jié)點的用于集群服務(wù)的接口支持MULTICAST通信(組播)拯钻;
安裝
從CentOS 6.4開始keepalived隨系統(tǒng)base倉庫提供,可以使用yun -y install keepalived
安裝烟馅。
配置文件:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
提供校驗碼:/usr/bin/genhash
Unit File:keepalived.service
Unit File的環(huán)境配置文件:/etc/sysconfig/keepalived
配置
主配置文件詳解
! Configuration File for keepalived
global_defs {
notification_email { #發(fā)送報警郵件收件地址
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #指明報警郵件的發(fā)送地址
smtp_server 192.168.200.1 #郵件服務(wù)器地址
smtp_connect_timeout 30 #smtp的超時時間
router_id LVS_DEVEL #物理服務(wù)器的主機名
vrrp_mcast_group4 #定義一個組播地址
static_ipaddress
{
192.168.1.1/24 dev eth0 scope global
}
static_routes
{
192.168.2.0/24 via 192.168.1.100 dev eth0
}
}
vrrp_sync_group VG_1 { #定義一個故障組说庭,組內(nèi)有一個虛擬路由出現(xiàn)故障另一個也會一起跟著轉(zhuǎn)移,適用于LVS的NAT模型郑趁。
group {
VI1 # name of vrrp_instance (below)
VI2 # One for each moveable IP
}
}
vrrp_instance VI_1 { #定義一個虛擬路由
state MASTER|BACKUP #當(dāng)前節(jié)點在此虛擬路由器上的初始狀態(tài)刊驴;只能有一個是MASTER,余下的都應(yīng)該為BACKUP;
interface eth0 #綁定為當(dāng)前虛擬路由器使用的物理接口捆憎;
virtual_router_id 51 #當(dāng)前虛擬路由器的惟一標識舅柜,范圍是0-255;
priority 100 #當(dāng)前主機在此虛擬路徑器中的優(yōu)先級躲惰;范圍1-254致份;
advert_int 1 #通告發(fā)送間隔,包含主機優(yōu)先級础拨、心跳等氮块。
authentication { #認證配置
auth_type PASS #認證類型,PASS表示簡單字符串認證
auth_pass 1111 #密碼,PASS密碼最長為8位
virtual_ipaddress {
192.168.200.16 #虛擬路由IP地址诡宗,以輔助地址方式設(shè)置
192.168.200.18/24 dev eth2 label eth2:1 #以別名的方式設(shè)置
}
track_interface {
eth0
eth1
} #配置要監(jiān)控的網(wǎng)絡(luò)接口滔蝉,一旦接口出現(xiàn)故障,則轉(zhuǎn)為FAULT狀態(tài)塔沃;
nopreempt #定義工作模式為非搶占模式蝠引;
preempt_delay 300 #搶占式模式下,節(jié)點上線后觸發(fā)新選舉操作的延遲時長蛀柴;
virtual_routes { #配置路由信息螃概,可選項
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> [or <IPADDR>] dev <STRING> scope
<SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.112.0/24 via 192.168.100.254 192.168.113.0/24 via 192.168.200.254 or 192.168.100.254 dev eth1 blackhole 192.168.114.0/24
}
notify_master <STRING>|<QUOTED-STRING> #當(dāng)前節(jié)點成為主節(jié)點時觸發(fā)的腳本。
notify_backup <STRING>|<QUOTED-STRING> #當(dāng)前節(jié)點轉(zhuǎn)為備節(jié)點時觸發(fā)的腳本鸽疾。
notify_fault <STRING>|<QUOTED-STRING> #當(dāng)前節(jié)點轉(zhuǎn)為“失敗”狀態(tài)時觸發(fā)的腳本吊洼。
notify <STRING>|<QUOTED-STRING> #通用格式的通知觸發(fā)機制,一個腳本可完成以上三種狀態(tài)的轉(zhuǎn)換時的通知制肮。
smtp_alert #如果加入這個選項融蹂,將調(diào)用前面設(shè)置的郵件設(shè)置,并自動根據(jù)狀態(tài)發(fā)送信息
}
virtual_server 192.168.200.100 443 { #LVS配置段 弄企,設(shè)置LVS的VIP地址和端口
delay_loop #服務(wù)輪詢的時間間隔;檢測RS服務(wù)器的狀態(tài)区拳。
lb_algo rr #調(diào)度算法拘领,可選rr|wrr|lc|wlc|lblc|sh|dh。
lb_kind NAT #集群類型樱调。
nat_mask 255.255.255.0 #子網(wǎng)掩碼约素,可選項。
persistence_timeout 50 #是否啟用持久連接笆凌,連接保存時長
protocol TCP #協(xié)議圣猎,只支持TCP
sorry_server <IPADDR> <PORT> #備用服務(wù)器地址,可選項乞而。
real_server 192.168.201.100 443 { #配置RS服務(wù)器的地址和端口
weight 1 #權(quán)重
SSL_GET { #檢測RS服務(wù)器的狀態(tài)送悔,發(fā)送請求報文
url {
path / #請求的URL
digest ff20ad2481f97b1754ef3e12ecd3a9cc #對請求的頁面進行hash運算,然后和這個hash碼進行比對,如果hash碼一樣就表示狀態(tài)正常
status_code <INT> #判斷上述檢測機制為健康狀態(tài)的響應(yīng)碼,和digest二選一即可欠啤。
} #這個hash碼可以使用genhash命令請求這個頁面生成
connect_timeout 3 #連接超時時間
nb_get_retry 3 #超時重試次數(shù)
delay_before_retry 3 #每次超時過后多久再進行連接
connect_ip <IP ADDRESS> #向當(dāng)前RS的哪個IP地址發(fā)起健康狀態(tài)檢測請求
connect_port <PORT> #向當(dāng)前RS的哪個PORT發(fā)起健康狀態(tài)檢測請求
bindto <IP ADDRESS> #發(fā)出健康狀態(tài)檢測請求時使用的源地址荚藻;
bind_port <PORT> #發(fā)出健康狀態(tài)檢測請求時使用的源端口;
}
}
}
健康狀態(tài)檢測機制
- HTTP_GET
- SSL_GET
- TCP_CHECK
- SMTP_CHECK
- MISS_CHECK #調(diào)用自定義腳本進行檢測
TCP_CHECK {
connect_ip <IP ADDRESS> #向當(dāng)前RS的哪個IP地址發(fā)起健康狀態(tài)檢測請求;
connect_port <PORT> #向當(dāng)前RS的哪個PORT發(fā)起健康狀態(tài)檢測請求;
bindto <IP ADDRESS> #發(fā)出健康狀態(tài)檢測請求時使用的源地址洁段;
bind_port <PORT> #發(fā)出健康狀態(tài)檢測請求時使用的源端口应狱;
connect_timeout <INTEGER> #連接請求的超時時長;
}
實現(xiàn)LVS高可用集群
實驗主機
虛擬IP:192.168.166.100
2臺CentOS 7.3
CentOS 7.3 主服務(wù)器祠丝, IP:192.168.166.130
CentOS 7.3-1 備份服務(wù)器疾呻,IP:192.168.166.132
2臺CentOS 6.9
CentOS 6.9 IP:192.168.166.129
CentOS6.9-1 IP:192.168.166.131
注:在配置服務(wù)前需要注意幾臺主機的防火墻策略,和SELinux配置写半。
主調(diào)度器配置
[root@CentOS7.3 ~]#yum -y install keepalived ipvsadm #安裝keepalived和LVS管理軟件ipvsadm
[root@CentOS7.3 ~]#vim /etc/keepalived/keepalived.conf #配置keepalived
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1 #郵件服務(wù)器的地址
smtp_connect_timeout 30
router_id CentOS7.3 #主調(diào)度器的主機名
vrrp_mcast_group4 224.26.1.1 #發(fā)送心跳信息的組播地址
}
vrrp_instance VI_1 {
state MASTER #主調(diào)度器的初始角色
interface eth0 #虛擬IP工作的網(wǎng)卡接口
virtual_router_id 66 #虛擬路由的ID
priority 100 #主調(diào)度器的選舉優(yōu)先級
advert_int 1
authentication {
auth_type PASS #集群主機的認證方式
auth_pass 123456 #密鑰,最長8位
}
virtual_ipaddress {
192.168.166.100 #虛擬IP
}
}
virtual_server 192.168.166.100 80 { #LVS配置段岸蜗,VIP
delay_loop 6
lb_algo rr #調(diào)度算法輪詢
lb_kind DR #工作模式DR
nat_mask 255.255.255.0
# persistence_timeout 50 #持久連接,在測試時需要注釋污朽,否則會在設(shè)置的時間內(nèi)把請求都調(diào)度到一臺RS服務(wù)器上面
protocol TCP
sorry_server 127.0.0.1 80 #Sorry server的服務(wù)器地址及端口
#Sorry server就是在后端的服務(wù)器全部宕機的情況下緊急提供服務(wù)散吵。
real_server 192.168.166.129 80 { #RS服務(wù)器地址和端口
weight 1 #RS的權(quán)重
HTTP_GET { #健康狀態(tài)檢測方法
url {
path /
status_code 200 #狀態(tài)判定規(guī)則
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.166.131 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
[root@CentOS7.3 keepalived]#systemctl start keepalived #啟動keepalived
[root@CentOS7.3 keepalived]#ip a l eth0 #查看虛擬路由綁定的網(wǎng)卡
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b9:7d:cb brd ff:ff:ff:ff:ff:ff
inet 192.168.166.130/24 brd 192.168.166.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.166.100/32 scope global eth0 #虛擬IP已經(jīng)綁定在了eth網(wǎng)卡上
valid_lft forever preferred_lft forever
inet6 fe80::50fe:a3f3:83a0:d38a/64 scope link
valid_lft forever preferred_lft forever
備份調(diào)度器的配置
[root@centos7.3-1 ~]#yum -y install keepalived ipvsadm
! 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 CentOS7.3-1 #備份調(diào)度器的主機名
vrrp_mcast_group4 224.26.1.1 #這個組播地址需與集群內(nèi)的其他主機相同
}
vrrp_instance VI_1 {
state BACKUP #初始角色,備份服務(wù)器需設(shè)置為BACKUP
interface eth0
virtual_router_id 66 #虛擬路由的ID一定要和集群內(nèi)的其他主機相同
priority 90 #選舉優(yōu)先級蟆肆,要比主調(diào)度器地一些
advert_int 1
authentication {
auth_type PASS
auth_pass 123456 #密鑰需要和集群內(nèi)的主服務(wù)器相同
}
virtual_ipaddress {
192.168.166.100
}
}
#余下配置和主服務(wù)器相同
virtual_server 192.168.166.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.166.129 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.166.131 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
[root@centos7.3-1 ~]#systemctl start keepalived #啟動備份keepalived
[root@centos7.3-1 ~]#ip a l eth0 #查看虛擬路由綁定的網(wǎng)卡接口
[root@centos7.3-1 ~]#ip a l eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:7e:ec:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.166.132/24 brd 192.168.166.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::9aab:52b3:cc1e:fbef/64 scope link
valid_lft forever preferred_lft forever
測試虛擬IP地址漂移
關(guān)閉主服務(wù)器的keepalived矾睦,并查看eth0接口
查看備份服務(wù)器的eth0接口,地址已經(jīng)漂移到了備份服務(wù)器上面
可以看到上圖提示有新郵件炎功。使用mail命令查看郵件列表枚冗,都是后端服務(wù)器狀態(tài)檢測的郵件,說明配置的報警郵件生效了蛇损。應(yīng)為后端服務(wù)器還沒有配置所以檢測的狀態(tài)全是down哆姻。
啟動主服務(wù)器,地址又漂移回了主服務(wù)器
配置RS服務(wù)器
RS1配置
[root@CentOS6.9 ~]#yum -y install httpd #安裝httpd服務(wù)
[root@CentOS6.9 ~]#vim lvs.sh #創(chuàng)建一個配置腳本
#!/bin/bash
vip=192.168.166.100 #VIP地址
mask=255.255.255.255
dev=eth0:1
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask broadcast $vip up
route add -host $vip dev $dev
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
[root@CentOS6.9 ~]#bash lvs.sh start
[root@CentOS6.9 ~]#ip a l eth0:0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:23:38:c9 brd ff:ff:ff:ff:ff:ff
inet 192.168.166.129/24 brd 192.168.166.255 scope global eth0
inet 192.168.166.100/32 brd 192.168.166.100 scope global eth0:1
inet6 fe80::20c:29ff:fe23:38c9/64 scope link
valid_lft forever preferred_lft forever
[root@CentOS6.9 ~]#echo WebServer1 > /var/www/html/index.html
[root@CentOS6.9 ~]#cat /var/www/html/index.html
WebServer1
[root@CentOS6.9 ~]#service httpd start
使用ipvsadm 命令查看lvs配置信息申眼,RS1服務(wù)器已經(jīng)調(diào)度器添加進集群涣狗。
RS2配置
[root@CentOS6.9-1 ~]#yum -y install httpd
[root@CentOS6.9-1 ~]#vim lvs.sh #和上面RS1的lvx.sh內(nèi)容相同
[root@CentOS6.9-1 ~]#echo WebServer2 > /var/www/html/index.html
[root@CentOS6.9-1 ~]#cat /var/www/html/index.html
WebServer2
[root@CentOS6.9-1 ~]#service httpd start
第二臺RS服務(wù)器上線
客戶端測試
因為使用的是輪詢算法,所以會在Web1和Web2之間來回調(diào)度更啄。
注意:如果在測試是開啟了lvs的長連接稚疹,會導(dǎo)致在設(shè)置的時間內(nèi)把客戶端一直調(diào)度到同一臺RS服務(wù)器上面。
關(guān)閉主調(diào)度器
客戶端訪問
我們還可以使用這些主機配置來兩套LVS高可用祭务,做一個雙主模型
第二套LVS信息
VIP:192.168.166.200
第一臺調(diào)度器為備份服務(wù)器
第二臺調(diào)度器為主服務(wù)器
第一臺調(diào)度器配置
! 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 CentOS7.3
vrrp_mcast_group4 224.26.1.1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.166.100
}
}
virtual_server 192.168.166.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.166.129 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.166.131 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
#第二套虛擬路由
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 88 #ID不要和第一套虛擬路由相同
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.166.200
}
}
virtual_server 192.168.166.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.166.129 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.166.131 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
第二臺的配置這里就不列出了,把第一臺服務(wù)器的配置文件修改一下内狗。下圖是配置好的結(jié)果。
第一臺服務(wù)器
第二臺服務(wù)器
RS配置
#!/bin/bash
vip=192.168.166.100
mask=255.255.255.255
dev=eth0:1
vip2=192.168.166.200 #添加一個VIP2
mask2=255.255.255.255
dev2=eth0:2 #再添加一個eth0:2別名
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask broadcast $vip up
ifconfig $dev2 $vip2 netmask $mask2 broadcast $vip2 up #設(shè)置地址
route add -host $vip dev $dev
route add -host $vip2 dev $dev2
;;
stop)
ifconfig $dev down
ifconfig $dev2 down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
注:上面這份腳本RS1和RS2通用
RS
RS2
調(diào)度器LVS規(guī)則
測試
高可用雙主Nginx
配置Nginx主機
[root@centos7.3 ~]#yum -y install nginx #安裝nginx义锥,nginx在epel源柳沙。
[root@centos7.3 ~]#vim /etc/nginx/nginx.conf #修改nginx主配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream web { #在http上下文中添加一個服務(wù)器組,web是組名拌倍。
server 192.168.166.129:80; #后端服務(wù)器的地址和端口
server 192.168.166.132:80;
}
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
include /etc/nginx/conf.d/*.conf;
server {
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
定義兩個Nginx虛擬主機
[root@centos7.3 nginx]#vim /etc/nginx/conf.d/host.conf
server {
server_name www.test.com;
listen 80;
index index.html;
root /app/web;
location / {
proxy_pass http://web;
}
}
zhu注:以上內(nèi)容兩臺主機相同
配置keepalived
第一臺
! 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 CentOS7.3
vrrp_mcast_group4 224.24.1.1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
192.168.166.100/24 dev eth0
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 88
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 11111111
}
virtual_ipaddress {
192.168.166.200/24 dev eth0
}
}
第二臺Nginx
! 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 CentOS7.3
vrrp_mcast_group4 224.24.1.1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
192.168.166.100/24 dev eth0
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 88
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 11111111
}
virtual_ipaddress {
192.168.166.200/24 dev eth0
}
}
! 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 CentOS7.3-1
vrrp_mcast_group4 224.24.1.1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
192.168.166.100/24 dev eth0
}
測試
keepalived可以調(diào)用外部的輔助腳本進行資源監(jiān)控赂鲤,并根據(jù)監(jiān)控的結(jié)果狀態(tài)能實現(xiàn)優(yōu)先動態(tài)調(diào)整噪径;
先定義一個腳本
vrrp_script <SCRIPT_NAME> { #定義腳本
script "killall -0 sshd" #可以在引號內(nèi)調(diào)用命令或者腳本路徑,如果腳本執(zhí)行成功則不變蛤袒,如果失敗則執(zhí)行下面的命令
interval INT #檢測間隔時間
weight -INT #減掉權(quán)重
fall 2 #檢測幾次判定為失敗
rise 2 #檢測幾次判定為成功
}
killall -0 只是測試熄云,并不執(zhí)行操作,用來測試進程是否運行正常
調(diào)用此腳本
track_script {
SCRIPT_NAME_1 #調(diào)用腳本
SCRIPT_NAME_2 weight -2 #如果腳本健康狀態(tài)檢測失敗優(yōu)先級減2
}
配置文件
! 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 CentOS7.3
vrrp_mcast_group4 224.24.1.1
}
vrrp_script nginx {
script "killall -0 nginx && exit 0 || exit 1"
interval 1
weight -15
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
192.168.166.100/24 dev eth0
}
track_script {
nginx
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 88
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 11111111
}
virtual_ipaddress {
192.168.166.200/24 dev eth0
}
}
測試