常见的负载均衡的方式

目录导航
  1. 1. 1 负载均衡
    1. 1.1. 1.1 场景引入
    2. 1.2. 1.2 负载均衡的概念
  2. 2. 2 常见的负载均衡的方式
    1. 2.1. 2.1 基于DNS
    2. 2.2. 2.2 基于反向代理服务器(Apache、Nginx)
    3. 2.3. 2.3 基于NAT
    4. 2.4. 2.4 基于LVS
    5. 2.5. 2.5 基于NLB
    6. 2.6. 2.6 基于硬件

1 负载均衡

1.1 场景引入

Tomcat最大能承受的访问量是300,现在需要处理同时并发1000的访问量,应该怎么做?

1.2 负载均衡的概念

百度百科的解释。
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

2 常见的负载均衡的方式

2.1 基于DNS

在DNS上做负载均衡。

2.2 基于反向代理服务器(Apache、Nginx)

正向代理和反向代理的区别。
Nginx的配置如下:

1
upstream pandawork {
	server 192.168.1.25;
	server 192.168.1.30;
}
server {
    listen       80;
    server_name  www.pandawork.net;

    location / {
		proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
		proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
		client_max_body_size       12m;
		client_body_buffer_size    128k;
		client_body_temp_path      data/client_body_temp;
		proxy_connect_timeout      90;
		proxy_send_timeout         90;
		proxy_read_timeout         90;
		proxy_buffer_size          4k;
		proxy_buffers              4 32k;
		proxy_busy_buffers_size    64k;
		proxy_temp_file_write_size 64k;
		proxy_temp_path            data/proxy_temp;

        proxy_pass http://pandawork;
    }
}
5种方式的分配:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream pandawork {
	server 192.168.1.25;
	server 192.168.1.30;
}

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream pandawork {
	server 192.168.1.25 weight=10;
	server 192.168.1.30 weight=10;
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream pandawork {
	ip_hash;
	server 192.168.1.25
	server 192.168.1.30;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream pandawork {
	server 192.168.1.25;
	server 192.168.1.30;
	fair;
}

5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream pandawork {
	server 192.168.1.25;
	server 192.168.1.30;
	hash $request_uri;
	hash_method crc32;
}

2.3 基于NAT

NAT(Network Address Translation 网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的Internet IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。每次NAT转换势必会增加NAT设备的开销,但这种额外的开销对于大多数网络来说都是微不足道的,除非在高带宽有大量NAT请求的网络上。 NAT负载均衡将一个外部IP地址映射为多个内部IP地址,对每次连接请求动态地转换为一个内部服务器的地址,将外部连接请求引到转换得到地址的那个服务器上,从而达到负载均衡的目的。
NAT负载均衡是一种比较完善的负载均衡技术,起着NAT负载均衡功能的设备一般处于内部服务器到外部网间的网关位置,如路由器、防火墙、四层交换机、专用负载均衡器等,均衡算法也较灵活,如随机选择、最少连接数及响应时间等来分配负载。
NAT负载均衡可以通过软硬件方式来实现。软件的方式如Linux的iptables就可以实现。硬件方式就是集成了NAT服务的硬件,通常这样的硬件设备是第四层交换机和专用负载均衡器,第四层交换机的一项重要功能就是NAT负载均衡。
由于NAT是在第四层上做负载均衡,因此可用于出web外的多种服务,如ftp。

2.4 基于LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
三种转发机制:
1 Virtual Server via NAT
2 Virtual Server via IP Tunneling
Virtual Server和响应服务器间建立IP隧道,响应服务器可以在远端,响应直接由响应服务器返回给客户端。
3 Virtual Server via Direct Routing
Virtual Server直接将请求转发给响应服务器,响应服务器和Virtual Server必须在一个物理局域网内,响应直接由响应服务器返回给客户端。
参考:http://www.360doc.com/content/12/1117/19/820209_248441825.shtml

2.5 基于NLB

NLB(Network Load Balancing),网络负载平衡。
特点:
(1)NLB集群可以将两台或更多服务器结合起来使用
(2)一个NLB集群最多支持32台计算机
(3)NLB集群只能用于各节点的服务与数据完全相同的情况
(4)增强 Web、FTP、VPN等服务的可靠性和可伸缩性
NLB的工作原理
(1)集群中的每台服务器都有固定IP地址
(2)集群中的每台服务器还有一个共同的IP地址–NLB的集群IP地址
(3)NLB将客户端的访问信息发送给群集中的所有节点
(4)NLB算法决定提供服务的节点–其他不提供服务的节点丢弃访问请求
(4)NLB通过单播或多播来确保算法的特点

2.6 基于硬件

比较流行的是F5,价格相当高,最便宜的也要10几万。
http://network.51cto.com/art/201004/196752.htm
http://network.51cto.com/art/201004/196752.htm