linux下lvs搭建负载均衡集群

常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat

常用商业集群硬件有:F5,Netscaler,Radware,A10等

一、LVS介绍

LVS是linux virtual server的简写linux虚拟服务器,是一个虚拟的服务器集群系统,可以再unix/linux平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立。

LVS的三种工作模式:1.VS/NAT模式(Network address translation)2.VS/TUN模式(tunneling)

3.DR模式(Direct routing)

二、搭建LVS环境

1.LVS/NAT 配置

实验环境准备:

需要准备三台centos6.6系统机器,其中Director机器需要安装两块网卡;

Director的hostname命名为movies,两台real server的hostname各命名longls、bols;

每台机器上要提前安装nginx服务,为避免不必要的错误也把扩展源epel-release给安装了;

以下为各个服务器的IP:

[[email protected] ~]# ifconfig   //此为Director机器,eth0为看成外网IP、eth1看成内网IP

eth0      Link encap:Ethernet  HWaddr 00:0C:29:E6:9E:DF 
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee6:9edf/64 Scope:Link

eth1      Link encap:Ethernet  HWaddr 00:0C:29:E6:9E:E9 
          inet addr:192.168.217.111  Bcast:192.168.217.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee6:9ee9/64 Scope:Link

[[email protected] ~]# ifconfig   //第一台real server机器,eth1看成内网IP

eth1      Link encap:Ethernet  HWaddr 00:0C:29:1B:40:8E 
          inet addr:192.168.217.120  Bcast:192.168.217.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe1b:408e/64 Scope:Link

[[email protected] ~]# ifconfig   //第二台real server机器,eth1看成内网IP

eth1      Link encap:Ethernet  HWaddr 00:0C:29:77:83:34 
          inet addr:192.168.217.119  Bcast:192.168.217.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe77:8334/64 Scope:Link
         同时也要将Director的eth1网卡的IP设置为两台real server的网关;

