使用LVS部署LB集群(负载均衡)——DR/NAT模式

LVS是基于四层(端口)负载均衡集群软件
一、环境准备(Linux 系统是RHEL6.7版本)
搭建web服务:两台网站服务器:web1:192.168.4.101;web2:192.168.4.102
一台分发器服务:eth0:192.168.4.100;eth1:192.168.2.100
一台客户端:192.168.2.250
关闭防火墙:#service iptables status; #service iptables stop
设置开机启不启动:使用chkconfig命令:
永远开启防火墙:# chkconfig iptables on
查看状态: #chkconfig --list iptables
永久关闭防火墙 :#chkconfig iptables off
配好6.7版本的yum源。

客户端2.250————(2.100)lvs分发服务器(4.100)|——| 网站服务器(4.101/4.102)

二、配置
A 、配置网站服务器101/102
A.1 配置网关地址:
]# route del default gw 网关地址 // 删除网关
]# route add default gw 网关地址 //添加网关

]# route -n 查看网络配置信息
]# route add default gw 192.168.4.100 添加网关
]# route -n
101/102】]# ping -c 2 192.168.2.100
101/102】]# ping -c 2 192.168.2.250 没法跟客户端连接
客户端配置网关地址:]# route add default gw 192.168.2.100
101/102]# ping -c 2 192.168.2.250 网站服务器可以和跟客户端连接了
++++++++++++++++++++++++++++++++++++++++++++++++
A.2 运行网站服务 service httpd start ;chkconfig httpd on
101/102]# yum -y install httpd
编写网页文件 vim /var/www/html/test.html (web1 和web2)
101]# echo “web101” > /var/www/html/test.html
102]# echo “web102” > /var/www/html/test.html
]# service httpd start
]# chkconfig httpd on
]# netstat -antulp | grep httpd

++++++++++++++++++++++++++++++++++++++++++++++++++
B 、配置分发器100
(注意:分发器上的2.100端口作为虚拟IP,用来分发来自客户端的请求)
]# sysctl -p 打印系统配置
net.ipv4.ip_forward = 0 内核的路由转发功能没有开启
]# vim /etc/sysctl.conf 修改系统配置文件,开启内核的路由转发功能
net.ipv4.ip_forward =1
或者]# sed -i ‘7s/0/1/’ /etc/sysctl.conf
]# sysctl -p
( ]# lsmod 用来显示文件/proc/modules的信息,即显示当前内核块装载的模块
]# lsmod | grep ip_vs 使用前先清除ipvsadm -l 清除ipvadm策略)

++++++++++++++
B.1 安装 软件包 (添加虚拟服务在Lvs主机上)
]# rpm -q ipvsadm
]# yum list | grep -i ipvsadm
]# ls /mnt/
]# ls /mnt/LoadBalancer/ (与集群相关的包都在这个文件下)
haproxy-1.5.4-2.el6.x86_64.rpm keepalived-1.2.13-5.el6_6.x86_64.rpm repodata
ipvsadm-1.26-4.el6.x86_64.rpm piranha-0.8.6-4.el6_5.2.x86_64.rpm TRANS.TBL
修改yum源配置文件:
]# vim /etc/yum.repos.d/rhel6.repo (添加另一个yum源)
[rhel62]
name=rhel62
baseurl=file:///mnt/LoadBalancer/
enable=1
gpgcheck=0
]# yum clean all
]# yum repolist
]# yum -y install ipvsadm 安装软件
]# rpm -q ipvsadm
]# /etc/init.d/ipvsadm status 查看服务运行状态
配置文件 /etc/sysconfig/ipvsadm-config (该文件只能看)
]# cat /etc/sysconfig/ipvsadm-config
启动服务:/etc/init.d/ipvsadm start
关闭服务:/etc/init.d/ipvsadm stop
重启服务:/etc/init.d/ipvsadm restart
LVS配置使用命令 ipvsadm --help
直接接命令:-Ln 查看ipvs的配置信息
-Ln --stats 查看年ipvs服务器的数据包分发情况
-Sn 保存所有配置
-C 清除所有配置
-Z 清除数据包分发数据的记录信息
用于指定该命令要实现什么功能:
-A 添加LVS服务
-D 删除LVS服务
-E 修改LVS服务的设置信息
-a 添加真实服务器
-d 删除虚拟服务器
用于指定各个模块的具体作用:
-t 设置VIP 后面跟着lvs服务中连接客户端的虚拟ip和端口号
-s 指定负载调度算法 算法简称
-r 指定真实服务器的地址 具体的服务器的IP和端口号
-w 设置权限 具体权限值,不写默认为1
-m 使用NAT模式
-g 使用DR模式 不写默认为DR模式
-i 使用TUN模式

