lvs架构的DR模式+keepalived高可用

配置过程如下:

分析架构:如果ld是单一节点,那么这个ld挂了,整个架构也就挂了,所以我们这里必须考虑到HighAvailabiliity(HA),我们这里就是通过keepalived这个高可用软件来实现的。

1.客户端配置:


#ifconfigeth0192.168.18.106

#routeadddefaultgw192.168.18.254

2.Router端配置:

#ifconfigeth0192.168.18.254

#ifconfigeth0:0192.168.19.100

打开包转发

#echo1>/proc/sys/net/ipv4/ip_forward


3.分发器Master的配置:

安装lvs到分发器上面

配置好yum源,保证能够读取到介质中的Cluster目录!

cat/etc/yum.repos.d/aa.repo


[aa]

name=aa

baseurl=file:///media/Server

enabled=1

gpgcheck=0

[Cluster]

name=cluster

baseurl=file:///media/Cluster

enabled=1

gpgcheck=0

#yum-yinstallipvsadm

#ifconfigeth0192.168.19.300

安装keepalived,并通过其绑定VTP


#tarzxfkeepalived-1[1].1.17.tar.gz

#yuminstallgccopenssl-develkernel-develipvsadm-y(不装一会安装会有问题)

#ln-s/usr/src/kernels/2.6.18-238.el5-i686//usr/src/linux(这条不能复制粘贴,因为要看你机器的内核版本,可以粘过去进行tab键补齐)

#cdkeepalived-1.1.17

#./configure--prefix=/usr/local/keepalived

#make

#makeinstall


安装后,把人家提供好的文件进行对应的复制!

#cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

#cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

#mkdir-pv/etc/keepalived

mkdir:已创建目录/etc/keepalived

#cp/usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/

#ln-s/usr/local/keepalived/sbin/keepalived/sbin/

删减自定义配置文件就行:


#vim/etc/keepalived/keepalived.conf


!ConfigurationFileforkeepalived


global_defs{

router_iddr1

}

vrrp_sync_grouphttp{

group{

apache

}

}


vrrp_instanceapache{

stateMASTER

interfaceeth0

virtual_router_id51

priority180

advert_int1

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddress{

192.168.19.250

}

}

virtual_server192.168.19.5080{

delay_loop6

lb_algorr

lb_kindDR

#persistence_timeout3600

protocolTCP

real_server192.168.19.10180{

weight1

TCP_CHECK{

connect_timeout3

connect_port80

}

}

real_server192.168.19.10280{

weight1

TCP_CHECK{

connect_timeout3

connect_port80

}

}

}


启动服务

#/etc/init.d/keepalivedstart

4.分发器Backup的配置:

安装lvs到分发器上面


配置好yum源,保证能够读取到介质中的Cluster目录!

cat/etc/yum.repos.d/aa.repo


[aa]

name=aa

baseurl=file:///media/Server

enabled=1

gpgcheck=0

[Cluster]

name=cluster

baseurl=file:///media/Cluster

enabled=1

gpgcheck=0

#yum-yinstallipvsadm

#ifconfigeth0192.168.19.200

安装keepalived,并通过其绑定VTP


#tarzxfkeepalived-1[1].1.17.tar.gz

#yuminstallgccopenssl-develkernel-develipvsadm-y(不装一会安装会有问题)

#ln-s/usr/src/kernels/2.6.18-238.el5-i686//usr/src/linux(这条不能复制粘贴,因为要看你机器的内核版本,可以粘过去进行tab键补齐)

#cdkeepalived-1.1.17

#./configure--prefix=/usr/local/keepalived

#make

#makeinstall


安装后,把人家提供好的文件进行对应的复制!

#cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

#cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

#mkdir-pv/etc/keepalived

mkdir:已创建目录/etc/keepalived

#cp/usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/

#ln-s/usr/local/keepalived/sbin/keepalived/sbin/

删减自定义配置文件就行:


#vim/etc/keepalived/keepalived.conf


!ConfigurationFileforkeepalived


global_defs{

router_iddr2#(这里名字注意要和master的不一样就行)

}

vrrp_sync_grouphttp{

group{

apache

}

}


vrrp_instanceapache{

stateBACKUP#(这里要改成backup,备机)

interfaceeth0

virtual_router_id51

priority100#(这里级别要比主机低点就好)

advert_int1

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddress{

192.168.19.250

}

}

