负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
准备工作
准备两个Tomcat服务,分别用8081,8082端口
nginx配置如下:
轮询:
最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。
修改Nginx配置文件,http块中添加
upstream myserver{
server IP地址:端口号;
server IP地址:端口号;
...
}
location块中添加
proxy_pass http://myserver;
基本参数:
fail_timeout | 与max_fails结合使用 |
max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了 |
fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 |
down | 标记服务器永久停机了。 |
加权轮询
数字越大,权重越高
upstream myserver{
server IP地址:端口号 weight=2;
server IP地址:端口号 weight=3;
...
}
ip哈希
访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
upstream myserver{
ip_hash;
server IP地址:端口号;
server IP地址:端口号;
...
}
最小连接
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果
upstream myserver{
least_conn;
server IP地址:端口号;
server IP地址:端口号;
...
}