2015-06-05/2015-06-08LB负载均衡集群

常用的负载均衡开源软件有: nginx、lvs、keepalived

商业的硬件负载设备: F5、Netscale

1. LB、LVS介绍LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群

LVS是一个实现负载均衡集群的开源软件项目

LVS架构从逻辑上可分为调度层(Director)、server集群层(Real server)和共享存储层

LVS可分为三种工作模式:  ( dr模式参考这篇文章  http://os.51cto.com/art/201105/264303.htm    这篇介绍的还是挺详细的: http://www.it165.net/admin/html/201401/2248.html )

NAT(调度器将请求的目标ip即vip地址改为Real server的ip, 返回的数据包也经过调度器,调度器再把源地址修改为vip)

TUN(调度器将请求来的数据包封装加密通过ip隧道转发到后端的real server上,而real server会直接把数据返回给客户端,而不再经过调度器)

DR(调度器将请求来的数据包的目标mac地址改为real server的mac地址,返回的时候也不经过调度器,直接返回给客户端)

三种IP:DIP(driector ip), VIP(virtual ip), RIP(Real IP). 其中DIP, RIP 为同一个网段,并且为私网IP, vip为对外提供服务的ip,Director, Real server上都设置vip

LVS的调度算法:轮叫调度(Round Robin)(简称rr) ,加权轮叫(Weighted Round Robin)(简称wrr),最少链接(least connection)(LC),加权最少链接(Weighted Least Connections)(WLC) 等等   (其他算法,参考 http://www.aminglinux.com/bbs/thread-7407-1-1.html)

2. LVS/NAT 配置

三台服务器一台作为director, 两台作为real server

Director 有一个外网ip (192.168.31.166) 和一个内网ip(192.168.21.166), 两个real server上只有内网ip(192.168.21.100)和(192.168.21.101) 并且需要把两个real server的内网网关设置为director的内网ip(192.168.21.166)

两个real server 上都安装httpd: yum install -y nginx

Director上安装ipvsadm  yum install -y  ipvsadm

Direcotr 上 vim /usr/local/sbin/lvs_nat.sh //增加:

#! /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.21.0/24  -j MASQUERADE

# director设置ipvsadm

IPVSADM=‘/sbin/ipvsadm‘

$IPVSADM -C

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

$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1

$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.101:80 -m -w 1

直接运行这个脚本就可以完成lvs/nat的配置了:

/bin/bash /usr/local/sbin/lvs_nat.sh

通过浏览器测试两台机器上的web内容,为了区分开,我们可以把nginx的默认页修改一下:

rs1上: echo "rs1rs1" >/usr/share/nginx/html/index.html

rs2上: echo "rs2rs2" >/usr/share/nginx/html/index.html

3. LVS/DR 配置

三台机器:

director(eth0192.168.31.166, vip eth0:0: 192.168.31.110)

real server1(eth0 rip: 192.168. 31.100, vip lo:0: 192.168.31.110)

real server2(eth0 rip: 192.168.31.101, vip lo:0: 192.168.31.110)

Director 上 vim /usr/local/sbin/lvs_dr.sh //增加

#! /bin/bash

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

ipv=/sbin/ipvsadm

vip=192.168.31.110

rs1=192.168.31.100

rs2=192.168.31.101

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 rr

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

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

两台rs上:vim /usr/local/sbin/lvs_dr_rs.sh

#! /bin/bash

vip=192.168.31.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

关于arp_ignore和 arp_announce 参考:http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

然后director上执行: bash /usr/local/sbin/lvs_dr.sh

两台rs上执行: bash /usr/local/sbin/lvs_dr_rs.sh

Windows下浏览器测试访问

4. LVS/DR + keepalived配置

注意:前面虽然我们已经配置过一些操作,但是下面我们使用keepaliave操作和之前的操作是有些冲突的,所以若是之前配置过DR,请首先做如下操作:dr上执行:

$ipv -C

ifconfig eth0:0  down

前面的lvs虽然已经配置成功也实现了负载均衡,但是我们测试的时候发现,当某台real server把httpd进程停掉,那么director照样会把请求转发过去,这样就造成了某些请求不正常。所以需要有一种机制用来检测real server的状态,这就是keepalived。它的作用除了可以检测rs状态外,还可以检测备用director的状态,也就是说keepalived可以实现ha集群的功能,当然了也需要一台备用director.

备用director也需要安装一下keepalived软件

yum install -y keepalived

安装好后,编辑配置文件

vim /etc/keepalived/keepalived.conf   //加入如下:

vrrp_instance VI_1 {

state MASTER   #备用服务器上为 BACKUP

interface eth0

virtual_router_id 51

priority 100  #备用服务器上为90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.31.110

}

}

virtual_server 192.168.31.110 80 {

delay_loop 6                  #(每隔10秒查询realserver状态)

lb_algo wlc                  #(lvs 算法)

lb_kind DR                  #(Direct Route)

persistence_timeout 60        #(同一IP的连接60秒内被分配到同一台realserver)

protocol TCP                #(用TCP协议检查realserver状态)

real_server 192.168.31.100 80 {

weight 100               #(权重)

TCP_CHECK {

connect_timeout 10       #(10秒无响应超时)

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.31.101 80 {

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

以上为主director的配置文件,从director的配置文件只需要修改

state MASTER  -> state BACKUP

priority 100 -> priority 90

配置完keepalived后,需要开启端口转发(主从都要做):

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

然后,两个rs上执行 /usr/local/sbin/lvs_dr_rs.sh 脚本

最后,两个director上启动keepalived服务(先主后从):

/etc/init.d/keepalived start

另外,需要注意的是,启动keepalived服务会自动生成vip和ipvsadm规则,不需要再去执行上面提到的/usr/local/sbin/lvs_dr.sh 脚本。

nginx ip_hash 实现长连接

  1. upstream test {
  2. ip_hash;
  3. server 192.168.31.100;
  4. server 192.168.31.101;
  5. }
  6. server {
  7. listen 80;
  8. server_name bbs.aaa.cn;
  9. location / {
  10. proxy_pass      http://test/;
  11. proxy_set_header Host   $host;
  12. proxy_set_header X-Real-IP      $remote_addr;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. }
  15. }

复制代码

扩展学习:

haproxy+keepalived  http://blog.csdn.net/xrt95050/article/details/40926255

nginx、lvs、haproxy比较  http://www.csdn.net/article/2014-07-24/2820837

keepalived中自定义脚本 vrrp_script   http://www.linuxidc.com/Linux/2012-08/69383.htm http://my.oschina.net/hncscwc/blog/158746

nginx代理  http://www.apelearn.com/bbs/thread-64-1-1.html

nginx长连接  http://www.apelearn.com/bbs/thread-6545-1-1.html

nginx算法分析   http://blog.sina.com.cn/s/blog_72995dcc01016msi.html

lvs dr模式只使用一个公网ip的实现方法   http://storysky.blog.51cto.com/628458/338726

nginx负载均衡和lvs负载均衡的比较分析

http://www.sudone.com/nginx/nginx_vs_lvs.html

时间: 2024-11-07 15:01:15

2015-06-05/2015-06-08LB负载均衡集群的相关文章

nginx+keepalived的高可用负载均衡集群构建

实验架构图: 实验环境 Nginx和Keepalived原理介绍 参考博客:http://467754239.blog.51cto.com/4878013/1541421 1.nginx Nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发, 从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(wor

LVS+Keepalived 实现高可用负载均衡集群

简介: 随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时还需要实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?有!我们利用LVS+Keepalivd基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器.  一.LVS+Keepalived  介绍 1.  LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服

LVS负载均衡集群(干货来袭)

提升服务器响应能力的方式: Scale On:向上扩展 升级服务器硬件 Scale Out:向外扩展 增加服务器个数 集群类型: LB: Load Balance负载均衡集群 并发处理能力 HA: High Availability高可用集群 在线时间/(在线时间+故障处理时间) 99%,99.9%,99.99%,99.999% HPC:High Performance Computer 高性能集群 并行处理集群 分布式存储:分布式文件系统 将大任务切割成小任务,分别进行处理计算的机制 脑裂 s

apache以mod_jk方式实现tomcat的负载均衡集群

目录 1.环境准备 2.mod_jk配置 3.测试 4.总结 1.环境准备 准备三台主机,一台提供httpd环境,另两台提供tomcat环境. 主机规划: 主机名:httpd           IP地址:192.168.0.200提供httpd服务 主机名:TomcatA    IP地址:192.168.0.201提供tomcat服务 主机名:TomcatB    IP地址:192.168.0.202提供tomcat服务 jdk与tomcat的安装请参照博文:http://zhaochj.bl

跨园区容灾,升级不停服——高可用负载均衡集群实践

对于云计算行业来说,云服务的可用性和可扩展性是的检测其服务质量的重要标准,也是最受用户关注的两大难题.各云计算厂商针对容灾.升级等需求的解决方案,最能够体现其底层架构的实力.腾讯云基于基础架构的优势,为分期乐.微信红包等平台提供技术支持,可以完美满足如下三点需求: 1. 高可用能力,容灾能力强,升级不停服 2. 可扩展性强,功能丰富,性能超高 3. 避免重复造轮子,性价比之王 近期,针对一些客户对腾讯云产品可用性的问询,腾讯云基础产品团队对负载均衡产品的原理做出详细阐述,并希望通过对腾讯负载均衡

LVS+Keepalived高可用负载均衡集群架构

实验环境: LVS和keepalived介绍: 1.keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用来做双机热备. 使用keepalived构建LVS群集更加简便易用,主要优势体现在: 对LVS负载调度器实现热备切换,提高可用性: 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入. 2.在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,

跨园区容灾,升级不停服:高可用负载均衡集群实践

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云中间件团队发表于云+技术周刊特别版 作者:方坤丁 对于云计算行业来说,云服务的可用性和可扩展性是的检测其服务质量的重要标准,也是最受用户关注的两大难题.各云计算厂商针对容灾.升级等需求的解决方案,最能够体现其底层架构的实力.腾讯云基于基础架构的优势,为分期乐.微信红包等平台提供技术支持,可以完美满足如下三点需求: 1. 高可用能力,容灾能力强,升级不停服 2. 可扩展性强,功能丰富,性能超高 3. 避免重复造轮子,性价比之王

实战:ansible自动化部署nginx+keepalived+mysql负载均衡集群

一.目的 使用ansible自动化部署nginx+keepalived+mysql负载均衡集群. 二.拓扑规划 三.详细步骤 1.环境的搭建 (1).安装ansible,同时配置私钥免密码进行通信 [[email protected] ~]# ssh-keygen  -t rsa #-t表示使用的加密类型,其中rsa1表示version1版本,rsa.dsa.ecdsa的加密对于的是version2版本 Generating public/private rsa key pair. #这里询问你

apache+inotify-tools+keepalived+lvs-DR模式配置高可用负载均衡集群

环境:虚拟机VMware workstation 9 操作系统:Redhat 5.6 i386 一.keepalived+LVS-DR模式配置高可用负载均衡 拓扑如下: 二.服务器IP配置信息 四台服务器均有VMware虚拟机实现,两台HA主机.两台web服务器.网络方式都设置为NAT模式 1.master:192.168.80.145 2.slaver:192.168.80.137 3.web1:192.168.80.144 4.web2:192.168.80.134 5.VIP:192.16

LVS+Keepalived搭建MyCAT高可用负载均衡集群

LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.目前有三种IP负载均衡技术(VS/NAT.VS/TUN和VS/DR),十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq). Keepalvied Keepalived在这里主要用作RealServer的健康状态检查以及Mast