————————————————————————
B.2 配置LVS/NAT
]# ipvsadm – help
]# ipvsadm -L 查看虚拟服务信息
添加虚拟服务
(-A 添加虚拟服务;-t :tcp 协议 虚拟IP和端口;-s :指定调度算法 -a :添加real server):
]# ipvsadm -A -t 192.168.2.100:80 -s rr
]# ipvsadm -L
TCP 192.168.2.100:http rr
]# ipvsadm -Ln 以数字的形成显示服务
TCP 192.168.2.100:80 rr


添加real server
]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.4.101:80 -m
]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.4.102:80 -m
(-m :是指以NAT模式)
]# ipvsadm -L
-> 192.168.4.101:http Masq (Masq代表的就是NAT模式)
保存配置:
]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.2.100:80 -s rr
-a -t 192.168.2.100:80 -r 192.168.4.101:80 -m -w 1
-a -t 192.168.2.100:80 -r 192.168.4.102:80 -m -w 1
]# /etc/init.d/ipvsadm status
【注意:清除服务# ipvsadm -C 后/etc/sysconfig/ipvsadm 内仍然保存上一次的内容,所有还需要
]# /etc/init.d/ipvsadm save 保存配置(每次修改配置都需要重新保存一下)
]# cat /etc/sysconfig/ipvsadm (这时,里面会被清空)】
]# chkconfig --list ipvsadm 查看服务是否为开机自启
]# chkconfig ipvsadm on 设置为开机自启

(备注:若添加错了real server 信息,可以在 /etc/sysconfig/ipvsadm 修改,然后重启一下
/etc/init.d/ipvsadm save)

从虚拟服务中删除real server
ipvsadm -d -t 连接客户端的VIP:端口号 -r 真实服务器的RIP

]# ipvsadm -d -t 192.168.2.100:80 -r 192.168.4.61:80
]# /etc/init.d/ipvsadm save
]# ipvsadm -Ln
(备注:另外也可以在 /etc/sysconfig/ipvsadm 修改,然后重启一下
/etc/init.d/ipvsadm save)

修改虚拟服务的调度算法
]# ipvsadm -E -t 192.168.2.100:80 -s wrr

修改real server 的权重值(权重值越大被分发的请求越多)
]# ipvsadm -e -t 192.168.2.100:80 -r 192.168.4.102:80 -w 3 -m (-w :权重)
]# ipvsadm -Ln
]# /etc/init.d/ipvsadm save


在客户端250测试:
客户端250上安装访问网页的软件:]# yum -y install elinks
]# elinks --dump http://192.168.2.100/test.html
web102
]# elinks --dump http://192.168.2.100/test.html
web101
在分发服务器上查看调度信息:
]# ipvsadm -Ln --stats
]# watch -n 1 ipvsadm -Ln --stats (每秒监视一次)

+++++++++++++++++++++++++++++++++++++++++++++++++
B.3 配置 LVS/DR 网站LB集群(直接路由模式)
要求重点:real server 的ip地址要和VIP 地址是一个网段的。
新的环境:
web 1 : eth0:192.168.4.101 ; web2 :eth0 :192.168.4.102
lvs 主机 只有eth0 :192.168.4.100 # ifdown eth1
client 主机 只有 eth0 : 192.168.4.250 # ifdown eth1
访问集群http://192.168.4.253/test.html VIP:192.168.4.253
——————————————————————————
工作原理:
1、客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
2、负载均衡器接收到报文后,发现请求的是在ipvs规则中存在的地址和端口,那么它将客户端请求报文的源MAC地址改为自己的MAC地址,目标MAC改为了Real Server的MAC地址,并将此包发送给Real Server
3、Real Server发现请求报文中的目标MAC地址是自己,就会把此报文接受下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡,直接发送给客户端。
注意:——VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;
——所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP 的网络请求;

DR的理论:
特点:1、一个是VIP是配在DIP网卡上的一个虚拟网卡,同样VIP也会配在真实服务器的lo环路网卡上的一个虚拟网卡上。
2、另一个是客户端、调度器、服务器都是在同一个网段上的。
思路是:客户端访问VIP,然后调度器把数据包按照自身策略分发给某个服务器,然后该服务器的lo回环网卡上的VIP的虚拟网卡,通过RIP所在网卡以VIP身份发送数据包。
请求: CIP ----> VIP == DIP —> RIP (VIP虚拟IP; DIP调度IP; RIP:realserverIP)
返回数据: RIP代替VIP ----> CIP
解决问题一:让一个网络中存在多个VIP,修改内核参数arp_ignore。
解决问题二:让RIP所在网卡帮助lo以VIP身份发送,修改内核参数arp_announce;
问题二里面涉及到只有兄弟网卡可以相互帮助,进行代理收发等操作且兄弟网卡必须是同网段,所有必须要让RIP和VIP是兄弟网。
—— arp_ignore 代表是否恢复ARP广播 0 回应所有的ARP广播;
1 只回应入站网卡的IP的广播
—— arp_announce 0 网卡接口只以自己接口的IP发送和接收包;
2 帮兄弟网卡收发数据包 。


