1:软件介绍
LVS (负载均衡,又叫ipvs)
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在 1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术( VS/NAT、VS/TUN和VS/DR); 八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
Keepalvied (HA)
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和
BackUP主机之间failover的实现
2:下载安装
启动和停止
/etc/init.d/keepalived start/stop 或 service keepalived start/stop
查看状态
service keepalived status
查看lvs状态:ipvsadm -L
3:基本配置
1)硬件环境
两台lvs+keeplived机器:主(192.168.169.132),备(192.168.169.133)
两台web服务器:web1(192.168.169.200),web2(192.168.169.201)
客户端通过访问ip(192.168.169.100)来请求
2)keepalived配置(主备略有不同,主要是角色和优先级)
global_defs {
router_id LVS_DEVEL #负载均衡器标示:同一局域网内,应该是唯一的。
}
vrrp_instance VI_1 { #虚拟路由名称
state MASTER #角色,备为BACKUP
interface eth0 #绑定的网口
virtual_router_id 51 #定义的ID,官方的是 51,主从服务器必须一致
priority 100 #优先级,主机大于备机
advert_int 1 #VRRP Multicast广播周期秒数,检查间隔
authentication {
auth_type PASS #认证方式(主备一致)
auth_pass 1111
}
virtual_ipaddress {
192.168.169.100 #映射的虚拟ip,可有多个,分行写
}
}
virtual_server 192.168.169.100 80 { #对映射IP端口的配置
delay_loop 6 #设置运行情况检查时间周期,单位为秒
lb_algo rr #设置负载调度算法,这里设置rr,即轮询算法;常用wlc,rr
lb_kind DR #设置LVS实现负载均衡机制,有NAT、TUN、DR三个模式可选
persistence_timeout 50 #会话保持,同一IP的连接50秒内被分配到同一台realserver
protocol TCP #指定转发协议类型,有TCP和UDP两种
sorry_server 127.0.0.1 80 #realserver全部失败,vip指向本机80端口。
real_server 192.168.169.201 80 { #映射对应的真实ip及端口
weight 1 #权重,越大被分配的请求越多
TCP_CHECK { #通过tcpcheck判断RealServer的健康状态
connect_timeout 3 #超时时间(秒)
nb_get_retry 3 #重试次数
delay_before_retry 3 #重连间隔 connect_port 80 #健康检查端口
}
}
real_server 192.168.169.200 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
使用ip a 可以查看是否生效:“inet 192.168.169.100/32 scope global eth0” 只有主上面有
也可查看日志:tail -100 /var/log/messages
测试ha,可以关闭主的keepalived查看备机是否有“inet 192.168.169.100/32 scope global eth0”:service keepalived stop
问题:测试很久没有成功,最后问题找到是其中一台机器没有eth0,要认真
3)lvs配置
执行脚本(vip替换成你的客户访问ip)
lvs服务器脚本
VIP=192.168.169.100
RIP1=192.168.169.200
RIP2=192.168.169.201
/etc/rc.d/init.d/functions
logger $0 called with $1
case "$1" in
start)
echo " start LVS of DirectorServer"
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run LVS
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
注:/sbin/ipvsadm -A -t $VIP:80 -s rr (rr代表轮询,还有分配方式)
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g (-g代表DR模式,还有其他模式)
web服务器脚本
# 2013-09-07 by kgdxpr
VIP=192.168.169.100
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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
可以把它保存成/usr/bin/lvs.sh ,方便执行
并给它执行权限:chmod +w /usr/bin/lvs.sh && chmod 775 /etc/rc.d/init.d/functions
4:运行
关闭安全软件:SELinux,iptables (http://692088846.iteye.com/admin/blogs/1927390),iptables可以开通80端口
开启转发:在 /etc/sysctl.conf 中 net.ipv4.ip_forward = 1 ,并使生效:sysctl -p
启动服务端脚本lvs.sh: sh lvs.sh start
启动keepalived: service keepalived start
查看状态:watch ipvsadm -ln
启动web端脚本: sh lvs.sh start(我这里用一相名字了)
5:测试
1):ha,关闭主机器的keepalived,查看是否还能继续访问
2):负载,多访问几次,查看是否两个ip都分配到了连接,也可以使用wget ip 在服务器上测试
6:锦上添花
1):测试用的apache2,apt-get install apache2 && /etc/init.d/apache2 restart
在contos上是用service httpd start来启动默认的apache
也可用tomcat,把端口改为80
2):加入自动启动
chkconfig --level 35 keepalived on
3):DR模式中LVS主机与实际web服务器都有一块网卡连在同一物理网段上
4):keepalived加上nginx监控(转的)
notification_email {
[email protected] #邮件地址,需要本机开启SMTP服务
}
notification_email_from root@localhost #发送人
smtp_server 127.0.0.1 #邮件服务器
smtp_connect_timeout 30 #超时
router_id LVS_DEVEL #负载均衡器标示:同一局域网内,应该是唯一的。
}
script "/opt/tools/bin/check_ng.sh"
interval 2 (检测的间隔)
weight 2 (#如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少;如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加;其他情况,维持原本prority的优先级。)
}
chk_http //执行监控的服务
}
参拷:http://www.cnblogs.com/kgdxpr/p/3309776.html