virtual_server192.168.19.5080{

delay_loop6

lb_algorr

lb_kindDR

#persistence_timeout3600

protocolTCP

real_server192.168.19.10180{

weight1

TCP_CHECK{

connect_timeout3

connect_port80

}

}

real_server192.168.19.10280{

weight1

TCP_CHECK{

connect_timeout3

connect_port80

}

}

}






5.realserver的配置:

#ifconfigeth0192.168.19.100





绑定VTP:利用脚本来实现:


#!/bin/bash
VIP=192.168.19.250
ROUTE=192.168.19.100
start(){
ifconfiglo:0$VIP/32broadcast$VIPup
routeadd-host$VIPdevlo:0
routeadddefaultgw$ROUTE
echo1>/proc/sys/net/ipv4/conf/all/arp_ignore
echo2>/proc/sys/net/ipv4/conf/all/arp_announce
echostart;
}

stop(){
routedeldefaultgw$ROUTE
routedel-host$VIPdevlo:0
ifconfiglo:0down
echo0>/proc/sys/net/ipv4/conf/all/arp_ignore
echo0>/proc/sys/net/ipv4/conf/all/arp_announce
echostop;
}

case$1in

start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo'start|stop'
esac

把这个脚本放到/etc/init.d/下面

启动:/etc/init.d/vip.shstart

其他realserver的配置同理

6.到master主机上面验证:

测试第一步:查看绑定的VTP


#ipaddsh

1:lo:<LOOPBACK,UP,LOWER_UP>mtu16436qdiscnoqueue

link/loopback00:00:00:00:00:00brd00:00:00:00:00:00

inet127.0.0.1/8scopehostlo

inet6::1/128scopehost

valid_lftforeverpreferred_lftforever

2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_fastqlen1000

link/ether00:0c:29:a6:09:10brdff:ff:ff:ff:ff:ff

inet192.168.19.300/24brd192.168.19.255scopeglobaleth0

inet192.168.19.250/32scopeglobaleth0c

inet6fe80::20c:29ff:fea6:910/64scopelink

valid_lftforeverpreferred_lftforever

3:sit0:<NOARP>mtu1480qdiscnoop

link/sit0.0.0.0brd0.0.0.0


测试第二步,查看realserver的连通性

l#elinkshttp://192.168.19.102/index.html--dump

102

#elinkshttp://192.168.19.101/index.html--dump

101


测试第三步,查看ipvsadm规则

#ipvsadm-ln

IPVirtualServerversion1.2.1(size=4096)

ProtLocalAddress:PortSchedulerFlags

->RemoteAddress:PortForwardWeightActiveConnInActConn

TCP192.168.19.250:80rr

->192.168.19.101:80Route100

->192.168.19.102:80Route100


测试第四步,同客户端测试

[[email protected]~]#elinkshttp://192.168.19.250/index.html--dump

101

[[email protected]~]#elinkshttp://192.168.19.250/index.html--dump

102

[[email protected]~]#elinkshttp://192.168.19.250/index.html--dump

101

[[email protected]~]#elinkshttp://192.168.19.250/index.html--dump

102

启动BACKUP

ld2#/etc/init.d/keepalivedstart

启动keepalived[确定]


关闭master上的keepalived,模拟失败

再在client上测试,看访问能否继续!


如果没有问题,在realserver192.168.19.101)上关闭服务

ld1#ipvsadm-ln

IPVirtualServerversion1.2.1(size=4096)

ProtLocalAddress:PortSchedulerFlags

->RemoteAddress:PortForwardWeightActiveConnInActConn

TCP192.168.19.250:80rr

->192.168.19.102:80Route100

ld1#ipvsadm-ln

IPVirtualServerversion1.2.1(size=4096)

ProtLocalAddress:PortSchedulerFlags

->RemoteAddress:PortForwardWeightActiveConnInActConn

TCP192.168.19.250:80rr

->192.168.19.101:80Route100

->192.168.19.102:80Route100



解决无用的广播包太多,造成ld无法绑定vip

ld1上执行

iptables-F

iptables-AINPUT-mttl--ttl-eq255-jREJECT

iptables-IINPUT-s$ld2ip-jACCEPT


ld2上执行

iptables-F

iptables-AINPUT-mttl--ttl-eq255-jREJECT

iptables-IINPUT-s$ld1ip-jACCEPT