centos6.2,64位系統搭建LVS+Keepalived(DR模式)

最近公司網站訪問又見瓶頸,爲了緩解壓力,決定用LVS+Keepalived來實現負載均衡.在前面的文章中已經寫過了用NAT模式來實現負載均衡 http://duyunlong.blog.51cto.com/1054716/716138,而今天用的是DR模式,其實NAT跟DR模式,各有優缺點,根據實際狀況來選擇適合本身的。下面看下具體步驟以及注意事項。html

拓撲圖以下:linux

135322133.jpg

首先看下我用的系統,系統爲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

很是成功!!!

相關文章
相關標籤/搜索