安装LVS-DR环境 vip:192.168.12.100 lvs-director:192.168.12.4 nginx1:192.168.12.2 nginx2:192.168.12.3html
###What did you do today前端
yum install ipvsadmnginx
ipvsadm -h 后端
![]()
在192.168.12.2和192.168.12.3上安装nginx,此处略。能够查看我FastDFS系列博客。bash
进入/usr/local/nginx/conf/目录下,建立nginx-lvs.conf服务器
http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; }
}网络
在Director Server进行配置(192.16812.4)session
ifconfig eth0:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up app
![]()
route add -host 192.168.12.100 dev eth0:0 负载均衡
![]()
echo "1" > /proc/sys/net/ipv4/ip_forward
ipvsadm --clear
ipvsadm -A -t 192.168.12.100:80 -s rr
ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.2:80 -g ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.3:80 -g
ipvsadm
![]()
在LVS的DR和TUN模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而再也不通过前端的Director Server。所以,就须要在每一个Real Server节点上增长虚拟vip地址,这样数据才能直接返回给用户。
接着咱们就须要在Real Server上进行配置。(192.168.12.二、192.168.12.3)
ifconfig lo:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up /sbin/route add-host 192.168.12.100 dev lo:0
![]()
arp_ignore:定义接收到arp请求时的响应级别 0 - 只要本地配置有相应的地址,就给予响应。 1 - 哪一个接口上接受arp请求,就从哪一个端口响应。DR模式使用
arp_announce:定义将本身地址向外通告时的通告级别 0 - 将本地任何接口上的任何地址向外通告。 1 - 试图仅向目标网络通告与其网络匹配的地址。 2 - 仅向与本地接口上地址匹配的网络进行通告。DR模式使用
sysctl -p使修改生效!
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/all/arp_announce sysctl -p
![]()
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
![]()
注意事项:
- 测试时须要在nginx的http中设置keepalive_timeout 0; 取消使用http持久链接模式,保证每次客户端发送请求都须要向服务端简历链接,这样作是为了测试效果更加明显,每次刷新界面都要通过lvs负载转发。 2.lvs进行负载转发须要保证lvs负载端口要和nginx服务的端口保持一致,这里是80 3.在nginx中keepalive_timeout的默认值是75s,默认使用http持久链接模式,可以使客户端到服务器端的链接持续有效,当出现对服务器的后继请求时,可避免创建或从新创建链接。生产环境建议keepalive_timeout不要设置为0
修改192.168.12.2和192.168.12.3下/usr/local/nginx/html/目录中index.html的内容,使其个性化。
第一次请求192.168.12.100
第二次请求192.168.12.100
假设我停到nginx1
咱们再次访问192.168.12.100,仍是能够的!由于lvs采用轮询策略,若是其中一个nginx请求不可达,那么久请求另外一个nginx!
为了方便配置启动lvs,咱们能够将Director Server 和 RealServer配置过程封装到Shell脚本中。
在Director Server进行配置
#!/bin/sh
# 定义虚拟ip
VIP=192.168.12.100
# 定义realserver,并已空格分开,根据需求修改
RIPS="192.168.12.2 192.168.12.3"
# 定义提供服务的端口
SERVICE=80
# 调用init.d脚本的标准库
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "Start LVS of DR Mode"
# 开启ip转发
echo "1" > /proc/sys/net/ipv4/ip_forward
# 绑定虚拟ip
ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev eth0:0
# 清除lvs规则
ipvsadm -C
# 添加一条虚拟服务器记录
# -p指定必定的时间内将相同的客户端分配到同一台后端服务器
# 用于解决session的问题,测试时或有别的解决方案时建议去掉
ipvsadm -A -t $VIP:$SERVICE -s rr
# 添加真实服务器记录
for RIP in $RIPS
do
echo $RIP:$SERVICE;
ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
done
# 设置tcp tcpfin udp的超时链接值
ipvsadm --set 30 120 300
ipvsadm
;;
stop)
echo "Stop LVS DR"
ifconfig eth0:0 down
ipvsadm -C
;;
*)
echo "Usage:$0 {start ¦ stop}"
exit 1
esac
复制代码
chmod +x /etc/init.d/lvsdr 启动: service lvsdr start 中止: service lvsdr stop
在RealServer上进行配置
#!/bin/sh
VIP=192.168.12.100
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "lo:0 port starting"
# 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
# 限制arp请求
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
;;
stop)
echo "lo:0 port closing"
ifconfig lo:0 down
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
;;
*)
echo "Usage: $0 {start ¦ stop}"
exit 1
esac
复制代码
chmod +x /etc/init.d/lvsdr 启动: service lvsdr start 中止: service lvsdr stop
###Summary
明天撸LVS四层+Nginx七层负载均衡!