负载均衡概述
在网站创立初期,我们一般都使用单台机器对外提供集中式服务;
倒是随着业务量的增大,我们一台服务器不够用,此时就会把多台服务器组成一个集群对外提供服务;
但是,我们网站对外提供的访问入口通常只有一个,比如www.itxiaoxu.com;
那么当用户在浏览器输入www.itxiaoxu.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,
这就是负载均衡要做的事情。
负载均衡通常是指将请求“均匀”分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,
并不是完全均匀的;
负载均衡的实现方式
硬件负载均衡
比 如 F5 深信服,Array 等;
硬件负载均衡的优点:有厂商专业的技术服务团队提供支持,性能稳定;
硬件负载均衡的缺点:费用太高,对于规模较小的网络应用成本太高;
软件负载均衡
比如 Nginx LVS HAProxy 等;
软件负载均衡的优点:免费开源,成本低廉;
Nginx负载均衡
Nginx是如何实现负载均衡的
通过在Nginx的Nginx.conf配置文件进行配置即可实现
Nginx实现负载均衡配置方式(分两步完成):
一:在nginx.conf配置文件的http模块加上:(例子)
upstram myserver {
server 192.168.62.104 weight=3;
server 192.168.62.104 weight=1;
}
解释:其中weight=3 表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问的机会越大。
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,
若后端服务器的一台发生故障,则前端的请求不会转发到该故障的机器上。
二:在server模块里添加:(例子)
location /myweb {
proxy_pass http://www.itxiaoxu.com;
}
解释:www.itxiaoxu.com字符串要和uostream后面的字符串相等;
Nginx常用负载均衡策略
一:轮询策略(默认的策略)
每个请求轮流分配到不同的后端服务器上,如果后端服务器down掉,将自动剔除。
upstream backserver{
server 192.168.62.104:8080;
server 192.168.62.104:8081;
}
二:权重策略
每个请求按一定的比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.62.104:8080 weight=3;
server 192.168.62.104:8081 weight=2;
}
ip_hash策略
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决
会话Session丢失的问题;
upstream bakserver {
server 192.168.62.104:8080;
server 192.168.62.104:8081
}
最少连接策略
wen请求会被转发到连接数最少的服务器上;
upstream backserver {
least_conn;
server 192.168.62.104:8080;
server 192.168.62.104:8081;
}
负载均衡其他几个配置
upstream backserver {
least_conn;
server 192.168.62.104:8080;
server 192.168.62.104:8081 backup;
}
解释:backup的意思,其他所有的非backup机器down的时候,才请求backup机器
upstream backserver {
least_conn;
server 192.168.62.104:8080;
server 192.168.62.104:8081 down;
}
解释:down的意思,down表示当前的server是down状态,不参与负载均衡
负载均衡的搭建
准备工作:
一:准备两台tomcat 一个是9100端口,一个是8081端口的tomcat(可以自己安装两台tomcat,小编接下来会写一篇关于linux中安装Tomcat的博客)
二:准备一台Nginx 默认端口80端口(可以自己安装Nginx,小编接下来会写一篇关于linux中安装Nginx的博客)
三:进入端口9100的tomca的webapps目录在该目录下创建page文件夹
mkdir page
四:进入page文件夹传入a.html页面内容是8080!,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>8080</title>
</head>
<body>
<header class="bar bar-nav">
<h1 class='title'>8080!!</h1>
</header>
</body>
</html>
五:进入端口8081的tomca的webapps目录在该目录下创建page文件夹
mkdir page
六:进入page文件夹传入a.html页面内容是8081!,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>8081</title>
</head>
<body>
<header class="bar bar-nav">
<h1 class='title'>8081!!</h1>
</header>
</body>
</html>
七:编辑Nginx的nginx.conf配置文件分为两步详解
一:在http模块添加内容
#负载均衡权重策略
upstream myserver {
server 192.168.62.104:9100 weight=3;
server 192.168.62.104:8081 weight=1;
}
二:在server模块添加的内容:
location /page {
#配置负载均衡转发到tomcat服务器
proxy_pass http://myserver;
}
完整的nginx配置如下:
#运行woker进程运行的用户
user www www;
#工作进程的数量,可以根据cpu的核心总数来设置,通常等于CPU数量或者2倍于CPU数量
worker_processes 2;
#错误日志文件的位置及输出级别 [debug | info | notice | warn | error | crit ] 默认是error
error_log /usr/local/nginx/logs/nginx_error.log crit;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#进程PID文件的位置
pid /usr/local/nginx/nginx.pid;
#工作模式的设置和连接数
events {
#每个worker进程的最大连接数
worker_connections 1024;
}
#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
#配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
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日志及存放路径,并使用上面定义的main日志格式
#access_log logs/access.log main;
#是否调用sendfile函数来输出文件,开启高效文件传输模式
sendfile on;
#防止网络阻塞
#tcp_nopush on;
#keepalive_timeout 0;
#连接超时时间,单位是秒
keepalive_timeout 65;
#开启gzip压缩输出
#gzip on;
#负载均衡权重策略
upstream myserver {
server 192.168.62.104:9100 weight=3;
server 192.168.62.104:8081 weight=1;
}
#负载均衡ip_hash策略
# upstream myserver {
# ip_hash;
# server 192.168.62.103:9100;
# server 192.168.62.103:8081;
#}
#配置虚拟主机
server {
#配置监听端口
listen 80;
#配置服务名
server_name www.itxiaoxu.com;
#默认页面
#index index.html index.htm index.php;
#root /usr/local/nginx/html;
#访问静态页面
root /opt/static/ace;
#配置字符集
#charset koi8-r;
#配置此虚拟主机的访问日志
#access_log logs/host.access.log main;
#默认的匹配斜杠/的请求,当访问路径中有/,会被该location匹配到进行处理
location / {
#root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
# root html;
root /opt/static/ace;
#配置首页文件的名称
index index.html index.htm;
}
location /page {
#配置负载均衡转发到tomcat服务器
proxy_pass http://myserver;
}
#配置404页面
#error_page 404 /404.html;
#配置50x.html
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
#错误页面的位置 精确匹配
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
#禁止访问.htaccess文件
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
#配置https服务,安全的网络传输协议,加密传输,端口 443,运维来配置
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
重启Nginx服务,通过浏览器访问如图:
当刷新浏览器三次之后会显示8081的页面如图,表明负载均衡配置成功