实现负载均衡的方式有很多,下面将列出几种方式,并对比优劣:
通过F5实现负载均衡,性能优异,F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理能力,但是F5价格高昂,一般小公司用不起软件层面可以通过LVS来实现负载均衡,这是一款中国人开发的软件。
性能受到主机运算能力的制约除了LVS之外,还可以通过Nginx实现负载均衡,为了实现高可用需要和keepalived配合使用,Nginx实现负载均衡也是本文讲解的重点还可以在DNS层面做负载均衡,在域名解析的时候解析到不同的服务器上。
优点是配置简单,非常容易实现,缺点是没有检测机制,不够均衡,容错能力比较差
硬件层面可以通过F5实现负载均衡,性能优异。F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理能力,但是F5价格高昂,一般小公司用不起 软件层面可以通过LVS来实现负载均衡,这是一款中国人开发的软件。因为是软件层面的负载均衡,性能受到主机运算能力的制约 除了LVS之外,还可以通过Nginx实现负载均衡,为了实现高可用需要和keepalived配合使用,Nginx实现负载均衡也是本文讲解的重点 还可以在DNS层面做负载均衡,在域名解析的时候解析到不同的服务器上。优点是配置简单,非常容易实现,缺点是没有检测机制,不够均衡,容错能力比较差
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·西索夫)所开发,供俄国大型的入口网站及搜索引擎Rambler(漫步者)(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。
我们想要使用Nginx那么就必须满足上面的四个条件. 我们配置负载均衡的目的是在于当用户访问我们的服务器的时候, 首先会通过 Nginx服务器来决定转发到哪个Tomcat服务器上去给用户提供服务, 当然这个概率是我们通过权重来配置的. 经过Nginx指派之后, 我们就可以处理高并发的访问了, 这里就能达到负载均衡的目的.
Nginx的负载均衡是通过upstream来实现的,在upstream中指定若干个 server,格式如下:
myserver就是通过 upstream 定义的一组负载均衡模板,其中:
在配置完upstream后,还要让客户端过来的请求反向代理到myserver,格式如下:
完成了负载均衡的配置,但是在实际需求中除了上面的设置外,还会增加一些额外设置:
负载均衡策略设置请求上游服务器携带请求头信息upstream模块中其他参数设置
除以上5种,还有一种:least-connected — 下一个请求被分配到拥有最少活动连接数的服务器。
编辑nginx配置文件(例中为/usr/local/ngnix/conf/nginx.conf),找到http结点,
http {
upstream myapp1 {
server 192.168.1.103:8080;
server 192.168.1.104:8080;
}
server {
listen 80;
server_name localhost;
location /webautotest/ {
proxy_buffering off;
proxy_pass http://myapp1;
}
}
}
[root@localhost nginx-1.10.0]# /usr/local/ngnix/sbin/nginx -s reload
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
注意,round-robin或least-connected负载均衡下,每个后续的客户端可能被分发至不同服务器,不保证相同客户端的请求总是被发送到相同的服务器。
如果有必要把客户端绑定至特定服务器,则可使用ip-hash负载均衡机制。
ip-hash机制下,客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器(如果服务器可用的话)
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
可通过配置服务器权重来影响负载均衡机制。上面的例子中,都未配置服务器权重,这意味着所有服务器都拥有相同的权重。 针对round-robin负载机制,权重意味着更多或更少的请求传送至服务器---假设有足够的请求,且按统一方式处理请求,且足够快完成请求处理。
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
上例配置中,每发送至服务器实例的5个新的请求中,有3个发送到srv1,1个发送到srv2,另1个发送到srv3。
注:当前版本似乎只实现了round-robin机制下的权重设置
nginx反向代理实现包含服务器健康检查。如果来自特定服务器的响应失败,报错,nginx将标记该服务器为failed,一段时间内尽量避免选择此服务器作为随后请求的分发服务器。
max_fails机制设置fail_timeout期间,和服务器沟通失败的连续重试次数,默认为1.当设置为0时,不做服务器健康检测。fail_timeout定义了服务器被标记为failed的时长。fail_timeout时间间隔过后,nginx将开始使用活动客户端请求来探测服务器,如果探测成功则标记服务器为活动服务器。
下面我们将介绍一下proxy模块的参数:
设置proxy_connect_timeout 为2秒,缩短超时时间,使其不至于太慢。
|