lvs+keeplive DR 高可用负载均衡

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:下载安装

keepalived 
yum install keepalived
ipvsadm (ipvs的管理工具,ipvs已经集成到liunx内核,无须安装)
yum -y install ipvsadm

 启动和停止

keepalived 写道
启动/停止
/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配置(主备略有不同,主要是角色和优先级)

vim /etc/keepalived/keepalived.conf 写道
! Configuration File for 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服务器脚本

#!/bin/bash

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服务器脚本

#!/bin/bash
# 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监控(转的)

#全局配置
global_defs {
notification_email {
[email protected] #邮件地址,需要本机开启SMTP服务
}
notification_email_from root@localhost #发送人
smtp_server 127.0.0.1 #邮件服务器
smtp_connect_timeout 30 #超时
router_id LVS_DEVEL #负载均衡器标示:同一局域网内,应该是唯一的。
}
vrrp_script chk_http  {
script "/opt/tools/bin/check_ng.sh"
interval 2 (检测的间隔)
weight 2 (#如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少;如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加;其他情况,维持原本prority的优先级。)
}
vrrp_instance VI_1 (vl_1出问题会执行/opt/tools/bin/check_ng.sh)
track_script { 
    chk_http          //执行监控的服务 
}

 

 

 

参拷:http://www.cnblogs.com/kgdxpr/p/3309776.html

你可能感兴趣的:(负载均衡)