首先清除四台机器的NAT模式:
lvs主机上:
]# ipvsadm -C
]# /etc/init.d/ipvsadm save
]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
]# sysctl -p
web1/web2主机上:
101]# route del default gw 192.168.4.100
102]# route del default gw 192.168.4.100
]# route -n
客户端】]# route del default gw 192.168.2.100
]# route -n
————————————————————
1——网站服务器101/102
修改网络接口运行参数,配置文件/proc/sys/net/ipv4/conf
注意:修改真实服务器的内核参数只能用覆盖的方法写入,即echo

101/102]# cd /proc/sys/net/ipv4/conf (101/102都要修改)
]# ls
all default eth0 eth1 eth2 eth3 lo
]# ls eth0
]# ls lo
]# cat lo/arp_ignore
]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore (让lo不接收广播包)
]# cat lo/arp_announce (0是表示未启用)
]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce (2:帮兄弟接口接收包)
]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

【这里也可以通过修改内核配置文件 /etc/sysctl.conf 来修改网络接口运行参数
在真实服务器上 添加下面几行
]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2】
——————————————————————————
绑定VIP地址
——在真实服务器的lo网络回路接口中绑定vip地址
]# ifconfig lo:1
]# ifconfig lo:1 192.168.4.253/32
]# ifconfig lo:1
让配置永久生效,web1 和 web2上修改配置文件/etc/rc.local
101/102]# ls /etc/rc.local (/etc/rc.local 系统登录前就会读取的命令)
]# vim /etc/rc.local (添加下面几行)
ifconfig lo:1 192.168.4.253/32
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

++++++++++++++++++++++++++++++++++++++++
2——配置分发器
绑定VIP地址
]# ifconfig eth0:1
]# ping -c 2 192.168.4.253 (确保该IP没人使用)
]# ifconfig eth0:1 192.168.4.253/32
]# ifconfig eth0:1
客户端上检测web主机上的lo接口是否不接收广播地址
client ]# arping 192.168.4.253 (arping ping的同时会反馈MAC地址)
Unicast reply from 192.168.4.253 [52:54:00:E9:08:D8] (只有来自LVS的MAC地址)
lvs ~]# ifconfig | grep eth0
eth0 Link encap:Ethernet HWaddr 52:54:00:E9:08:D8 (与客户端上接收的MAC地址一样)
101]# ifconfig | grep eth0 (查看MAC)
102]# ifconfig | grep eth0 (查看MAC)
(删除网卡的VIP地址: ip addr del VIP地址 dev eth0)

让配置永久生效,设置开机自动绑定VIP:
lvs ~]# vim /etc/rc.local
ifconfig eth0:1 192.168.4.253/32

LVS添加虚拟服务和realserver
]# ipvsadm -A -t 192.168.4.253:80 -s rr
]# ipvsadm -a -t 192.168.4.253:80 -r 192.168.4.101:80 (默认-g)
]# ipvsadm -Ln
]# ipvsadm -a -t 192.168.4.253:80 -r 192.168.4.102:80 -g
]# ipvsadm -Ln
192.168.4.101:80 Route 1
192.168.4.102:80 Route 1
]# ipvsadm -Sn 保存所有配置 (非永久保存)
]# cat /etc/sysconfig/ipvsadm (没有内容)
]# /etc/init.d/ipvsadm save 永久保存配置
]# cat /etc/sysconfig/ipvsadm

+++++++++++++++++++++++++++++++++++++++
3——客户端测试192.168.4.250
elinks --dump http://VIP地址 /test.html

]# elinks --dump http://192.168.4.253/test.html
lvs ~]# ipvsadm -Ln --stats +++ 查看数据分发情况
分发器上只有进入的包,没有出去的包,说明realserver直接将包发给客户端
+++++++++++++++++++++
问题:LVS默认不对realserver做健康性检查。
realserver 主机上的网站服务停止了,分发器还会把请求分发给停用的realserver嘛?
生成情况下网站服务器中若有一台realserver 网站服务停了,在lvs没有设置额外的监测下,客户端访问会有卡顿的现象。

解决:在LVS上添加扫描检测网站服务器的运行情况
web1]# service httpd stop
lvs ~]# yum -y install nmap
lvs ~]# nmap -n -sS -p 80 192.168.4.101
lvs ~]# nmap -n -sS -p 80 192.168.4.101 2>/dev/null | grep close
lvs ~]# ipvsadm -d -t 192.168.4.253:80 -r 192.168.4.101:80
等检测到网站服务恢复了,再添加realserver。
编写计划任务,每个5分钟检测realserver主机上网站服务的状态,当网站服务没运行时,把realserver主机从虚拟服务里删除。

你可能感兴趣的:(笔记)