LVS_DR模式构建配置

Posted cheyunhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS_DR模式构建配置相关的知识,希望对你有一定的参考价值。

 

一、环境准备

lvs负载均衡器    系统:centos6.8 ip:192.168.2.203  vip:192.168.2.17

web服务器RS1   系统:centos6.8 ip:192.168.2.204

web服务器RS2   系统:centos6.8 ip:192.168.2.204    

 

二、安装LVS软件

可以编译安装也可以yum安装,编译安装需要创建一个超链接:ln -s /usr/src/kernels/2.6.18-238.el5-i686 /usr/src/linux

这里选择yum方式安装

技术分享图片
[[email protected] ~]# yum -y install ipvsadm
已加载插件:fastestmirror
设置安装进程
Determining fastest mirrors
... ...
已安装:
  ipvsadm.x86_64 0:1.26-4.el6                                                                                          

作为依赖被安装:
  libnl.x86_64 0:1.1.4-2.el6                                                                                           

完毕!
技术分享图片

查看ipvs模块是否加载

[[email protected] ~]# lsmod | grep ip_vs
[[email protected] ~]# 

因为此时系统还没有把ipvs模块加载进系统,需要我们执行ipvsadm命令才会加载进去或者modprobe ip_vs。

技术分享图片
[[email protected] ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[[email protected] ~]# lsmod | grep ip_vs
ip_vs                 126897  0 
libcrc32c               1246  1 ip_vs
ipv6                  336282  270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
[[email protected] ~]# 
技术分享图片

三、手动配置LVS负载均衡器

正常工作中是不会手动配置的,也不会使用脚本配置的。最终我们是通过配置文件生效的,结合keepalived来进行部署的。

[[email protected] ~]# ifconfig eth1:1 192.168.2.17 netmask 255.255.255.0
[[email protected] ~]# route add -host 192.168.2.17 dev eth1

ipvsadm命令参数:

技术分享图片
-A    
-A --add-service 添加一个带选项的虚拟服务。
Add  a virtual  service. A serviceaddress is uniquely defined by a triplet: IP address, portnumber,  and  protocol. Alternatively a virtualservice may be defined by a firewall-mark.
-t    指定虚拟服务器的IP地址和端口
-s    -s,--scheduler scheduling-method 调度算法
-p    会话保持按秒计算
-a    
-a在对应的VIP下添加RS节点
-g    指定此LVS的工作模式为-g   -g为DR模式
-l    
指定LVS的工作模式为-l  -l为tunnel模式
-m    指定LVS的工作模式为NAT模式
-w    指定RS节点的权重
-D    
删除虚拟服务
格式:ipvsadm-D -t|u|f service-address
Delete a virtual service, alongwith any associated real servers.
-C
-C, --clear  Clear the virtual server table清空lvs原有的配置。
-set    设置tcp  tcpfn udp  的连接超时时间(一般来说高并发的时候小一点点。
技术分享图片

ipvsadm添加lvs服务

技术分享图片
[[email protected] ~]# ipvsadm -C
[[email protected] ~]# ipvsadm -A -t 192.168.2.17:80 -s rr  #添加虚拟服务指定VIP
[[email protected] ~]# 
[[email protected] ~]# ipvsadm -a -t 192.168.2.17:80 -r 192.168.2.204:80 -g  #针对虚拟服务添加RS节点
[[email protected] ~]# ipvsadm -a -t 192.168.2.17:80 -r 192.168.2.205:80 -g
[[email protected] ~]# ipvsadm -L -n  #查看VIP和RS是否已经配置成功
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.17:80 rr
  -> 192.168.2.204:80             Route   1      0          0         
  -> 192.168.2.205:80             Route   1      0          0         
技术分享图片

LB上删除虚拟服务

ipvsadm -D -t 192.168.2.17:80  

四、RS节点服务器手动配置

添加lo端口的VIP&路由

[[email protected] ~]# ifconfig lo:0 192.168.2.17 netmask 255.255.255.255  (由于RS的VIP不是用来通讯,并且这里一定要设置24位掩码)
[[email protected] ~]# route add -host 192.168.2.17 dev lo

ARP抑制

[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[[email protected] ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce 
[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_announce 
[[email protected] ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore 

五、测试LVS是否生效

技术分享图片
[[email protected] ~]# curl http://192.168.2.204/test.txt
it is web1
[[email protected] ~]# curl http://192.168.2.205/test.txt
it is web2
[[email protected] ~]# curl http://192.168.2.17/test.txt
it is web2
[[email protected] ~]# curl http://192.168.2.17/test.txt
it is web1
[[email protected]www ~]# curl http://192.168.2.17/test.txt
it is web2
[[email protected] ~]# curl http://192.168.2.17/test.txt
it is web1
[[email protected] ~]# 
技术分享图片

 

至此我们的LVS DR模式负载均衡已经配置完成了。至于不同的调度算法啊-s  不同的工作模式-g(DR) -l(TUNNEL) -m(NAT)服务器端基本上没有什么差别。只是在客户端上有一定的差别。

NAT模式:

客户端同样需要配置VIP,进行ARP抑制,并且要服务器端开启内核转发功能,配置LB的DIP(内网IP地址)作为默认网关。

开启内核转发功能:vi /etc/sysctl  net.ipv4.ip_forword = 1

route add default gw  192.168.2.203

Tunnel模式:

客户端需要先开启Tunnel协议支持。

/sbin/modprobe ipip

/sbin/route add –host 192.168.2.17 devtun1

echo”1”>/proc/sys/net/ipv4/conf/tun1/arp-ignore

echo”2”>/proc/sys/net/ipv4/conf/tun1/arp_announce

echo”0” >/proc/sys/net/ipv4/conf/tun1/rp_filter

echo”1” >/proc/sys/net/ipv4/conf/tun1/forwarding

echo”1” >/proc/sys/net/ipv4/conf/all/arp_ignore

echo”2” >/proc/sys/net/ipv4/conf/all/ arp_announce

 

六、部署成功后的另一些问题

1)当我们的RS节点出现问题,LB如何知道。如果不知道是会把会话连接接续转发到RS上面。

2)如果LB出现故障,那么整个网络就出现故障。

针对上面的1问题,我们就需要一种RS节点健康检查机制。定时的去检测RS是否正常,如果出现不正常那么就把这个RS从VIP服务里面删除掉。如果恢复正常了,就再把RS添加进来。针对2问题,我们可以另外再架设一台LB服务器,作为备LB服务器。那么当主LB出现故障,备LB服务器就会启动接管主LB服务器的工作,接管它的资源(IP地址,在网络中的角色身份等)

   而上面提到的这些我们就需要结合keepalived来完成。所以后续我们开始讲keepalived+lvs结合适用。完成RS节点健康检查和LVS的高可用性功能。

 

 

 

 

配置lvs+keepalived如下单keepalived:

-------------------------------------------------------

环境配置:    三台centos 6.5
调度器:        DIP:192.168.1.11   VIP:192.168.1.110
web服务器: RIP:192.168.1.9     RIP:192.168.1.10

一,前期服务器环境搭建
(1) 配置lamp环境,这里不做演示。
(2)关闭selinux和所有web服务器上的iptables
(3)设置时间同步,保证服务器时间一致(后期nfs或数据同步用到,包括session同步需要)
二,配置LVS
1,调度器安装ipvsadm和keepalived
首先安装依赖包:
yum -y install gcc make openssl-devel openssl net-snmp net-snmp-devel popt popt-devel

安装ipvs和keepalived:
yum install ipvsadm  keepalived  -y 并设置下:
chkconfig ipvsadm on
chkconfig keepalived on

修改keepalived.conf配置文件:

  1. global_defs {
  2. router_id LVSTEST #负载均衡器标识,同一网段内,可以相同
  3. }
  4.  
  5. vrrp_instance LVSTEST {
  6. state MASTER #主调度器
  7. interface eth0 #实例绑定的网卡
  8. #lvs_sync_daemon_inteface eth0 #主备间的监控接口
  9. virtual_router_id 61 #vrrp唯一ID,主备id一致
  10. priority 100 #优先级
  11. advert_int 10 #主备间同步检查/秒
  12. authentication {
  13. auth_type PASS
  14. auth_pass 1111
  15. }
  16. virtual_ipaddress {
  17. 192.168.1.110 #vip,可以多个ip,每行一个
  18. }
  19. }
  20. virtual_server 192.168.1.110 80 { #定义一个虚拟服务器
  21. delay_loop 6 #健康检测间隔/秒
  22. lb_algo wlc #调度算法
  23. lb_kind DR #模式
  24. persistence_timeout 30 #回话保持时间
  25. protocol TCP #转发协议
  26. #多个real_server重复本节点即可
  27. real_server 192.168.1.9 80 { #定义一台真实服务器
  28. weight 3 #权重
  29. TCP_CHECK { #通过tcpcheck判断真实服务器状态
  30. connect_timeout 10 #连接超时
  31. nb_get_retry 3 #重试次数
  32. delay_before_retry 3 #重试间隔
  33. connect_port 80 #检测端口
  34. }
  35. }
  36. real_server 192.168.1.10 80 {
  37. weight 3
  38. TCP_CHECK {
  39. connect_timeout 10
  40. nb_get_retry 3
  41. delay_before_retry 3
  42. connect_port 80
  43. }
  44. }
  45. }

配置完以后启动keepalived:
service keepalived start

启动以后ipvsadm  -L 可以查看vip以及rip绑定情况。如果和keepalived配置一致,那么设置正常。如果不一致或无IP信息加载,则需检查。

2,RIP服务器配置VIP和arp禁止响应
vip就是上边的vip添加网卡的命令,写入rc.loca启动中。

  1. /sbin/ifconfig lo:0 192.168.1.110 broadcast 192.168.1.110 netmask 255.255.255.255 up
  2. /sbin/route add -host 192.168.1.110 dev lo:0

arp禁止响应:
vi /etc/rc.local
/usr/local/sbin/realserver.sh stop
/usr/local/sbin/realserver.sh start
保存。
创建禁止arp响应脚本

  1. touch /usr/local/sbin/realserver.sh
  2. chmod 755 /usr/local/sbin/realserver.sh
  3. #!/bin/bash
  4. WEB_VIP=192.168.1.110
  5.  
  6. . /etc/rc.d/init.d/functions
  7.  
  8. case "$1" in
  9. start)
  10.       ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
  11.      #/sbin/route add -host $WEB_VIP dev lo:0这行有问题,需要注释
  12.       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  13.       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  14.       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  15.       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  16.       sysctl -p >/dev/null 2>&1
  17.       echo "RealServer Start OK"
  18.  
  19.       ;;
  20. stop)
  21.       ifconfig lo:0 down
  22.       #route del $WEB_VIP >/dev/null 2>&1 这行有问题需要注释
  23.       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  24.       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  25.       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  26.       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  27.       echo "RealServer Stoped"
  28.       ;;
  29. *)
  30.       echo "Usage: $0 {start|stop}"
  31.       exit 1
  32. esac
  33. exit 0

好了,域名host定向到vip,安装一个dz论坛测试看下效果。已经OK。

 

单脚本配置如下

---------------------------------------------

DR模式最大的特点是LBserver和后端的rs都要配置同一个VIP(rs端vip要配置在回环网卡上,即只让LBserver上的vip对外)。通过LBserver将client端发过来数据包添加MAC头,通过MAC直接将数据包传到后端rs上(所以LBserer的ip与rs的ip要在同一物理网段内)。此时后端回环网卡上也配置了同一个vip,正好对应数据包上的目的ip。rs收到数据包后不用通过LBserver返回数据包,而是直接将数据包返还给client(这也是为什么dr模式rs上也需要配置公网ip)

LBserer配置脚本

#!/bin/bash
echo  1 > /proc/sys/net/ipv4/ip_forward  #打开路由转发(同一网段其实不需要)
ipv=/sbin/ipvsadm   
vip=192.168.100.111 
rs1=192.168.100.12
rs2=192.168.100.13
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up  
#注意子网掩码是255.255.255.255,代表vip所在网段没有别的主机了
route add -host $vip dev eth0:0    #增加一条路由
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 #-g代表dr模式
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

RS端配置脚本

#!/bin/bash

vip=192.168.100.111

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce




















以上是关于LVS_DR模式构建配置的主要内容,如果未能解决你的问题,请参考以下文章

LVS_DR模式结合keepalived

负载均衡lvs_dr模式

lvs_dr 负载均衡模式分析

Keepalived+Lvs_DR模式实现Web服务的HA高可用集群

用于从 cloudkit 检索单列的代码模式/片段

LVS_DR