今天簡單寫下lvs+keepalive實現負載均衡和高可用的功能,僅供參考!關於它們的詳細介紹這裏就不描述了,你們能夠自行搜索下!php
lvs+keepalived網絡拓撲圖:html
1、準備一個vip和4臺虛擬機:linux
vip:192.168.1.100 | 向外提供服務的ip,通常是綁定域名的 | |
192.168.1.10 | LB1_master調度器IP | |
192.168.1.13 | LB2_slave調度器IP | |
192.168.1.11 | nginx服務器IP | |
192.168.1.12 | apache服務器IP |
2、安裝準備工做nginx
lsmod|grep ip_vs cat /etc/redhat-release uname –rm ln –s /usr/src/kernels/內核版本 /usr/src/linux ln -s /usr/src/kernels/2.6.32-504.12.2.el6.x86_64/ /usr/src/linux #若tab沒有內核版本號出來,安裝kernel-devel yum install kernel-devel libnl* popt* –y
#ipvsadm下載地址(注意版本)算法
http://www.linuxvirtualserver.org/software/ipvs.htmlapache
#安裝LVS命令後端
tar zxvf ipvsadm-1.26.tar.gz cd ipvsadm-1.26 make && make install #將ipvsadm加入內核模塊的方法有如下兩種 modprobe ip_vs /sbin/ipvsadm #查看下是否加載成功,如有如下內容表示安裝成功 [root@php ipvsadm-1.26]# lsmod |grep ip_vs ip_vs 125694 0 libcrc32c 1246 1 ip_vs ipv6 334932 25 ip_vs
3、LB添加LVS轉發bash
1.若是有域名的話,將域名解析到公網IP服務器
2.配置LVS虛擬IP,就是咱們所謂的VIP
cookie
ifconfig eth0:0 192.168.1.100/24 up route add -host 192.168.1.100 dev eth0
3.檢查結果
ifconfig eth0:0 Link encap:Ethernet HWaddr 08:00:27:03:F9:0D inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
4.配置添加LVS服務並添加RS
在這裏,有必要介紹下添加集羣服務的規則:
格式: ipvsadm -A|E -t|u|f service-address [-s scheduler]
參數:
[-p [timeout]] [-M netmask]
-A: 表示添加一個新的集羣服務(add)
-E: 編輯一個集羣服務(edit)
-t: 表示tcp協議(tcp)
-u: 表示udp協議(udp)
-f: 表示firewall-Mark,防火牆標記(firewall)
service-address: 集羣服務的IP地址,即VIP
-s 指定調度算法
-p 持久鏈接時長,如#ipvsadm -Lcn ,查看持久鏈接狀態
-M 定義掩碼(netmask)
ipvsadm -D -t|u|f service-address 刪除一個集羣服務(delete)
ipvsadm -C 清空全部的規則(clean)
ipvsadm -R 從新載入規則(reload)
ipvsadm -S [-n] 保存規則(save)
向集羣服務添加RealServer規則:
添加RealServer規則
格式:ipvsadm -a|e -t|u|f service-address -r server-address
參數:
[-g|i|m] [-w weight]
-a 添加一個新的realserver規則
-e 編輯realserver規則
-t tcp協議
-u udp協議
-f firewall-Mark,防火牆標記
service-address realserver的IP地址(真實服務器的IP)
-g 表示定義爲LVS-DR模型
-i 表示定義爲LVS-TUN模型
-m 表示定義爲LVS-NAT模型
-w 定義權重,後面跟具體的權值
ipvsadm -d -t|u|f service-address -r server-address --刪除一個realserver
#設置超時(可選) ipvsadm --set 30 5 60 #添加一個實例(相似虛擬主機)用-A ipvsadm -A -t 192.168.1.100:80 -s wrr –p 20 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11 -g -w 1 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12 -g -w 1
5.檢查結果
ipvsadm -L
4、LB刪除LVS方法
#刪除virtual server用ipvsadm –D ipvsadm –D –t 192.168.1.10 –s wrr #刪除節點用ipvsadm -d ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.12:80
5、RS配置lo,而且綁定vip
ifconfig lo:0 192.168.1.100/32 up route add –host 192.168.1.100 dev lo
1.RS端抑制arp廣播
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
6、KeepAlived服務高可用
安裝方法一: yum install openssl* -y yum install kernel-devel libnl* popt* –y ln -s /usr/src/kernels/2.6.32-504.8.1.el6.x86_64/ /usr/src/linux tar zxvf keepalived-1.1.19.tar.gz cd keepalived-1.1.19 ./configure make && make install
安裝方法二: tar zxvf keepalived-1.1.19.tar.gz cd keepalived-1.1.19 ./configure \ --mandir=/usr/loacl/share/man \ --with-kernel-dir=/usr/src/kernels/2.6.32-504.8.1.el6.x86_64/ make && make install
操做命令:
/bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ /bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived –p /bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ /bin/cp /usr/local/sbin/keepalived /usr/sbin/ /etc/init.d/keepalived start [root@apache ~]# /etc/init.d/keepalived start Starting keepalived: [ OK ] [root@apache ~]#ps -ef|grep keep root 2864 1 0 07:58 ? 00:00:00 keepalived -D root 2866 2864 0 07:58 ? 00:00:00 keepalived -D root 2867 2864 0 07:58 ? 00:00:00 keepalived -D root 2871 1101 0 07:58 pts/0 00:00:00 grep keep [root@apache ~]# /etc/init.d/keepalived stop =è成功後中止keepalived服務 Stopping keepalived: [ OK ]
7、在主(master)keepalived配置keepalived.conf配置文件
! Configuration File for keepalived global_defs { notification_email { 291406980@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 10.0.0.1 smtp_connect_timeout 30 router_id LVS_7 } vrrp_instance VI_1 { state MASTER #由於這裏是主,因此選用MASTER interface eth0 virtual_router_id 55 priority 150 #這個值必定要比從(slave)的大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 #vip } }
8、在從(slave)的keepalived配置keepalived.conf文件
! Configuration File for keepalived global_defs { notification_email { 291406980@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 10.0.0.1 smtp_connect_timeout 30 router_id LVS_2 } vrrp_instance VI_1 { state BACKUP #這裏是從(slave),選用BACKUP interface eth0 virtual_router_id 55 priority 100 #這個值小於主(master)的150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 #vip } }
9、最後主從都需重啓keepalived
/etc/init.d/keepalived start
我這裏分別是兩個站點:apache和nginx!在輸入192.168.1.100這個vip的時候,會調度到不一樣的站點上面!如下是截圖:
10、LVS集羣分發請求RS負載不均的問題
主要有如下幾點:
1.會話保持的緣由,儘可能不要在負載均衡器上作會話保持
2.LVS自身的會話保持參數設置問題,要優化,儘可能用cookies或者session替代
3.LVS調度算法設置問題,例如rr wrr wlc lc 算法
4.後端RS節點的會話保持參數,例如apache的keealive參數
5.訪問量少的狀況,不均衡的現象比較明顯
6.用戶發送的請求時間長短,和請求資源多少有關