面試必考
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比昭化網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式昭化網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋昭化地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
keepalived的功能,腳本也能實(shí)現(xiàn)
keepalive,主要是有VRRP
基于IP(第3層網(wǎng)絡(luò)層),port(第4層傳輸層),應(yīng)用層(第7層),保證服務(wù)正常運(yùn)行
master會(huì)定時(shí)給bakcup發(fā)廣播包,不發(fā)了backup就認(rèn)為master掛了,重新選舉,這個(gè)只能檢查本機(jī),重啟本機(jī),要配合LVS才能均衡,
直接yum install -y keepalived ipvsadm
或者源碼安裝
yum install kernel kernel-devel popt-devel openssl-devel gcc gcc-c++ -y &&
wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz &&
tar -zxf keepalived-1.2.1.tar.gz && cd keepalived-1.2.1;
./configure --with-kernel-dir=/usr/src/kernels/2.6.32-696.1.1.el6.x86_64/
mkdir /etc/keepalived
\cp /usr/local/sbin/keepalived /usr/sbin/keepalived
\cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
\cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/keepalived
\cp -r /usr/local/etc/keepalived /etc/keepalived
cd /etc/keepalived
改conf文件如下,配置文件分三部分
第一部分全局配置,主要是改郵箱和路由ID,兩個(gè)機(jī)器要一樣
第二部分是配置虛擬IP,
第三部分寫檢查本機(jī)哪些服務(wù)
! Configuration File for keepalived #配置全局變量,全局主要是改郵件,發(fā)給誰(shuí)、從哪里發(fā)
global_defs {
notification_email {
wgkgood@139.com #配置接收?qǐng)?bào)警郵件
}
notification_email_from wgkgood@139.com #配置誰(shuí)發(fā)郵件
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL #路由id
}
# VIP1 VRRP協(xié)議 Config這一段的配置就是生成虛擬路由器
vrrp_instance VI_1 {
state BACKUP #master和backup,比優(yōu)先級(jí)更優(yōu)先
interface eth0 #發(fā)廣播包是用哪個(gè)網(wǎng)卡發(fā)
lvs_sync_daemon_inteface eth0
virtual_router_id 151 #兩臺(tái)的路由id是一樣的
priority 100 #優(yōu)先級(jí)
advert_int 5
nopreempt #不搶占,就選優(yōu)先級(jí)高也不搶占,這條加或不加
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress { ##虛擬ip地址,特別重要,可以回車配多個(gè)
192.168.1.204
}
notify_master #當(dāng)是matser執(zhí)行這個(gè)腳本
notify_backup
}
##這里寫檢查本機(jī)什么服務(wù),只能檢查本機(jī)
virtual_server 192.168.1.204 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.104 3306 {
weight 100
notify_down /data/sh/MySQL.sh #當(dāng)down了就執(zhí)行這個(gè)腳本
notify_up也可以
TCP_CHECK {
connect_timeout 10 #連接超時(shí)時(shí)間
nb_get_retry 3 #重連次數(shù)
delay_before_retry 3 #重連間隔時(shí)間
connect_port 80 #健康檢查的端口的端口
}
}
}
然后重啟/etc.init.d/keepalived restart
tail -fn 100 /var/log/message
如果沒(méi)有IPVS這個(gè)模塊,modprobe ip_vs加載這個(gè)模塊
通過(guò)ip addr list 可以看到虛擬IP配在了eth0上
TCP_CHECK {
connect_timeout 10 #連接超時(shí)時(shí)間
nb_get_retry 3 #重連次數(shù)
delay_before_retry 3 #重連間隔時(shí)間
connect_port 80 #健康檢查的端口的端口
}
1、上面是基于端口?;?、應(yīng)用:
注意:使用了腳本監(jiān)控Nginx或者M(jìn)YSQL,不需要虛擬服務(wù)器設(shè)置塊,也就是端口檢查塊。
vrrp_script chk_nginx {
script "/data/script/nginx.sh" #監(jiān)控服務(wù)腳本;
interval 2 #檢測(cè)時(shí)間間隔(執(zhí)行腳步間隔)
weight 2
}
#實(shí)例1
vrrp_instance VI_1 {
state MASTER #master和backup,比優(yōu)先級(jí)更優(yōu)先
interface eth0 #發(fā)廣播包是用哪個(gè)網(wǎng)卡發(fā)
lvs_sync_daemon_inteface eth0
virtual_router_id 151 #兩臺(tái)的路由id是一樣的
priority 100 #優(yōu)先級(jí)
advert_int 5
nopreempt #不搶占,就選優(yōu)先級(jí)高也不搶占,這條加或不加
authentication {
auth_type PASS
auth_pass 2222
}
#實(shí)例2
vrrp_instance VI_2 {
state BACKUP #master和backup,比優(yōu)先級(jí)更優(yōu)先
interface eth0 #發(fā)廣播包是用哪個(gè)網(wǎng)卡發(fā)
lvs_sync_daemon_inteface eth0
virtual_router_id 152 #兩臺(tái)的路由id是一樣的
priority 100 #優(yōu)先級(jí)
advert_int 5
nopreempt #不搶占,就選優(yōu)先級(jí)高也不搶占,這條加或不加
authentication {
auth_type PASS
auth_pass 2222
}
track_script { #以腳本為監(jiān)控chk_nginx;
chk_nginx
}
virtual_ipaddress { #設(shè)置vip
192.168.111.188
}
}
#其中/data/script/nginx.sh里的內(nèi)容:
#!/bin/bash
NUM=`ps -C nginx --no-header |wc -l`
if [ $NUM -eq 0 ];then
/etc/init.d/keepalived stop
sleep 30
/usr/local/nginx/sbin/nginx
/etc/init.d/keepalived start
fi
###
3、基于URL
把TCP_CHECK那部分改成
HTTP_GET{
url{ #檢查url,可以指定多個(gè)
path /
digest ATM #檢查后的摘要信息
status_code 200 #檢查的返回狀態(tài)碼,
}
從上
把state改成backup,priority改成90,檢查的服務(wù)器改成本機(jī)
然后就可以用LAP連虛擬服務(wù)器的mysql了
keepalived的核心:
當(dāng)端口停了,執(zhí)行腳本,down.sh
然后VIP才會(huì)切到從上
腳本內(nèi)容:
/etc/init,d/keepalived stop
sleep 5
/etc/init,d/keepalived start
監(jiān)控的服務(wù) restart
從上也要有這個(gè)腳本
這個(gè)腳本要給o+x權(quán)限
互為主主
兩個(gè)實(shí)例兩個(gè)虛擬服務(wù)器,各一個(gè)VIP,互為主備,路由id不能一樣
Heartbeat
兩臺(tái)機(jī)器必須要用網(wǎng)線連起來(lái)
LVS
基于IP實(shí)現(xiàn)負(fù)載均衡是目前負(fù)載調(diào)度器中效率最高的
有NAT,TUN,DR模式
有算法:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR為輪詢模式,LC為最少連接模式)
NAT方式:VIP所在主機(jī)可以為公網(wǎng)IP,進(jìn)出都要做個(gè)地址轉(zhuǎn)換,效率比較低。用戶請(qǐng)求LVS到達(dá)director(主管),director將請(qǐng)求的報(bào)文的目標(biāo)地址和端口改成后端的realserver地址和端口,請(qǐng)求到達(dá)realserver,realserver將數(shù)據(jù)返給director,director再把數(shù)據(jù)返給用戶(兩次請(qǐng)求都要經(jīng)過(guò)director),訪問(wèn)量大的話director會(huì)成為瓶頸。后端不能超過(guò)20臺(tái)。
DR原理(將VIP配在后端realserver上):IP為內(nèi)網(wǎng),用戶請(qǐng)求LVS到達(dá)director,director將請(qǐng)求目標(biāo)的MAC地址改成realserver的MAC地址,目標(biāo)IP還是VIP,源IP還是用戶IP,然后director將報(bào)文發(fā)送給realserver,realserver發(fā)現(xiàn)目標(biāo)IP和MAC都是自己。如果用戶跟realserver不在一個(gè)網(wǎng)段,則通過(guò)網(wǎng)關(guān)返回給用戶,如果在同一網(wǎng)段,將請(qǐng)求直接返給用戶。 效率最高,互聯(lián)網(wǎng)企業(yè)。這個(gè)要求LVS和后端服務(wù)器在一個(gè)網(wǎng)絡(luò)里,不然沒(méi)法實(shí)現(xiàn)VIP配在后端realserver上。
TUN原理:跟DR類似,也是改變封裝MAC地址,多了一層隧道加密,比DR效率略低,比NAT高。
DR模式,后端帶幾百臺(tái)nginx
cd /usr/src/
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
版本不同需要的這個(gè)軟件版本可能也不同
yum install kernel kernel-devel gcc gcc-c++ -y
ln -s /usr/src/kernels/2.6* /usr/src/linux
tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make install
ipvsadm看安裝成功沒(méi)
參數(shù)說(shuō)明:
-A 增加一臺(tái)虛擬服務(wù)器地址。-D刪除
-t 虛擬服務(wù)器提供的是tcp服務(wù)。
-s 使用的調(diào)度算法。
-a 在虛擬服務(wù)器中增加一臺(tái)后端真實(shí)服務(wù)器。
-r 指定真實(shí)服務(wù)器地址。
-m 設(shè)置當(dāng)前轉(zhuǎn)發(fā)方式為NAT模式;-g為直接路由模式;-i 模式為隧道模式。
-w 后端真實(shí)服務(wù)器的權(quán)重。
LVS安裝完畢之后,需要進(jìn)行配置,配置的步驟有兩步,第一步為定義端口服務(wù),第二步為添加realserver后端服務(wù)。
ipvsadm -A -t 192.168.1.200:80 -s rr #添加VIP
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.103 -g -w 2
在后端realserver上,在回環(huán)地址上配上VIP
VIP=192.168.1.201
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
這樣綁重啟了就失效了
ipvsadm-save >/tmp/lvs.txt保存LVS配置
ipvsadm-restore
route -n
看網(wǎng)關(guān)
然后抑制ARP,不抑制的話所有賠了VIP的都可以響應(yīng)了
客戶端抑制ARP腳本,企業(yè)里客戶端可能不止一個(gè)VIP,就把lo:0換成1 2 3 4
vim auto_realserver.sh
#!/bin/sh
#LVS Client Server
VIP=192.168.2.200
case $1 in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
exit 0
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped OK"
exit 1
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
###
壓測(cè)工具h(yuǎn)ttp-tools
ab -c 5000 -n 10000 http://192.168.1.200/
watch ipvsadm -L -n 可以實(shí)時(shí)看壓測(cè)
keepalived+LVS或者腳本檢查+LVS
服務(wù)端配置keepalived即可,兩個(gè)LVS服務(wù)器。realserver客戶端執(zhí)行腳本
安裝keepalived
寫入配置文件
! Configuration File for keepalived
global_defs {
notification_email {
wgkgood@163.com
}
notification_email_from wgkgood@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 100
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR #這里配轉(zhuǎn)發(fā)方式
# persistence_timeout 60 #這里配置會(huì)話保持時(shí)間
protocol TCP
real_server 192.168.1.102 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.103 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
################
realserver端
tcpdump -nn port 80 nn是顯示網(wǎng)絡(luò)地址
tcpdump -nn port 22 and host 192.168.0.116看本機(jī)有哪些連22端口的
LVS排錯(cuò)
ping網(wǎng)站域名,看能否解析到IP
登錄LVS服務(wù)器,ipvsadm -Ln查看信息,tail -fn /var/log/messages看報(bào)錯(cuò)
看zabbix監(jiān)控服務(wù)器有沒(méi)有報(bào)警
看keepalived.conf配置文件有沒(méi)有錯(cuò)誤
看客戶端的auto——realserver.sh腳本是否啟動(dòng)
看realserver有沒(méi)有掛(nginx)
如果后端nginx能接收到LVS的請(qǐng)求,但是不返回,說(shuō)明nginx端VIP沒(méi)有起來(lái)
LVS、haproxy與nginx均衡區(qū)別
LVS是4層網(wǎng)絡(luò)層,haproxy是又有7層又有4層,nginx是7層應(yīng)用層
LVS優(yōu)點(diǎn)
LVS抗負(fù)載能力強(qiáng)、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒(méi)有流量的產(chǎn)生,這個(gè)特點(diǎn)也決定了它在負(fù)載均衡軟件里的性能最強(qiáng)的,也保證了均衡器I/O的性能不會(huì)受到大流量的影響
LVS是專門的負(fù)載均衡軟件,對(duì)任何應(yīng)用都可以做負(fù)載均衡
工作穩(wěn)定,因?yàn)槠浔旧砜关?fù)載能力很強(qiáng),自身有完整的雙機(jī)熱備方案,目前用的比較多的是lvs+keepalived,比較大型的用的多的是lvs+heartbeat
nginx的優(yōu)點(diǎn):
1:Nginx的高并發(fā),同時(shí)能承載上萬(wàn)個(gè)并發(fā)連接;
2:nginx有充足的第三方功能模塊的支持,主要通過(guò)upstream模塊進(jìn)行負(fù)載均衡;
3:nginx對(duì)網(wǎng)絡(luò)的依賴較小,理論上只要Ping得通,網(wǎng)頁(yè)訪問(wèn)正常,nginx就能連得通;
4:工作在網(wǎng)絡(luò)的7層之上,可以針對(duì)http應(yīng)用做一些分流的策略,它的正則規(guī)則比haproxy更為強(qiáng)大和靈活,這也是它目前廣泛流行的主要原因之一,nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于lvs了。
nginx的缺點(diǎn):
1:將Nginx當(dāng)做反向代理時(shí),負(fù)載均衡功能不是很好,對(duì)后端服務(wù)器的健康檢查功能較弱;
2:nginx僅能支持http、https和email協(xié)議,這樣就在適用范圍上面小些,這個(gè)是它的缺點(diǎn);
3:nginx只支持通過(guò)端口來(lái)檢測(cè),不支持通過(guò)url來(lái)檢測(cè)。
keepalived+mysql
msyql主down機(jī)了,可以手動(dòng)換成從的IP,也可以自動(dòng)切換,用keepalived,heartbeat