Nginx反向代理,负载均衡

什么是负载均衡


当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
负载均衡是用反向代理的原理实现的。
 

负载均衡的几种常用方式

# vim /usr/local/nginx/conf/nginx.conf
1、轮询(默认)rr 
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.1.114:80;
server 192.168.1.115;
}
2、weight (权重)wrr
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 
情况。
upstream backserver {
server 192.168.1.114 weight=3;
server 192.168.1.115 weight=7;
}
权重越高,在被访问的概率越大,如上例,分别是30%,70%。
3、ip_hash
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.1.114:88;
server 192.168.1.115:80;
}
4、fair(第三方) 
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5、url_hash(第三方) 
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128 ;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
每个设备的状态设置为:
1.down 表示当前的server暂时不参与负载 
2.weight 默认为1.weight越大,负载的权重就越大。 
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误 
4.fail_timeout:max_fails次失败后,暂停的时间。 
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
配置实例:
#user nobody;
worker_processes 4;
events {
# 最大并发数
worker_connections 1024;
}
http{
# 待选服务器列表
upstream backserver {
# ip_hash指令,将同一用户引入同一服务器。
ip_hash;
server 192.168.1.129 fail_timeout=60s;
server 192.168.1.130;
server 192.168.1.131;
}
server{
# 监听端口
listen 80;
# 根目录下
location / {
# 选择哪个服务器列表
proxy_pass http://backserver; backserver是组名,需要和前面upstream容器命名一致
}

==================================================================================================

实例:

架构模型:

客户端(192.168.1.111)---------->DNS/CDN(192.168.1.112/192.168.10.14)----------------->NGINX反向代理(192.168.10.11)------------------------------------------->真实服务器1(192.168.10.12Apache:81,Nginx:80,Tomcat:8081和8082)&真实服务器2(192.168.10.13Apache:81,Nginx:80,Tomcat:8081和8082)

=================================================================================================

配置:

1. Nginx反向代理,负载均衡(192.168.10.11) 桥接

[root@proxy nginx-1.10.3]# vim /usr/local/nginx/conf/nginx.conf

upstream up {

server 192.168.10.12:80;

server 192.168.10.12:81;

server 192.168.10.12:8081;

server 192.168.10.12:8082;

server 192.168.10.13:80;

server 192.168.10.13:81;

server 192.168.10.13:8081;

server 192.168.10.13:8082;

}

server {

listen 80;

server_name www.up.com;

location / {

proxy_pass http://up;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

 

2. 真实服务器1(192.168.10.12) 桥接:

[root@server1 up]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 80;

server_name www.up.com;

location / {

root html/up;

index index.html index.htm;

}

[root@server1 html]# mkdir up

[root@server1 html]# cd up/

[root@server1 up]# echo 2222 > index.html

 

[root@server1 up]# yum -y install httpd

[root@server1 up]# vim /etc/httpd/conf/httpd.conf

41 #Listen 12.34.56.78:80

42 Listen 81

[root@server1 up]# netstat -tanp | grep 80

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2478/nginx: master

[root@server1 up]# netstat -tanp | grep 81

tcp6 0 0 :::81 :::* LISTEN 2568/httpd

[root@server1 up]# cd /var/www/html/

[root@server1 html]# echo 1111 > index.html

 

[root@server1 tomcat]# mkdir tomcat01

[root@server1 tomcat]# mkdir tomcat02

[root@server1 tomcat]# cp -r conf logs temp work tomcat01

[root@server1 tomcat]# cp -r conf logs temp work tomcat02

[root@server1 tomcat]# cp -r webapps /webapps01

[root@server1 tomcat]# cp -r webapps /webapps02

[root@server1 tomcat]# cd /webapps01/ROOT/

[root@server1 ROOT]# echo 555 > index.jsp

[root@server1 tomcat01]# vim init01.sh

#!/bin/bash

# tomcat01

. /etc/init.d/functions

export CATALINA_BASE="/usr/local/tomcat/tomcat01"

 

case "$1" in

start)

$CATALINA_HOME/bin/startup.sh

;;

stop)

$CATALINA_HOME/bin/shutdown.sh

;;

restart)

$CATALINA_HOME/bin/shutdown.sh

sleep 3

$CATALINA_HOME/bin/startup.sh

;;

esac

[root@server1 tomcat01]# ./init01.sh start

 

[root@server1 tomcat]# cd /webapps02/ROOT/

[root@server1 ROOT]# echo wuyangwebserver1 > index.jsp

[root@server1 tomcat01]# vim init02.sh

#!/bin/bash

# tomcat02

. /etc/init.d/functions

export CATALINA_BASE="/usr/local/tomcat/tomcat02"

 

case "$1" in

start)

$CATALINA_HOME/bin/startup.sh

;;

stop)

$CATALINA_HOME/bin/shutdown.sh

;;

restart)

$CATALINA_HOME/bin/shutdown.sh

sleep 3

$CATALINA_HOME/bin/startup.sh

;;

esac

[root@server1 tomcat01]# ./init02.sh start

[root@server1 tomcat01]# netstat -tanp | grep java

