Nginx负载均衡

Posted zynet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx负载均衡相关的知识,希望对你有一定的参考价值。


环境:

  负载:192.16.1.1(MASTER),192.168.1.2(SLAVE),VIP:192.168.1.250

  web:192.16.1.3

  #因电脑条件有限,只能这么做了,用一台来模拟多个后端,

1.nginx安装

http://www.cnblogs.com/wazy/p/8108824.html  #这里三台都要装

2.keepalived安装

http://www.cnblogs.com/wazy/p/8118625.html #这个只需要装负载的两台

3.配置调整

  负载:(两台都这样,可能有些许要改动的地方)

  nginx:

user  www;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;

pid        /usr/local/nginx/run/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  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;
    #upstream字段,设定负载均衡的服务器列表
    upstream server1 {
        server 192.168.1.3:8080;
        server 192.168.1.3:8081;
    }
    upstream server2 {
        server 192.168.1.3:8082;  #条件有限,用一台来模拟多个后端
        server 192.168.1.3:8083;
    }
    server {
        listen 80; #侦听aaa.com的80端口
        server_name aaa.com;
        access_log /var/log/nginx/aaa.com_access_log main; #指定aaa.com的日志
        location / {
                root html; #定义服务器的默认网站根目录位置
                index index.html index.htm;  #定义首页索引文件的名称
                proxy_pass http://server1;  #请求转向server1 定义的服务器列表
                proxy_set_header X-Real-IP $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
                client_max_body_size 100m; #允许客户端请求的最大单文件字节数
        }
        error_page 500 502 503 504 /50x.html; #定义错误页面
        location = /50x.html {
                root html;
        }
        location ~^/(WEB-INF)/ {
                deny all;
        }
   }

   server {
        listen 80; #侦听bbb.com的80端口
        server_name bbb.com;
        access_log /var/log/nginx/bbb.com_access_log main; #指定bbb.com的日志
        location / {
                root html;   #定义服务器的默认网站根目录位置
                index index.html index.htm;  #定义首页索引文件的名称
                proxy_pass http://server2;  #请求转向server2 定义的服务器列表
                proxy_set_header X-Real-IP $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
                client_max_body_size 100m; #允许客户端请求的最大单文件字节数
        }
        error_page 500 502 503 504 /50x.html; #定义错误页面
        location = /50x.html {
                root html;
        }
        location ~^/(WEB-INF)/ {
                deny all;
        }
   } 
}

  keepalived:

#首先要写一个检测nginx是否运行的脚本
vi /usr/local/nginx/keep/check_nginx.sh 
#!/bin/bash

echo "test" >> /usr/local/nginx/keep/check_keep.log
if [[ ! -e /usr/local/nginx/run/nginx.pid ]];then
        ps -ef|grep keep |grep -v grep|awk -F\' \' \'{print $2}\'|xargs kill
else
        PID=`cat /usr/local/nginx/run/nginx.pid`
        counts=`ps -ef|grep $PID|grep -v grep|wc -l`
        if [[ $counts -eq 0 ]];then
                ps -ef|grep keep |grep -v grep|awk -F\' \' \'{print $2}\'|xargs kill
        fi
fi
#pid文件位置自己看看是否正确

#然后再来设置keepalived
! Configuration File for keepalived

global_defs {
        router id 10
}

vrrp_script check_nginx {
        script "bash /usr/local/nginx/keep/check_nginx.sh"
        interval 2
        weight -4
        fall 2
        rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    virtual_ipaddress {
        192.168.1.250
    }
    track_script {
        check_nginx
    }
}
#这里priority 另一个要比这个低,一个做主,一个做备

 

  策略:

#这里负载均衡开启80端口
#web后端只对负载开启80端口
-A INPUT -s 192.168.1.1/32 -m tcp -p tcp --dport 8080:8083 -j ACCEPT
-A INPUT -s 192.168.1.2/32 -m tcp -p tcp --dport 8080:8083 -j ACCEPT
#centos6


firewall-cmd --permanent --add-rich-rule \'rule family=ipv4 source address=192.168.1.1 port port=8080 protocol=tcp accept\'
firewall-cmd --permanent --add-rich-rule \'rule family=ipv4 source address=192.168.1.1 port port=8081 protocol=tcp accept\'
firewall-cmd --permanent --add-rich-rule \'rule family=ipv4 source address=192.168.1.1 port port=8082 protocol=tcp accept\'
firewall-cmd --permanent --add-rich-rule \'rule family=ipv4 source address=192.168.1.1 port port=8083 protocol=tcp accept\'
#centos7
然后测试就行了

  

  


 

以上是关于Nginx负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Nginx负载均衡

Nginx反向代理实现负载均衡配置图解

OpenResty 动态负载均衡

nginx反向代理访问很慢,我做了负载均衡,现在几乎无法访问,有谁能帮我解决一下,万分感谢。

nginx--❤️图解及代码实现正向代理反向代理及负载均衡(非常实用,建议收藏❤️)

分布式部署与NGINX负载均衡