您好,登錄后才能下訂單哦!
面試必考
keepalived的功能,腳本也能實現
keepalive,主要是有VRRP
基于IP(第3層網絡層),port(第4層傳輸層),應用層(第7層),保證服務正常運行
master會定時給bakcup發廣播包,不發了backup就認為master掛了,重新選舉,這個只能檢查本機,重啟本機,要配合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,兩個機器要一樣
第二部分是配置虛擬IP,
第三部分寫檢查本機哪些服務
! Configuration File for keepalived #配置全局變量,全局主要是改郵件,發給誰、從哪里發
global_defs {
notification_email {
wgkgood@139.com #配置接收報警郵件
}
notification_email_from wgkgood@139.com #配置誰發郵件
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL #路由id
}
# VIP1 VRRP協議 Config這一段的配置就是生成虛擬路由器
vrrp_instance VI_1 {
state BACKUP #master和backup,比優先級更優先
interface eth0 #發廣播包是用哪個網卡發
lvs_sync_daemon_inteface eth0
virtual_router_id 151 #兩臺的路由id是一樣的
priority 100 #優先級
advert_int 5
nopreempt #不搶占,就選優先級高也不搶占,這條加或不加
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress { ##虛擬ip地址,特別重要,可以回車配多個
192.168.1.204
}
notify_master #當是matser執行這個腳本
notify_backup
}
##這里寫檢查本機什么服務,只能檢查本機
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 #當down了就執行這個腳本
notify_up也可以
TCP_CHECK {
connect_timeout 10 #連接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 80 #健康檢查的端口的端口
}
}
}
然后重啟/etc.init.d/keepalived restart
tail -fn 100 /var/log/message
如果沒有IPVS這個模塊,modprobe ip_vs加載這個模塊
通過ip addr list 可以看到虛擬IP配在了eth0上
TCP_CHECK {
connect_timeout 10 #連接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 80 #健康檢查的端口的端口
}
1、上面是基于端口。基于2、應用:
注意:使用了腳本監控Nginx或者MYSQL,不需要虛擬服務器設置塊,也就是端口檢查塊。
vrrp_script chk_nginx {
script "/data/script/nginx.sh" #監控服務腳本;
interval 2 #檢測時間間隔(執行腳步間隔)
weight 2
}
#實例1
vrrp_instance VI_1 {
state MASTER #master和backup,比優先級更優先
interface eth0 #發廣播包是用哪個網卡發
lvs_sync_daemon_inteface eth0
virtual_router_id 151 #兩臺的路由id是一樣的
priority 100 #優先級
advert_int 5
nopreempt #不搶占,就選優先級高也不搶占,這條加或不加
authentication {
auth_type PASS
auth_pass 2222
}
#實例2
vrrp_instance VI_2 {
state BACKUP #master和backup,比優先級更優先
interface eth0 #發廣播包是用哪個網卡發
lvs_sync_daemon_inteface eth0
virtual_router_id 152 #兩臺的路由id是一樣的
priority 100 #優先級
advert_int 5
nopreempt #不搶占,就選優先級高也不搶占,這條加或不加
authentication {
auth_type PASS
auth_pass 2222
}
track_script { #以腳本為監控chk_nginx;
chk_nginx
}
virtual_ipaddress { #設置vip
192.168.111.188
}
}
#其中/data/script/nginx.sh里的內容:
#!/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,可以指定多個
path /
digest ATM #檢查后的摘要信息
status_code 200 #檢查的返回狀態碼,
}
從上
把state改成backup,priority改成90,檢查的服務器改成本機
然后就可以用LAP連虛擬服務器的mysql了
keepalived的核心:
當端口停了,執行腳本,down.sh
然后VIP才會切到從上
腳本內容:
/etc/init,d/keepalived stop
sleep 5
/etc/init,d/keepalived start
監控的服務 restart
從上也要有這個腳本
這個腳本要給o+x權限
互為主主
兩個實例兩個虛擬服務器,各一個VIP,互為主備,路由id不能一樣
Heartbeat
兩臺機器必須要用網線連起來
LVS
基于IP實現負載均衡是目前負載調度器中效率最高的
有NAT,TUN,DR模式
有算法:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR為輪詢模式,LC為最少連接模式)
NAT方式:VIP所在主機可以為公網IP,進出都要做個地址轉換,效率比較低。用戶請求LVS到達director(主管),director將請求的報文的目標地址和端口改成后端的realserver地址和端口,請求到達realserver,realserver將數據返給director,director再把數據返給用戶(兩次請求都要經過director),訪問量大的話director會成為瓶頸。后端不能超過20臺。
DR原理(將VIP配在后端realserver上):IP為內網,用戶請求LVS到達director,director將請求目標的MAC地址改成realserver的MAC地址,目標IP還是VIP,源IP還是用戶IP,然后director將報文發送給realserver,realserver發現目標IP和MAC都是自己。如果用戶跟realserver不在一個網段,則通過網關返回給用戶,如果在同一網段,將請求直接返給用戶。 效率最高,互聯網企業。這個要求LVS和后端服務器在一個網絡里,不然沒法實現VIP配在后端realserver上。
TUN原理:跟DR類似,也是改變封裝MAC地址,多了一層隧道加密,比DR效率略低,比NAT高。
DR模式,后端帶幾百臺nginx
cd /usr/src/
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
版本不同需要的這個軟件版本可能也不同
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看安裝成功沒
參數說明:
-A 增加一臺虛擬服務器地址。-D刪除
-t 虛擬服務器提供的是tcp服務。
-s 使用的調度算法。
-a 在虛擬服務器中增加一臺后端真實服務器。
-r 指定真實服務器地址。
-m 設置當前轉發方式為NAT模式;-g為直接路由模式;-i 模式為隧道模式。
-w 后端真實服務器的權重。
LVS安裝完畢之后,需要進行配置,配置的步驟有兩步,第一步為定義端口服務,第二步為添加realserver后端服務。
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上,在回環地址上配上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 </tmp/lvs.txt回復LVS配置
route -n
看網關
然后抑制ARP,不抑制的話所有賠了VIP的都可以響應了
客戶端抑制ARP腳本,企業里客戶端可能不止一個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
###
壓測工具http-tools
ab -c 5000 -n 10000 http://192.168.1.200/
watch ipvsadm -L -n 可以實時看壓測
keepalived+LVS或者腳本檢查+LVS
服務端配置keepalived即可,兩個LVS服務器。realserver客戶端執行腳本
安裝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 #這里配轉發方式
# persistence_timeout 60 #這里配置會話保持時間
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是顯示網絡地址
tcpdump -nn port 22 and host 192.168.0.116看本機有哪些連22端口的
LVS排錯
ping網站域名,看能否解析到IP
登錄LVS服務器,ipvsadm -Ln查看信息,tail -fn /var/log/messages看報錯
看zabbix監控服務器有沒有報警
看keepalived.conf配置文件有沒有錯誤
看客戶端的auto——realserver.sh腳本是否啟動
看realserver有沒有掛(nginx)
如果后端nginx能接收到LVS的請求,但是不返回,說明nginx端VIP沒有起來
LVS、haproxy與nginx均衡區別
LVS是4層網絡層,haproxy是又有7層又有4層,nginx是7層應用層
LVS優點
LVS抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的,也保證了均衡器I/O的性能不會受到大流量的影響
LVS是專門的負載均衡軟件,對任何應用都可以做負載均衡
工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,目前用的比較多的是lvs+keepalived,比較大型的用的多的是lvs+heartbeat
nginx的優點:
1:Nginx的高并發,同時能承載上萬個并發連接;
2:nginx有充足的第三方功能模塊的支持,主要通過upstream模塊進行負載均衡;
3:nginx對網絡的依賴較小,理論上只要Ping得通,網頁訪問正常,nginx就能連得通;
4:工作在網絡的7層之上,可以針對http應用做一些分流的策略,它的正則規則比haproxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,nginx單憑這點可利用的場合就遠多于lvs了。
nginx的缺點:
1:將Nginx當做反向代理時,負載均衡功能不是很好,對后端服務器的健康檢查功能較弱;
2:nginx僅能支持http、https和email協議,這樣就在適用范圍上面小些,這個是它的缺點;
3:nginx只支持通過端口來檢測,不支持通過url來檢測。
keepalived+mysql
msyql主down機了,可以手動換成從的IP,也可以自動切換,用keepalived,heartbeat
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。