tcp6 0 0 127.0.0.1:8015 :::* LISTEN 3233/java

tcp6 0 0 :::8080 :::* LISTEN 3105/java

tcp6 0 0 :::8081 :::* LISTEN 3233/java

tcp6 0 0 :::8082 :::* LISTEN 3273/java

tcp6 0 0 :::8019 :::* LISTEN 3233/java

tcp6 0 0 127.0.0.1:8025 :::* LISTEN 3273/java

tcp6 0 0 :::8029 :::* LISTEN 3273/java

tcp6 0 0 127.0.0.1:8005 :::* LISTEN 3105/java

tcp6 0 0 :::8009 :::* LISTEN 3105/java

 

 

3. 真实服务器2(192.168.10.13) 桥接

 

[root@server1 up]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 80;

server_name www.up.com;

location / {

root html/up;

index index.html index.htm;

}

[root@server1 html]# mkdir up

[root@server1 html]# cd up/

[root@server1 up]# echo 4444 > index.html

 

[root@server1 up]# yum -y install httpd

[root@server1 up]# vim /etc/httpd/conf/httpd.conf

41 #Listen 12.34.56.78:80

42 Listen 81

[root@server2 up]# netstat -tanp | grep 80

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2482/nginx: master

[root@server2 up]# netstat -tanp | grep 81

tcp6 0 0 :::81 :::* LISTEN 2491/httpd

[root@server1 up]# cd /var/www/html/

[root@server1 html]# echo 2222 > index.html

 

[root@server1 tomcat]# mkdir tomcat01

[root@server1 tomcat]# mkdir tomcat02

[root@server1 tomcat]# cp -r conf logs temp work tomcat01

[root@server1 tomcat]# cp -r conf logs temp work tomcat02

[root@server1 tomcat]# cp -r webapps /webapps01

[root@server1 tomcat]# cp -r webapps /webapps02

[root@server1 tomcat]# cd /webapps01/ROOT/

[root@server1 ROOT]# echo 666 > index.jsp

[root@server1 tomcat01]# vim init01.sh

#!/bin/bash

# tomcat01

. /etc/init.d/functions

export CATALINA_BASE="/usr/local/tomcat/tomcat01"

 

case "$1" in

start)

$CATALINA_HOME/bin/startup.sh

;;

stop)

$CATALINA_HOME/bin/shutdown.sh

;;

restart)

$CATALINA_HOME/bin/shutdown.sh

sleep 3

$CATALINA_HOME/bin/startup.sh

;;

esac

[root@server1 tomcat01]# ./init01.sh start

 

[root@server1 tomcat]# cd /webapps02/ROOT/

[root@server1 ROOT]# echo wuyangwebserver2 > index.jsp

[root@server1 tomcat01]# vim init02.sh

#!/bin/bash

# tomcat02

. /etc/init.d/functions

export CATALINA_BASE="/usr/local/tomcat/tomcat02"

 

case "$1" in

start)

$CATALINA_HOME/bin/startup.sh

;;

stop)

$CATALINA_HOME/bin/shutdown.sh

;;

restart)

$CATALINA_HOME/bin/shutdown.sh

sleep 3

$CATALINA_HOME/bin/startup.sh

;;

esac

[root@server1 tomcat01]# ./init02.sh start

[root@server2 ~]# netstat -tanp | grep java

tcp6 0 0 127.0.0.1:8015 :::* LISTEN 7569/java

tcp6 0 0 :::8080 :::* LISTEN 7454/java

tcp6 0 0 :::8081 :::* LISTEN 7569/java

tcp6 0 0 :::8082 :::* LISTEN 7634/java

tcp6 0 0 :::8019 :::* LISTEN 7569/java

tcp6 0 0 127.0.0.1:8025 :::* LISTEN 7634/java

tcp6 0 0 :::8029 :::* LISTEN 7634/java

tcp6 0 0 127.0.0.1:8005 :::* LISTEN 7454/java

tcp6 0 0 :::8009 :::* LISTEN 7454/java

 

4. DNS/CDN(192.168.10.14/192.168.1.112):CDN正向代理,桥接

[root@cdn DNS]# vim /etc/named.conf

zone "up.com." IN {

type master;

file "up.com.zone";

};

[root@cdn named]# vim up.com.zone

$TTL 600

@ IN SOA @ root. (20190311 1H 15M 1W 1D)

up.com. IN NS dns

dns IN A 192.168.10.14

www IN A 192.168.10.11

 

[root@cdn ~]# vim /etc/squid/squid.conf

http_access allow all

 

5. 客户端(192.168.1.111)

[root@wuyang ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0

1 BOOTPROTO=none

2 DEVICE=enp2s0

3 ONBOOT=yes

4 IPADDR=192.168.1.111

5 PREFIX=24

6 DNS=192.168.1.112

[root@wuyang ~]# cat /etc/resolv.conf

nameserver 192.168.1.112

 

打开firefox: 设置手动正向代理

轮循出现111 333 555 wuyangwebserver1 222 444 666 wuyangwebserver2

                                                                         

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WUYANGEZRA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值