LVS负载均衡一安装、手动配置、脚本配置(DR模式)

一、LVS负载均衡安装

1.基础环境配置

1.1三台虚拟机

[root@lvs-01 ~]# cat /etc/redhat-release 
CentOS release 6.5 (Final)
lvs-01 10.0.0.9  vip:10.0.0.19(eth0:1)
web-01 10.0.0.10 vip:10.0.0.19(lo:1)
web-02 10.0.0.11 vip:10.0.0.19(lo:1)

1.2配置两台web

[root@web-01 ~]# yum install httpd -y
[root@web-01 ~]# echo "10.0.0.10" >/var/www/html/index.html
[root@web-02 ~]# echo "10.0.0.11" >/var/www/html/index.html
[root@web-01 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT 
[root@lvs-01~]# curl 10.0.0.10
10.0.0.10
[root@lvs-01~]# curl 10.0.0.11
10.0.0.11

2.部署lvs

2.1下载编译ipvsadm

[root@lvs-01 ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
[root@lvs-01 ~]# ll ipvsadm-1.26.tar.gz 
-rw-r--r--. 1 root root 41700 Feb  7  2011 ipvsadm-1.26.tar.gz
[root@lvs-01 ~]# ln -s /usr/src/kernels/2.6.32-754.3.5.el6.x86_64/ /usr/local/linux
[root@lvs-01 ~]# tar xf ipvsadm-1.26.tar.gz 
[root@lvs-01 ~]# cd ipvsadm-1.26

[root@lvs-01 ipvsadm-1.26]# make && make install
报错
make -C libipvs
make[1]: Entering directory `/root/ipvsadm-1.26/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL  -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
make[1]: gcc: Command not found
make[1]: *** [libipvs.o] Error 127
make[1]: Leaving directory `/root/ipvsadm-1.26/libipvs'
make: *** [libs] Error 2
解决
[root@lvs-01 ipvsadm-1.26]# yum install gcc libnl* popt* -y

[root@lvs-01 ipvsadm-1.26]# make && make install

2.2加载ip_vs到内核

[root@lvs-01 ipvsadm-1.26]# lsmod|grep ip_vs
[root@lvs-01 ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs-01 ipvsadm-1.26]# lsmod|grep ip_vs
ip_vs                 125220  0 
libcrc32c               1246  1 ip_vs
ipv6                  317340  270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6

二、LVS负载均衡手动配置

1.服务端配置

1.1配置lvs虚拟IP(VIP)

[root@lvs-01 ~]# ifconfig eth0:1 10.0.0.19/24 up
[root@lvs-01 ~]# ifconfig eth0:1
eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:01:66:96  
          inet addr:10.0.0.19  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
[root@lvs-01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.19       0.0.0.0         255.255.255.255 UH    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0

1.2ipvsadm参数

参数 参数说明
-A -A –add-service 添加一个带选项的虚拟服务。
-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
-C 清空lvs原有的配置。
-set 设置tcp,tcpfn,udp的连接超时时间

1.3添加两台RS(web服务)

[root@lvs-01 ~]# ipvsadm -C(清空原有的配置)
[root@lvs-01 ~]# ipvsadm --set 30 5 60
[root@lvs-01 ~]# ipvsadm -A -t 10.0.0.19:80 -s rr -p 20
[root@lvs-01 ~]# ipvsadm -a -t 10.0.0.19:80 -r 10.0.0.10 -g -w 1
[root@lvs-01 ~]# ipvsadm -a -t 10.0.0.19:80 -r 10.0.0.11 -g -w 1 
[root@lvs-01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.19:80 rr persistent 20
  -> 10.0.0.10:80                 Route   1      0          0         
  -> 10.0.0.11:80                 Route   1      0          0 

2.RS端配置(两台web操作)

2.1arp抑制参数说明:

arp_ignore-INTEGER
    定义对目标地址为本地IP的ARP询问不同的应答模式。
    0(默认值);回应任何网络接口上对任何本地IP地址的ARP查询请求
    1:只回答目标IP地址,是来访网络接口本地地址的ARP查询请求。    2:只应答目标IP地址,是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的自网段内
    3:不回答该网络界面的ARP请求,而只对设置的唯一和连接地址做出回应。
    4-7:保留未使用
    8:不回应所有(本地地址)的arp请求。
arp_announce-INTEGER
    对网络接口上,本地IP地址发出的,ARP回应,做出相应级别的限制
    确定不同程度的限制,宣布对来自本地源IP地址发出ARP请求的接口。
    0:(默认)在任意网络接口上任意本地地址
    1:尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起arp请求的源ip地址是被设置应该经由路由达到此网络接口的时候很有用,此时会检查来访ip是否为所有接口上的子网段内ip之一,如果该来访ip不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
    2:对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

2.2添加回环端口的VIP及路由

[root@web-01 ~]# ifconfig lo:1 10.0.0.19/32
[root@web-01 ~]# ifconfig lo:1 
lo:1      Link encap:Local Loopback  
          inet addr:10.0.0.19  Mask:0.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
[root@web-01 ~]# route add -host 10.0.0.19 dev lo
[root@web-01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.19       0.0.0.0         255.255.255.255 UH    0      0        0 lo
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0         

2.3arp抑制

[root@web-01 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore    
[root@web-01 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@web-01 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@web-01 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce 

3.测试

这里写图片描述
这里写图片描述

三、LVS负载均衡脚本配置

1.服务端脚本

[root@lvs-01 ~]# cat ipvs.sh 
#!/bin/bash
Vip=10.0.0.19
Rip1=10.0.0.10
Rip2=10.0.0.11
Port=80
. /etc/init.d/functions
start(){
        ifconfig eth0:1 ${Vip}/24 up
        route add -host ${Vip} dev eth0
        ipvsadm -C
        ipvsadm -A -t ${Vip}:${Port} -s rr 
        ipvsadm -a -t ${Vip}:${Port} -r ${Rip1} -g 
        ipvsadm -a -t ${Vip}:${Port} -r ${Rip2} -g 
        action "ipvs start..." /bin/true
}
stop(){
        ifconfig eth0:1 down
        route del -host $Vip
        ipvsadm -C
        action "ipvs stop ..." /bin/true}
restart(){
        stop
        start
}
case $1 in
start)
        start
;;
stop)
        stop
;;
restart)
        restart
;;
*)
        echo "Usage: $0 {stop|stop|restart}"
esac

2.RS端脚本

[root@web-01 ~]# cat ipvs_client.sh 
#!/bin/bash
IP=10.0.0.19
. /etc/init.d/functions
start(){
        ifconfig lo:1 ${IP}/32 up
        route add -host $IP dev lo
        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 
        action "ipvs client start ..." /bin/true
}
stop(){
        ifconfig lo:1 down
        route del -host $IP
        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 
       action "ipvs client stop ..." /bin/true
}
restart(){
        start
        stop
}
case $1 in 
start)
        start
;;
stop)
        stop
;;
restart)
        restart
;;
*)
        echo "Usage: $0 {start|stop|restart}"
esac

猜你喜欢

转载自blog.csdn.net/liang_operations/article/details/82470082