lvs+keepalived

具体解释参考:http://www.linuxvirtualserver.org/zh/lvs4.html  

   基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,以DR模式的LVS群集为基础,增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建建有负载均衡、高可用两种能力的LVS网站群集平台。

IPVS实现负载均衡机制有三种:
 VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。

NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下, 网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为 RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端 看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度 和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。


lvs支持8种不同的调度算法:

  • 轮叫调度(Round-Robin Scheduling)
  • 加权轮叫调度(Weighted Round-Robin Scheduling)
  • 最小连接调度(Least-Connection Scheduling)
  • 加权最小连接调度(Weighted Least-Connection Scheduling)
  • 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
  • 目标地址散列调度(Destination Hashing Scheduling)
  • 源地址散列调度(Source Hashing Scheduling)



通过LVS+Keepalived构建的LVS集群,LVS负载均衡用户请求到后端RS服务器,Keepalived的作用是检测web服务器的状态,如果有一台RS 服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

keepalived可以实现服务的高可用或热备,用来防止单点故障的问题;而Keepalived的核心VRRP协议,VRRP协议主要实现了在路由器或三层交换机处的冗余;Keepalived就是使用VRRP协议来实现高可用的;

Keepalived启动后会有三个进程:
    父进程:内存管理,子进程管理
    子进程:VRRP子进程
    子进程:healthchecker子进程

高可用集群构建前提:
1.proxy和proxy2节点时间必须同步;

192.168.12.92   lvs-slave
192.168.12.38    lvs-master
192.168.12.22   lvs-web2 b
192.168.12.25   lvs-web1 a
192.168.12.230  vip

(1)本次基于VMware Workstation搭建一个四台Linux(CentOS 6.6)系统所构成的一个服务器集群,其中两台负载均衡服务器(一台为主机,另一台为备机),另外两台作为真实的Web服务器
(2)本次实验基于DR负载均衡模式,设置了一个VIP(Virtual IP)为192.168.12.230,用户只需要访问这个IP地址即可获得网页服务。其中,负载均衡主机为192.168.12.38,备机为192.168.12.92。Web服务器A为192.168.12.25,Web服务器B为192.168.80.22

一、
1)将机器绑定ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.12.22
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
DNS1=114.114.114.114
DNS2=202.106.0.20
或者用setup命令更改
2)设定主机名
hostname XXX
vi /etc/sysconfig/network
3)IP地址与主机名绑定
 vi /etc/hosts
192.168.12.92 lvs-slave
192.168.12.6 lvs-master
192.168.12.22 lvs-web2
192.168.12.25 lvs-web1

#在Master与Backup服务器上分别安装Ipvsadm、Keepalived
yum install -y ipvsadm kernel-devel perl  perl-DBI  perl-DBD-MySQL  make gcc openssl-devel libnl*
yum install -y keepalived ipvsadm
#这里安装Ipvsadm工具主要是为了查看lvs规则使用
chkconfig --add keepalived
chkconfig keepalived on
chkconfig --list keepalived

内核优化 主要是开启内核转发
vi /etc/sysctl.conf
#———————————————————————————————————————————-
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.core.somaxconn = 32768
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 20
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_mem = 41943040 73400320 94371840
net.ipv4.tcp_max_orphans = 3276800
fs.file-max = 1300000#LVS虚拟服务器(VIP)忽略ARP广播包
net.ipv4.ip_forward= 1
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.all.arp_announce= 2

配置备负载服务器 192.168.12.38
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   zclzhao@admin.com    发生故障时发送的邮箱
   }
   notification_email_from admin@admin.com    使用哪个邮箱发送
   smtp_server 192.168.12.1    发件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP        指定keepalived的角色,MASTER为主,BACKUP为备
    interface eth1        指定网络接口
    virtual_router_id 5 虚拟路由编号,主备要一致
    priority 99            定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1        检查间隔,默认为1S
    authentication {    定义认证
        auth_type PASS    认证方式为口令认证
        auth_pass 1111    认证口令
    }
    virtual_ipaddress {    定义vip
        192.168.12.230    多个vip可以换行添加
    }
}

virtual_server 192.168.12.230 80 {
    delay_loop 6        每隔6秒查看realserver状态
    lb_algo wrr            调度算法为加权最小连接数
    lb_kind DR            lvs工作模式为DR(直接路由)模式
    nat_mask 255.255.255.0
    persistence_timeout 0 同一IP的连接0秒内分配到同一台realserver (这个0根据实际环境更改)
    protocol TCP        用TCp检测realserver的状态

    real_server 192.168.12.22 80{    定义realserver
        weight 3                    定义权重
        TCP_CHECK {                    注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver}
            connect_port 80
            connect_timeout 10        10秒无反应超时
            nb_get_retry 3
            delay_before_retry 3
        }
}

    real_server 192.168.12.25 80 {
        weight 3
        TCP_CHECK {
            connect_port 80
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

配置主lvs的keepalived,只需要将state BACKUP 改为state MASTER,将priority 99 的值改成100

配置两台web    
192.168.12.22操作

cat /etc/init.d/realserver
SNS_VIP=192.168.12.230            定义虚拟ip
. /etc/rc.d/init.d/functions    调用init.d脚本的标准库
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_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
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       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 "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

chmod 755 /etc/init.d/realserver
service realserver start

将realserver启动脚本考到192.168.12.25/etc/init.d/下
scp /etc/init.d/realserver root@192.168.12.22:/etc/init.d/realserver

验证测试
指定请求的均衡转发:因为两个Web服务器的权重都一样,所以会依次转发给两个Web服务器;

posted @ 2015-11-19 12:26  zclzhao  阅读(352)  评论(0编辑  收藏  举报