LVS/DR模式负载均衡集群部署详解
一、LVS/DR模式简介
1、网络使用net模式
2、DR模式要求Director DIP和所有RealServer RIP 必须在同一个网段及广播域
3、Real server: RIP :192.168.239.129 192.168.239.128
VIP:192.168.239.166
二、部署准备
1、准备三台干净的虚拟机,两台用作web服务器
2、程序包:ipvsadm (LVS管理工具)
3、规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
4、配置文件:/etc/sysconfig/ipvsadm-config
三、步骤(LVSserver端)
1、关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
2、Director分发器配置(配置VIP)
[root@lvs-server ~]# ip addr add dev ens33 192.168.239.166/32 //配置VIP
[root@lvs-server ~]# yum install -y ipvsadm //RHEL确保LoadBalancer仓库可用
[root@lvs-server ~]# service ipvsadm start //启动(如有报错是因为没有创建保存规则文件/bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录,需要手动生成)
[root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm //生成规则存放文件
3、定义LVS分发策略
[root@lvs-server ~]# ipvsadm -C //清除内核虚拟服务器表中的所有记录。
[root@lvs-server ~]# ipvsadm -A -t 192.168.239.166:80 -s rr //添加一条新的虚拟TCP协议服务调度算法
[root@lvs-server ~]# ipvsadm -a -t 192.168.239.166:80 -r 192.168.239.128 -g //添加一条新的真实TCP协议服务路由模式
[root@lvs-server ~]# ipvsadm -a -t 192.168.246.160:80 -r 192.168.239.129 -g
[root@lvs-server ~]# service ipvsadm save //保存方式一,使用下面的保存方式,版本7已经不支持了
[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm //保存方式二,保存到一个文件中
[root@lvs-server ~]# ipvsadm -ln //查看服务器表中的记录
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.239.166:80 rr
-> 192.168.239.128:80 Route 1 1 0
-> 192.168.239.129:80 Route 1 1 0
[root@lvs-server ~]# ipvsadm -L -n --stats //显示统计信息
[root@lvs-server ~]# ipvsadm -L -n --rate //看速率
4、配置RS端
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@real-server1 ~]# yum install -y nginx
[root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html //配置web服务页面
[root@real-server1 ~]# ip addr add dev lo 192.168.239.166/32 //在lo接口上绑定VIP
[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore //忽略arp广播
[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce //匹配精确ip地址回包
[root@real-server1 ~]# systemctl start nginx
[root@real-server1 ~]# systemctl enable nginx
另外一个服务器同理操作(配置的web页面不要一样便于观察)
附1:为什么要忽略广播
realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的
5、测试(为了方便实验观察,关闭Nginx服务器长连接)
[root@client ~]# elinks -dump http://192.168.239.166
也可以直接在浏览器上测试