共计 3945 个字符,预计需要花费 10 分钟才能阅读完成。
负载均衡的目的是为了解决单个节点服务器压力过大, 造成 Web 响应过慢, 严重情况下导致服务瘫痪; 由于一个 web 服务同时能处理的用户并发请求数量有限, 同时可能还有服务机器故障等情况, 所以 web 站点通常会在 N 台服务器上部署一套同样的程序, 这就是通常所说的服务器集群. 有了集群还要合理分配请求, 不可能搭建了集群后所有的请求都发送到一台机器上, 这显然是不合理的, 也是对服务器资源的严重浪费. 如何将用户的请求合理分配到一台能快速响应的服务器上, 需要用到一些均衡策略.
负载均衡的意义就是讲用户的请求按照一定的策略, 均衡地分配到服务器集群中的机器上, 充分发挥服务器的性能, 也提高了用户体验.
负载均衡常用的 web 服务器软件有 Nginx、Apache、HAProxy 等。本文主要是 Nginx 的负载均衡配置.
为了模拟服务器集群, 这里在本地机器上装了多个 Tomcat, 同时修改 Tomcat 的监听端口, 以达到启动多个 Web 服务的目的.
具体修改步骤:
Tomcat 下载
Tomcat 安装目录 > conf > server.xml, 主要修改位置为 3 处, 因为实在本机上模拟集群, 目的是为了防止端口冲突;
1、Server:port
2、Server > Service > Connector:port(HTTP/1.1 协议)
3、Server > Service > Connector:port(AJP/1.3 协议)
— 另外一个 Tomcat http 协议端口修改为 20710, 修改位置相同;
修改后启动两个 Tomcat, 可以看到端口没有冲突, 可以正常启动, 这样在本机上就存在了两个 web 服务.
为了简单区分确实是启动了两个 Web 服务, 修改 Tomcat 安装目录 > webapps > ROOT > index.html, 加上标识.
以下开始 Nignx 配置:
Nignx 下载(推荐稳定版本)
Nginx 负载均衡是通过 upstream 模块来实现的, 内置了三种负载策略, 官方说明: 配置参考;
· 轮循(默认)
Nginx 根据请求次数,将每个请求均匀按权重分配到每台服务器
· 最少连接
将请求分配给当前连接数最少的服务器,Nginx 会统计哪些服务器的连接数最少
· IP Hash
根据 IP 绑定处理请求的服务器。第一次请求时,根据该请求 IP 计算出 Hash 值,将请求分配到集群中的某一台服务器上。以后来自改 IP 的所有请求,都将通过 Hash 算法,将请求转发到绑定的服务器上
更改负载策略主要是修改 Nginx 的配置文件,位于 Nginx 安装目录 > conf > nginx.conf. 修改后部分代码如下:
#user nobody;
#工作进程的个数, 一般与计算机的 CPU 核数一致.
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {#单个进程最大连接数(最大连接数 = 连接数 * 进程数)
worker_connections 1024;
}
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local]"$request" '
# '$status $body_bytes_sent"$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#开启高效文件传输模式,sendfile 函数指令指定 nginx 是否调用 sendfile 函数来输出文件
#对于普通应用设置为 on, 如果用来进行下载等应用磁盘 IO 重负载应用, 可以设置为 off,
#以平衡磁盘与网络 IO 处理速度, 降低系统的负载; 若图片显示不正常, 则改为 off
sendfile on;
#tcp_nopush on;
#长连接超时时间, 单位 / 秒
#keepalive_timeout 0;
keepalive_timeout 65;
#是否启用 gzip 压缩
#gzip on;
#服务器集群
upstream sakurakann { #服务器集群的名字
least_conn;
#服务器配置,weight 是权重的意思, 权重越大, 分配的概率越大.
server 127.0.0.1:11015 weight=1;
server 127.0.0.1:20710 weight=2;
}
#当前 nginx 配置
server {
#nignx 监听的端口
listen 80;
#当前服务器域名
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
location / {
#要与上面 @line 49 的服务器集群名称一致
proxy_pass http://sakurakann; #服务器若是 https 连接, 则使用 https://
proxy_redirect default;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
}
}
· upstream sakurakann {…}; 配置反向代理服务器组,Nginx 会根据配置, 将请求按照负载策略分发给组中某一台服务器上, sakurakann 为服务器组名称.
· upstream 模块中的 server 指令 配置处理请求的服务器 IP 或域名, 端口可选, 不配置端口默认使用 80 端口, 在其后可以追加其他配置参数:
` weight 权重, 数字越大, 权重越大, 被分配请求的机会越大, 默认为 1; 不配置时将请求平均分配;
` max_fails 允许请求失败的次数, 超过该次数后, 在 fail_timeout 的时间之内, 新的请求将不会分配到该机器, 默认为 1;
` fial_timeout 默认为 10(秒);
` backup 备份机, 所有其他服务器都不可用后才会生效;
` down 将指定服务器标示为不可用;
` max_conns 服务器最大连接数, 超过后将不会分配新的请求, 默认为 0, 表示不限制;
` resolve 将 server 指令配置的域名 /IP, 指定域名解析服务器, 需要与 upstream 同级也配置 resolve 指定 IP, 表示 example.com 域名, 将由 10.0.0.1 服务器来负责解析
如:
http {
resolver 10.0.0.1;
upstream u {
zone ...;
...
server example.com resolve;
}
}
` 其他详见官方文档
· proxy_pass http://sakurakann; 表示将所有请求转发到名称为 sakurakann 的服务器组中的某一台机器上.
终端进入 Nginx 安装目录 > start nginx
启动 Nginx 后访问 localhost:80 (Nginx 监听端口及 IP)
可以看到, 请求已经实现分发, 按照多次访问结果来看, 转发比例与权重一致;
Nginx + Tomcat 负载均衡简单实例完成。
更多 Tomcat 相关教程见以下内容:
CentOS 6.6 下安装配置 Tomcat 环境 http://www.linuxidc.com/Linux/2015-08/122234.htm
RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目 http://www.linuxidc.com/Linux/2015-02/113528.htm
Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签) http://www.linuxidc.com/Linux/2015-02/113062.htm
Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm
Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm
CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm
Ubuntu 16.04 下安装 Tomcat 8.5.9 http://www.linuxidc.com/Linux/2017-06/144809.htm
Ubuntu 16.04 安装 Tomcat 8 图解 http://www.linuxidc.com/Linux/2017-10/147773.htm
Tomcat 配置文件 server.xml 详解 http://www.linuxidc.com/Linux/2017-10/148003.htm
Tomcat 单机多实例部署 - 多项目部署 http://www.linuxidc.com/Linux/2017-10/147259.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149456.htm