最近公司網站訪問又見瓶頸,爲了緩解壓力,決定用LVS+Keepalived來實現負載均衡.在前面的文章中已經寫過了用NAT模式來實現負載均衡 http://duyunlong.blog.51cto.com/1054716/716138,而今天用的是DR模式,其實NAT跟DR模式,各有優缺點,根據實際狀況來選擇適合本身的。下面看下具體步驟以及注意事項。html
拓撲圖以下:linux
首先看下我用的系統,系統爲centos6.2,64位系統,用getconf LONG_BIT,和uname -a均可以查看apache
[root@lvs-master src]# getconf LONG_BIT 64 [root@lvs-master src]# uname -a Linux lvs-master 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
而後分析下搭建這個LVS+Keepalived(DR)須要的關鍵步驟及注意事項,第1、DR模式主要是靠虛擬IP來實現,客戶端訪問服務器首先會找keeaplived服務器,而後由keepalived服務器調度找到真實機,最後真實機經過本身的虛擬IP直接返回給客戶端。那麼這裏有個疑問了,爲何每一臺機器上都有虛擬IP,而客戶端訪問卻單單找keepalived?那是由於keepalived服務器在不停發出例如:我就你要找的IP的信號,因此客戶端很容易發現本身須要訪問的IP而找到keepalived服務器。這個能夠經過日誌來發現。那麼咱們就須要在除了keepalived服務器以外的每臺真實機上創建一個虛擬IP。這裏又有疑問keepalived服務器爲何不須要創建虛擬IP,那是由於keepalived會本身生成虛擬IP,因此不必本身去創建。第2、要注意的就是popt-static-1.13-7.el6.x86_64.rpm這個包,不裝這個包,安裝ipvs的時候會報錯。第3、keepalived安裝的時候必定要指定內核,要否則keepalived啓動後只有兩進程,正常是三個。若是不指定內核即便keepalived啓動了,keepalived也發現不了真實機。第4、就是一些零碎的配置。vim
[root@lvs-master src]# wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz [root@lvs-master src]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz [root@lvs-master src]# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/popt-static-1.13-7.el6.x86_64.rpm
而後,在LVS主跟備份上安裝centos
[root@lvs-master src]# rpm -ivh popt-static-1.13-7.el6.x86_64.rpm [root@lvs-master src]# yum -y install kernel-devel make gcc openssl-devel libnl* popt* [root@lvs-master src]# ln -s /usr/src/kernels/2.6.32-220.13.1.el6.x86_64/ /usr/src/linux [root@lvs-master src]# tar -zxvf ipvsadm-1.26.tar.gz [root@lvs-master src]# cd ipvsadm-1.26/ [root@lvs-master ipvsadm-1.26]# make [root@lvs-master ipvsadm-1.26]# make install [root@lvs-master ipvsadm-1.26]# cd .. [root@lvs-master src]# tar -zxvf keepalived-1.2.2.tar.gz [root@lvs-master src]# cd keepalived-1.2.2/ [root@lvs-master keepalived-1.2.2]# ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-358.2.1.el6.x86_64/ [root@lvs-master keepalived-1.2.2]# make && make install [root@lvs-master keepalived-1.2.2]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ [root@lvs-master keepalived-1.2.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ [root@lvs-master keepalived-1.2.2]# mkdir /etc/keepalived [root@lvs-master keepalived-1.2.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ [root@lvs-master keepalived-1.2.2]# cp /usr/local/sbin/keepalived /usr/sbin/
在兩臺LVS上分別配置keepalived, vim /etc/keepalived/keepalived.conf bash
[root@lvs-master src]# vim /etc/keepalived/keepalived.conf #! Configuration File for keepalived global_defs { router_id LVS_MASTER #網上資料說這個值也須要修改,具體不詳,以前咱們線上的主備就一直是同樣的 ^ ^仍是修改一下吧! } ##################第一部分################### vrrp_instance VI_1 { state MASTER #LVS_Backup上修改爲BACKUP interface eth0 virtual_router_id 60 #默認51 主從都修改成60 priority 100 #LVS_Backup上修改爲80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.100 } } ##################第二部分################### virtual_server 192.168.10.100 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.10.3 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 connect_port 80 } } real_server 192.168.10.4 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 connect_port 80 } } }
在LVS_Backup上也進行配置,只要把state MASTER改成BACKUP
,priority
100
改成90,而後咱們在真實機上配置虛擬IP啓動腳本服務器
[root@real-1 src]# vim /etc/init.d/realserver.sh #!/bin/bash SNS_VIP=192.168.10.100 . /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_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" ;; stop) ifconfig lo:0 down route del $SNS_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" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
在兩臺真是機器上面配置apache並啓動realserver.sh負載均衡
[root@real-1 src]# yum -y install httpd [root@real-1 src]# cd /var/www/html/ [root@real-1 html]# cat index.html < h1>RealServer 192.168.10.3</h1> [root@real-1 html]# /etc/init.d/httpd start [root@real-1 src]# /etc/init.d/realserver.sh start
配置完後咱們來測試下:分別啓動Keepalivedcurl
[root@lvs-master src]# chkconfig keepalived on [root@lvs-master src]# /etc/init.d/keepalived restart [root@lvs-master src]# ipvsadm IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:http rr persistent 50 -> 192.168.10.3:http Route 1 0 0 -> 192.168.10.4:http Route 1 0 0
關閉LVS_MASTER,而後查看LVS_backup日誌ide
[root@lvs-backup src]# tail -f /var/log/messages Mar 21 07:22:28 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE Mar 21 07:22:29 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE Mar 21 07:22:29 host2 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs. Mar 21 07:22:29 host2 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.10.100 added Mar 21 07:22:29 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.10.100
測試訪問
[root@test html]# curl http://192.168.10.100 < h1>RealServer 192.168.10.4</h1>
而後,啓動LVS_MASTER查看LVS_BACKUP日誌
[root@lvs-backup src]# tail -f /var/log/messages Mar 21 07:26:20 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert Mar 21 07:26:20 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE Mar 21 07:26:20 host2 Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs. Mar 21 07:26:20 host2 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.10.100 removed
很是成功!!!