[[email protected] ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.217.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.217.111 0.0.0.0         UG    0      0        0 eth1

[[email protected] ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.217.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.217.111 0.0.0.0         UG    0      0        0 eth1

开始搭建环境:

[[email protected] ~]# yum install -y  ipvsadm  //Director安装此命令,两台real server不用安装

[[email protected] ~]# vim /usr/local/sbin/lvs_nat.sh   //Direcotr 上添加以下内容

#! /bin/bash

# director 服务器上开启路由转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

# 关闭icmp的重定向

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

# director 设置nat防火墙

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.217.0/24  -j MASQUERADE

# director设置ipvsadm

IPVSADM=‘/sbin/ipvsadm‘

$IPVSADM -C

$IPVSADM -A -t 192.168.1.111:80 -s lc -p 300

$IPVSADM -a -t 192.168.1.111:80 -r 192.168.217.119:80 -m -w 1

$IPVSADM -a -t 192.168.1.111:80 -r 192.168.217.120:80 -m -w 1

[[email protected] ~]# /bin/bash /usr/local/sbin/lvs_nat.sh  //执行脚本

[[email protected] ~]# iptables -nvL -t nat   //查看规则
Chain PREROUTING (policy ACCEPT 3 packets, 534 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 1 packets, 124 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       192.168.217.0/24     0.0.0.0/0

Chain OUTPUT (policy ACCEPT 1 packets, 124 bytes)
 pkts bytes target     prot opt in     out     source               destinatio

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.111:80 lc persistent 300
  -> 192.168.217.119:80           Masq    1      0          0         
  -> 192.168.217.120:80           Masq    1      0          0

[[email protected] ~]# /etc/init.d/nginx start  //两台real server上启动nginx服务

[[email protected] ~]# /etc/init.d/nginx start

通过浏览器可以看出nginx以正常启动,由于两个的内容一样为避免出现错误故更该了访问文件内容;

[[email protected] ~]# cat /usr/share/nginx/html/index.html 
longls.avi

[[email protected] ~]# cat /usr/share/nginx/html/index.html 
bols.avi

更改html文件内容后在用浏览器刷新访问会变为更改后的html文件内容;

测试nat规则:

更改轮询规则为lc,权重为2,进行测试:

[[email protected] ~]# /bin/bash /usr/local/sbin/lvs_nat.sh   //从新执行脚本

用另一台linux机器curl测试,出现1次longls,1次bols,来回切换说明OK

[[email protected] ~]# curl 192.168.1.111
bols.avi
[[email protected] ~]# curl 192.168.1.111
longls.avi
[[email protected] ~]# curl 192.168.1.111
bols.avi

在Director机器上ipvsadm -ln可以查看,权重比,保持的链接比大概一样;

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.111:80 lc
  -> 192.168.217.119:80           Masq    1      0          7         
  -> 192.168.217.120:80           Masq    1      0          7

2. LVS/DR 配置

实验环境准备:

需要准备三台机器,每台机器只需要配置1个ip,vip是用脚本执行后会出现的,不用手动设置;

Director的hostname命名为movies,两台real server的hostname各命名longls、bols;

每台机器上要提前安装nginx服务,为避免不必要的错误也把扩展源epel-release给安装了;

[[email protected] ~]# vim /usr/local/sbin/lvs_dr.sh  // Director添加以下内容

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/sbin/ipvsadm

vip=192.168.1.110

rs1=192.168.1.119

rs2=192.168.1.120

ifconfig eth0:0 down

ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev eth0:0

$ipv -C

$ipv -A -t $vip:80 -s wrr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 3

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

[[email protected] ~]# vim /usr/local/sbin/lvs_dr_rs.sh   //两台real server都要增加以下脚本

#! /bin/bash

vip=192.168.1.110

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip 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

[[email protected] ~]# /bin/sh /usr/local/sbin/lvs_dr.sh   //执行shell脚本

[[email protected] ~]# sh /usr/local/sbin/lvs_dr_rs.sh

[[email protected] ~]# sh /usr/local/sbin/lvs_dr_rs.sh

[[email protected] ~]# ifconfig   //通过查看IP发现虚拟IP,dr显示eth0:0,rs1、rs2显示lo:0

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:E6:9E:DF

inet addr:192.168.1.110  Bcast:192.168.1.110  Mask:255.255.255.255

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Interrupt:19 Base address:0x2000

[[email protected] ~]# ifconfig

lo:0      Link encap:Local Loopback

inet addr:192.168.1.110  Mask:255.255.255.255

UP LOOPBACK RUNNING  MTU:65536  Metric:1

[[email protected] ~]# ifconfig

lo:0      Link encap:Local Loopback

inet addr:192.168.1.110  Mask:255.255.255.255

UP LOOPBACK RUNNING  MTU:65536  Metric:1

[[email protected] ~]# ipvsadm -ln   //查看规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.110:80 wrr
  -> 192.168.1.119:80             Route   3      0          0         
  -> 192.168.1.120:80             Route   1      0          0

在另开一台linux机器进行测,发现出现一次longls后出现三次bols,从而说明wrr轮询规则OK

[[email protected] ~]# curl 192.168.1.110

longls.avi
[[email protected] ~]# curl 192.168.1.110
bols.avi
[[email protected] ~]# curl 192.168.1.110
bols.avi
[[email protected] ~]# curl 192.168.1.110
bols.avi
[[email protected] ~]# curl 192.168.1.110
longls.avi

[[email protected] ~]# ipvsadm -ln   //查看规则发现比例大概为3:1
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.110:80 wrr
  -> 192.168.1.119:80             Route   3      0          8         
  -> 192.168.1.120:80             Route   1      0          2

DR配置测试:

若一台rs如果挂了之后,还是会轮询访问,若访问到宕掉的机器则会出现错误;

[[email protected] ~]# /etc/init.d/nginx stop   //模拟该机器宕机
停止 nginx:                                               [确定]

根据轮询访问算法3:1比例会发现访问未宕掉机时正常访问,而访问宕掉的机器会发现报错;

[[email protected] ~]# curl 192.168.1.110
bols.avi
[[email protected] ~]# curl 192.168.1.110
bols.avi
[[email protected] ~]# curl 192.168.1.110
bols.avi
[[email protected] ~]# curl 192.168.1.110
curl: (7) couldn‘t connect to host

通过上面的例子我们会发现在机器宕掉后我们仍能访问,若想将其剔除还要结合keeplived;

时间: 2024-10-01 03:50:03

linux下lvs搭建负载均衡集群的相关文章

LVS搭建负载均衡集群

1.集群的概念: 服务器集群就是将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器 2.集群的分类: 高可用集群(HA) 主要用于高可用解决方案的实现,节点间以主备形式,实现容灾:在大型故障的情况下实现快速恢复,快速提供服务 工作方式: 主从方式:主机工作,备机监控 互为主从:两服务器同时在线,一台服务器故障可切换到另一台上.有效的利用服务器资源,但当服务器故障时候,将可能导致服务器负载过大 多台服务器主从:大部分服务器在线使用,小部分监控:若有部分服务器故障,可切换到指定

使用lvs搭建负载均衡集群

有时候,单台服务器的性能可能无法应付大规模的服务请求,且其一旦出现故障,就会造成用户在一段时间内无法访问.通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益. 集群是一组相互独立的.通过网络互联的计算机组,并以单一系统的模式加以管理,或用于分摊负载,或用于增强可靠性,或用于高速计算. 一.集群类型 LB:Load Balancing,负载均衡集群,用于消除单点故障,当一个节点出现故障而无法正常提供服务时,自动.快速地切换到另外的节点上去:常见软件或实现方式有l

Linux集群:LVS搭建负载均衡集群(二)

一.DR模式LVS搭建 1.准备工作 调度器dir:192.168.242.128 真实服务器rs1:192.168.242.129,网关恢复为之前的原始网关 真实服务器rs2:192.168.242.130,网关恢复为之前的原始网关 VIP:192.168.242.110 2.dir上编写脚本 [[email protected] ~]# vim /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forw

RHEL6 搭建LVS/DR 负载均衡集群 案例

搭建LVS/DR 负载均衡集群 案例 实验拓扑图: 操作流程: Director Server :        192.168.4.50 pc50 安装并启用ipvsadm 配置辅助IP地址 创建虚拟服务器,向虚拟服务器中加入节点 Real Server:        192.168.4.51 pc51        192.168.4.52 pc52 配置WEB 服务器 配置辅助IP地址,调整内核参数 Clinet :192.168.4.253 pc253 连接虚拟服务器测试 环境准备:

LVS DR 负载均衡集群

LVS DR 负载均衡集群 试验准备:五台主机ABCDE,主机ABCDE均为单网卡,IP地址分别为192.168.10.2,192.168.10.3,192.168.10.4,192.168.10.5,192.168.10.6.主机A作为内网客户端,主机B负载均衡调度器,主机C和主机D作为网站服务器,主机E作为共享存储,均清除防火墙和SELINUX.操作系统均为RHELx86_64,为最小化安装. 主机A操作 #vim /etc/sysconfig/network-scripts/ifcfg-e

linux集群系列(3) --- LVS之负载均衡集群DR实例

一.简介     1.1.  负载均衡集群:LB (load balancing) LVS 是linux virtual server 的简写,即linux的虚拟服务器,是一个虚拟的服务器集群系统.ip负载均衡技术是在负载调度器的实现技术中效率最高的,在已有的ip负载均衡技术中,主要通过网络地址转换(即VS/NAT 技术).由于使用nat技术会使分派器成为瓶颈,所以提出了通过ip隧道实现虚拟服务器(即VS/TUN)和通过直接路由实现虚拟服务器的方法即VS/DR. VS/NAT.VS/TUN和VS

Centos7搭建lvs+keepalive负载均衡集群

keepalived简介 keepalived是分布式部署解决系统高可用的软件,结合lvs(LinuxVirtual Server)使用,解决单机宕机的问题. keepalived是一个基于VRRP协议来实现IPVS的高可用的解决方案.对于LVS负载均衡来说,如果前端的调度器direct发生故障,则后端的realserver是无法接受请求并响应的.因此,保证前端direct的高可用性是非常关键的,否则后端的服务器是无法进行服务的.而我们的keepalived就可以用来解决单点故障(如LVS的前端

搭建LVS+Keepalived负载均衡集群

这两天学习了LVS+Keepalived负载均衡的搭建.网上的教程非常多,可是动起手来遇到不少问题. 如今把自己的搭建过程以及遇到的一些问题给分享下. 硬件环境: Macbook 8G内存.250G SSD,双核 软件环境: 因为资源有限.搭建了4个虚拟机. 虚拟机 [[email protected] work]# uname -a Linux rs-1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_6

Linux集群:搭建负载均衡集群(一)

一.负载均衡介绍 主流开源软件LVS.keepalived.haproxy.Nginx等: 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,可以当做7层使用: keepalived的负载均衡功能其实就是lvs: lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而Nginx仅仅支持HTTP,HTTPS,mail,haproxy也支持MySQL这种: 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而Nginx这种7