部署LVS+Keepalived集群

系统:CentOS 5.8 X86_64
软件:ipvsadm-1.24.tar.gz keepalived-1.2.7.tar.gz
 
拓扑:
部署LVS+Keepalived集群_第1张图片
 
一、安装ipvsadm(Master DR和Backup DR都安装)
1.查看系统内核版本,以下载相应的ipvsadm软件包(或使用系统的自带rpm安装)
 
2.下载内核对应的ipvsadm软件包
# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
 
3.创建内核文件的软链接
# ln -s /usr/src/kernels/2.6.18-308.el5-x86_64/ /usr/src/linux
 
如没有创建软链接,在编译ipvsadm时将出现下面的错误:
# make
make -C libipvs
make[1]: Entering directory `/usr/local/src/ipvsadm-1.24/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -O2 -I /usr/src/linux/include  -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
In file included from libipvs.c:23:
libipvs.h:14:23: error: net/ip_vs.h: No such file or directory
In file included from libipvs.c:23:
libipvs.h:119: error: expected ‘)’ before ‘fwmark’
libipvs.c:27: error: field ‘svc’ has incomplete type
libipvs.c:28: error: field ‘dest’ has incomplete type
libipvs.c: In function ‘ipvs_init’:
 
4.安装ipvsadm
# tar xvf ipvsadm-1.24.tar.gz -C /usr/local/src/
# cd /usr/local/src/ipvsadm-1.24/
# make && make install
 
# yum -y install popt popt-devel libnl libnl-devel popt-static openssl-devel  #安装ipvsadm报错
-----------------------------------------------------
系统:CentOS 6.3 X86_64
软件:ipvsadm-1.25
 
1、安装ipvsadm
# yum -y install ipvsadm
 
2、安装keepalived的依赖包
# yum -y install openssl-devel popt-devel libnl-devel
 
# ldconfig
 
二、安装keepalived(Master DR和Backup DR都安装)
1.下载keepalived
# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
 
2.安装keepalived
# tar xvf keepalived-1.2.7.tar.gz -C /usr/local/src/
# cd /usr/local/src/keepalived-1.2.7/
# ./configure && make && make install
 
注:编译时出现下面的警告
configure: WARNING: keepalived will be built without libnl support.
可以通过安装libnl-devel解决,需要根据keepalived的版本安装相应版本的libnl包
 
3.拷贝配置文件、启动脚本等
# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived
# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/sbin/keepalived /usr/sbin/
 
三、根据lvs的调度算法、工作模式定义keepalived配置
这里使用DR模式、rr调度算法;
MASTER DR:
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
#全局定义:设置keepalived的通知机制和标识
global_defs {
   notification_email {  #定义接收邮件的地址,一行对应一个
   }
   notification_email_from [email protected]
   smtp_server 10.0.65.29 #指定smtp服务器地址
   smtp_connect_timeout 30
   router_id LVS_DEVEL  #定义运行keepalived机器的标识
}
 
#VRRP实例组定义:VRRP实例就表示在上面开启了VRRP协议,这个实例说明了VRRP的一些特性,如主从、VRID等,可以在每个接口上开启一个实例。
vrrp_instance VI_1 {
    state MASTER #指定实例的初始状态,高优先级的会竞选为master,
    interface eth0 #实例绑定的网卡
    virtual_router_id 51 #VRID标记(0...255),MASTER和BACKUP要一致
    priority 100 #数字越高级别越高,master要高于backup至少50
    advert_int 1 #检查间隔,默认1s
    authentication {  #设置认证
        auth_type PASS  #认证方式,支持PASS和AH
        auth_pass 1111  #认证的密码
    }
    virtual_ipaddress {  #里面指定漂移地址(VIP)
        10.0.37.10
    }
}
 
#LVS配置
virtual_server 10.0.37.10 80 {
    delay_loop 6 #服务轮询的延时时间
    lb_algo rr #lvs的调度算法
    lb_kind DR #lvs集群模式
    nat_mask 255.255.255.0
    #persistence_timeout 50 #会话保持时间(秒),测试方便取消设置
    protocol TCP #使用的协议是TCP
 
    real_server 10.0.37.5 80 {
        weight 1  #默认为1,0为失效
        TCP_CHECK { #后端服务器健康检查
            connect_timeout 3 #连接超时时间
            nb_get_retry 3 #重连次数
            delay_before_retry 3 #重连间隔时间(秒)
            connect_port 80
        }
    }
 
    real_server 10.0.37.6 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}


在DR模式下,后端web的端口和lvs的虚拟端口要一致,因为DR模式是根据MAC地址进行通信,数据包到后端节点目标IP和目标端口还是VIP和LVS的虚拟端口。

在LVS服务器上进行抓包:

# tcpdump port 80

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

13:27:19.304960 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [P.], seq 1029117032:1029117416, ack 1339309444, win 140, options [nop,nop,TS val 20412008 ecr 85752078], length 384

13:27:19.304997 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [P.], seq 0:384, ack 1, win 140, options [nop,nop,TS val 20412008 ecr 85752078], length 384

13:27:19.311642 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [.], ack 160, win 148, options [nop,nop,TS val 20412010 ecr 85778467], length 0

13:27:19.311651 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [.], ack 160, win 148, options [nop,nop,TS val 20412010 ecr 85778467], length 0

13:28:24.376686 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [F.], seq 384, ack 161, win 148, options [nop,nop,TS val 20428277 ecr 85843533], length 0

13:28:24.376749 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [F.], seq 384, ack 161, win 148, options [nop,nop,TS val 20428277 ecr 85843533], length 0


在后端web服务器进行抓包:

# tcpdump port 80

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

13:27:35.698180 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [P.], seq 1029117032:1029117416, ack 1339309444, win 140, options [nop,nop,TS val 20412008 ecr 85752078], length 384

13:27:35.698485 IP 10.0.37.8.http > 192.168.24.186.45320: Flags [P.], seq 1:160, ack 384, win 139, options [nop,nop,TS val 85778467 ecr 20412008], length 159

13:27:35.704615 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [.], ack 160, win 148, options [nop,nop,TS val 20412010 ecr 85778467], length 0

13:28:40.764000 IP 10.0.37.8.http > 192.168.24.186.45320: Flags [F.], seq 160, ack 384, win 139, options [nop,nop,TS val 85843533 ecr 20412010], length 0

13:28:40.770129 IP 192.168.24.186.45320 > 10.0.37.8.http: Flags [F.], seq 384, ack 161, win 148, options [nop,nop,TS val 20428277 ecr 85843533], length 0

13:28:40.770160 IP 10.0.37.8.http > 192.168.24.186.45320: Flags [.], ack 385, win 139, options [nop,nop,TS val 85843539 ecr 20428277], length 0


BACKUP DR:
! Configuration File for keepalived
 
global_defs {
   notification_email {
   }
   notification_email_from [email protected]
   smtp_server 10.0.65.29
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state BACKUP  #备机使用BACKUP
    interface eth0
    virtual_router_id 51
    priority 50  #备机的优先级要低于MASTER
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.37.10
    }
}
 
virtual_server 10.0.37.10 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    #persistence_timeout 50
    protocol TCP
 
    real_server 10.0.37.5 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
 
    real_server 10.0.37.6 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
 
}
 
MASTER DR和BACKUP DR都开启路由转发:
echo "1" > /proc/sys/net/ipv4/ip_forward
 
固定到配置文件:
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
 
四、启动keepalived服务(Master DR和Backup DR都启动)
# /etc/init.d/keepalived start
 
查看日志:
# tail -f /var/log/messages
部署LVS+Keepalived集群_第2张图片
 
查看绑定的VIP地址:
# ip add show eth0
 
查看lvs的状态:
# ipvsadm -Ln
部署LVS+Keepalived集群_第3张图片
 
五、LVS DR模式下配置后端服务器
Linux服务器:
1.绑定VIP地址
# ifconfig lo:0 10.0.37.10 netmask 255.255.255.255 broadcast 10.0.37.10
# route add -host 10.0.37.10 dev lo:0
 
2.解决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
 
永久的配置:
1.绑定VIP地址
# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.0.37.10
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
 
2.解决ARP问题
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
 
Windows服务器(server 2008):
1."控制面板"-->"设备管理器"-->随意选择一个设备,选择"操作"-->"添加过时硬件",如下图:
部署LVS+Keepalived集群_第4张图片
 
部署LVS+Keepalived集群_第5张图片
 
点击"下一步"-->选择"安装我手动从列表选择的硬件(高级)",如下图:
部署LVS+Keepalived集群_第6张图片
 
选择"网络适配器"-->选择"下一步",如下图:
部署LVS+Keepalived集群_第7张图片
 
在厂商列表中选择"Microsoft"-->在网络适配器列表中选择"Microsoft Loopback Adapter"-->点击"下一步",如下图:
 
部署LVS+Keepalived集群_第8张图片
 
部署LVS+Keepalived集群_第9张图片
 
部署LVS+Keepalived集群_第10张图片
 
部署LVS+Keepalived集群_第11张图片
 
"控制面板"-->"网络和共享中心"-->"更改适配器设置",进行loopback网卡的ip地址设置,如下图:
 
部署LVS+Keepalived集群_第12张图片
 
在"开始"-->"运行"-->输入"regedit"打开注册表,修改掩码为"255.255.255.255"(通过搜索vip地址可以找到相应的键值),如下图:
我这里的键值路径为"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces\{7BFC1EF6-F328-4018-8607-197492DECFEA}"
 
部署LVS+Keepalived集群_第13张图片
 
开启端口的weakhostsend and weakhostreceive:
netsh interface ipv4 set interface "本地连接 2" weakhostreceive=enabled 
netsh interface ipv4 set interface "本地连接" weakhostreceive=enabled
netsh interface ipv4 set interface "本地连接" weakhostsend=enabled
 
注:本地连接为网卡设备的名称,在"控制面板"--"网络和共享中心"-->"更改适配器设置"页面可以看到。
 
部署LVS+Keepalived集群_第14张图片
 
六、测试
1.使用客户端浏览器测试
因是设置的轮询模式,使用浏览器不停刷新时,将会是在不同的后端服务器之间切换。
 
2.手工停止MASTER DR上的Keepalived服务
停止keepalived服务:
 
查看日志情况:
 
ping vip地址情况,延时加大,没有出现丢包:
部署LVS+Keepalived集群_第15张图片
 
3.重启启动MASTER DR上的keepalived服务
MASTER DR将重新接管VIP地址:
部署LVS+Keepalived集群_第16张图片
 
ping vip地址情况:
部署LVS+Keepalived集群_第17张图片
 
4.模拟MASTER DR上的网络出现问题
在MASTER DR上断开网络:
# cat test.sh
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
ifdown eth0
sleep 60
ifup eth0
 
查看BACKUP DR日志,已经成功接管VIP地址:
 
但是MASTER DR网络恢复后,不能自动切换到主,日志如下:
部署LVS+Keepalived集群_第18张图片
 
5.后端服务器故障
停止10.0.37.6的http服务,查看keepalived的日志情况:
 
查看LVS状态,已经成功将10.0.37.6剔除(也可以通过设置降低权重,而不删除):
 
 
 



来自为知笔记(Wiz)


你可能感兴趣的:(部署LVS+Keepalived集群)