LVS负载均衡实战

LVS负载均衡实战

LVS有四种集群类型:

1.LVS/NAT(地址转换)

2.LVS/DR(直接路由)

3.LVS/TUN(隧道)

4.LVS/FULLNAT

这里我们就进行LVS/(DR/NAT)类型的实战,如果想详细了解LVS,可以参考https://www.cnblogs.com/clsn/p/7920637.html#auto_id_22

一、集群环境说明

主机名

IP地址

软件

系统版本

lb1

192.168.231.150

lvs keepalived

CentOS release 6.6 (Final)

lb2

192.168.231.151

lvs keepalived

CentOS release 6.6 (Final)

rs1

192.168.231.152

Apache

CentOS release 6.6 (Final)

rs2

192.168.231.153

Apache

CentOS release 6.6 (Final)

VIP为:192.168.231.154

这一个实验没用到lb2,可以不进行配置。

注意:实验前关闭iptables和selinux。

二、LVS/DR实战

1.在rs1和rs2中yum安装Apache

yum install httpd -y

然后在/var/www/html/目录中创建index.html文件
 

rs1:

echo "web1"  > /var/www/html/index.html

rs2:

echo "web2"  > /var/www/html/index.html

进行测试:

[root@lb1 ~]# curl 192.168.231.152
web01
[root@lb1 ~]# curl 192.168.231.153
web02

2.在lb1和lb2安装ipvsadm管理工具

yum install ipvsadm -y

查看当前LVS状态,顺便激活LVS内核模块

ipvsadm

3.在lb1和lb2中进行相关配置

配置LVS负载均衡服务步骤:

1.在eth0网卡上绑定VIP地址,并设置广播地址和掩码

2.添加路由

3.开启路由转发功能

4.清空LVS规则

5.添加虚拟服务(-A),-t指定虚拟服务的IP端口,-s指定调度算法

6.在虚拟服务中添加真实服务器(-a),-r真实服务器,-gDR类型,-w真实服务器权重

7.查看配置后的LVS规则

命令集

[root@lb1 ~]# ifconfig eth0:0 192.168.231.154 broadcast 192.168.231.154 netmask 255.255.255.255
[root@lb1 ~]# route add -host 192.168.231.154 dev eth0:0
[root@lb1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@lb1 ~]# ipvsadm -C
[root@lb1 ~]# ipvsadm -A -t 192.168.231.154:80 -s rr
[root@lb1 ~]# ipvsadm -a -t 192.168.231.154:80 -r 192.168.231.152:80 -g -w 1
[root@lb1 ~]# ipvsadm -a -t 192.168.231.154:80 -r 192.168.231.153:80 -g -w 2
[root@lb1 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.231.154:80 rr
  -> 192.168.231.152:80           Route   1      0          0         
  -> 192.168.231.153:80           Route   2      0          0       

lb1配置完成

4.配置rs1和rs2

配置步骤:

1.修改arp_ignore和arp_announce响应级别

2.添加VIP地址到lo接口上,并配置网关,掩码

3.配置路由

命令集

        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

        ifconfig lo:0 192.168.231.154 broadcast 192.168.231.154 netmask 255.255.255.255

        route add -host $VIP dev lo:0

配置arp_ignore和arp_announce可以用一个脚本进行,方便以后实验用到,set.sh:

#!/bin/bash
case $1 in
start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
stop)
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
esac

配置后可以查看是否绑定VIP:

[root@rs1 script]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet 192.168.231.154/32 brd 192.168.231.154 scope global lo:0
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d2:c3:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.231.152/24 brd 192.168.231.255 scope global eth0
    inet6 fe80::20c:29ff:fed2:c335/64 scope link
       valid_lft forever preferred_lft forever

arp_ignore和arp_announce参数:

为什么VIP要设置在lo接口上?

要让RS能够处理目标地址为VIP的包,那就要让RS能够接受到,而在lo接口上进行配置VIP就能够接受并将结果返回。如果配置在eth0网卡上,就会影响RS的ARP请求,造成ARP缓存表混乱,使集群不能工作。

为什么要抑制ARP响应?

客户端发起请求,进行广播,请求VIP的MAC地址,RS都能收到请求,DR也能收到请求,都会进行响应,那么前端路由就会混乱,不知道发送到那里(可能响应快的服务会响应请求),所以RS就需要定义arp配置

arp_ignore: 定义接收到ARP请求时的响应级别;

0:只要本地配置的有相应地址,就给予响应;

1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;

arp_announce:定义将自己地址向外通告时的通告级别;

0:将本地任何接口上的任何地址向外通告;

1:试图仅向目标网络通告与其网络匹配的地址;

2:仅向与本地接口上地址匹配的网络进行通告;

测试访问:

火狐浏览器,按F5一直刷新,就可以看到访问的RS的不同,及实现负载均衡

而实现LVS/NAT就是把两个RS的网关修改为DS的网关即可。

LVS持久连接

无论使用什么算法,LVS持久都能实现在一定时间内,将来自同一个客户端请求派发至此前选定的RS。

在基于SSL,需要用到持久连接;

1、 ipvsadm带有持久连接模板:

ipvsadm -A|E … -p timeout

 timeout: 持久连接时长,默认300秒;单位是秒;
直接修改

ipvsadm -E -t 192.168.231.154:80 -s  rr -p 300

测试:

长按F5,会一直显示web02

 

2.PNMPP:持久防火墙标记连接
 

iptables -t mangle -A PREROUTING -d 192.168.231.154 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8

iptables -t mangle -A PREROUTING -d 192.168.231.154 -i eth0 -p tcp --dport 23 -j MARK --set-mark 8

ipvsadm -A -f 8 -s rr -p 300定义防火墙标记为服务

ipvsadm -a -f 8 -r 192.168.231.152 -g -w 3

ipvsadm -a -f 8 -r 192.168.231.153 -g -w 3

测试:

23号端口可以用telnet命令测试

下一篇将进行LVS+keepalived高可用搭建

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

real向往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值