Nginx负载均衡实例

1.前置准备

  1. 可启动的Jar项目(示例中引用了一个SpringBoot简单web项目,下载:传送门);
  2. 环境准备(Centos7、JDK 1.8、nginx 1.6.2)安装请参考:传送门;

2.启动后台服务

这里使用不同端口启动同一个项目,模拟不同服务器上的两个服务。

root用户启动项目,分别启动在8081端口、8082端口

nohup java -Xms64M -Xmx64M -Xmn32M -Dserver.port=8081 -jar  spring-boot-helloWorld.jar &
nohup java -Xms64M -Xmx64M -Xmn32M -Dserver.port=8082 -jar  spring-boot-helloWorld.jar &

在这里插入图片描述

3.负载均衡简版配置

创建nginx配置 示例:home/nginx/conf/nginx_web_server.conf

#定义Nginx运行的用户和用户组(默认不添加,启动后显示-nobody)
user root;
worker_processes  1; # Nginx 进程数,一般设置为和 CPU 核数一样
events {
    worker_connections  1024; # 每个进程允许最大并发数
}
http {
    default_type  application/octet-stream;  # 默认文件类型
    sendfile        on; # 开启高效传输模式
    keepalive_timeout  65; # 保持连接的时间,超时时间,单位秒
    charset utf-8; # 设置编码格式
    
    #后台服务 域名要和下面proxy_pass一致
    upstream myServerHosts {
     server 127.0.0.1:8081 ;
     server 127.0.0.1:8082 ;
    }
    server {
     listen 80;                         # 端口号
     server_name www.xqiangme.top;      # 配置域名信息
     location / {  
         proxy_set_header HOST $host;
         #客户端的 IP 地址
         proxy_set_header X-Real-IP $remote_addr; 
         #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_pass http://myServerHosts;
      }
   }
}
}

4.启动与测试

切换到nginx目录下执行

cd /usr/local/nginx/sbin 
# 启动
./nginx -c /home/nginx/conf/nginx_web_server.conf
或
# /usr/local/nginx/sbin/nginx -c /home/nginx/conf/nginx_web_server.conf


访问两次,每台服务各轮询一次
Nginx负载均衡实例_第1张图片

5.负载均衡配置进阶

5.1Nginx负载均衡配置状态

**状态 ** 概述
down 当前的server暂不参与负载均衡
backup 预留的备份服务器,当其他服务器都挂掉的时候,启用,
注:404 页面不转到备机, 502 503 504 到备机。
max_fails 允许请求失败的次数 ,如果请求失败次数超过限制,则进过fail_timeout 时间后从虚拟服务池中kill掉该服务器
fail_timeout 经过max_fails失败后,服务暂停时间,max_fails设置后,必须设置fail_timeout 值
max_conns 限制最大的连接数,用于服务器硬件配置不同的情况下

示例:

upstream	node	{
	server	你的IP:8081 down;
	server	你的IP:8082  backup;
	server	你的IP:8083  max_fails=1fail_timeout=10s;
}

5.2Nginx负载均衡调度策略

调度算法 概述
轮询 逐一轮询,默认方式
weight 加权轮询,weight越大,分配的几率越高
ip_hash 每个请求按访问 IP 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决动态网页 session 共享问题。负载均衡每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,显然是不妥;
url_hash 按照访问URL的hash结果分配
least_conn 最少链接数,那个服务器链接数少就会给分配
hash关键数值 hash自定义的key

示例:

   ##upstream的负载均衡,调度算法##
    #调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
    upstream webServerHost {
        server 192.168.0.1:8080 ;
        server 192.168.0.2:8080 ;
    }
    
    #调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大
    upstream webServerHost {
        server 192.168.0.1:8080 weight=2;
        server 192.168.0.2:8080 weight=3;
    }
    #调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
    upstream webServerHost {
        ip_hash;
        server 192.168.0.1:8080 ;
        server 192.168.0.2:8080 ;
    }
    #调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率.Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包
    upstream webServerHost {
        server 192.168.0.1:8080 ;
        server 192.168.0.2:8080 ;
        hash $request_uri;
    }

关注程序员小强公众号更多编程趣事,知识心得与您分享
在这里插入图片描述

你可能感兴趣的:(nginx,nginx)