nginx负载均衡四层和七层

nginx负载均衡
正向代理:一般是架设在客户端这边,主要用途为代替客户端去访问某些网络资源
客户端知道自己要访问的目标服务器的IP,并且会让正向代理服务器代替自己去访问,目标服务器不会知道客户端的IP,只会知道代理服务器的IP,所以对客户端进行了一定保护

反向代理:一般架设在服务端这边,主要用途是代替用用服务器接收外界的访问请求
在反向代理中,客户端无法获得应用服务器的IP,可以对应用服务器进行一定的保护,而应用服务器是可以知道客户端的访问IP的。

正向代理的作用:
突破访问限制:突破自身IP的访问限制,访问国外的网站,教育网等。
提高访问速度
隐藏客户端真实IP

nginx使用现状:
由于nginx自身只能处理静态数据,而大部分网站服务,均为动态服务,所以nginx现在主要用于充当反向代理功能,次要会作为web服务,传输一些静态资源(图片,视频,音频)

nginx的负载均衡功能是建立在反向代理之上的

nginx支持7层负载均衡与4层负载均衡,默认支持7层,想要支持4层负载均衡需要安装stream模块–with-stream,该模块在nginx1.9.0以上版本中默认包含

nginx如何实现七层负载均衡?
首先,在http模块中添加upstream参数,用来定义服务器池,每个upstream参数可以定义一个名字,方便之后设置将流量转发给哪一个服务器池。upstream里面可以通过server参数来配置真实节点,写上IP和端口号即可,可以增加一些优化参数,实现健康检测,权重,调度算法的相关设置。
配置完upstream以后,可以使用location参数对需要进行负载均衡的url路径进行匹配,来实现对七层信息的一个捕捉
最后在相应的location中使用proxy_pass参数后面跟上需要转发给的服务器池的名称,就可以实现相关的负载均衡

nginx做负载均衡器的参数:
upstream(up/si/zhui/mu):定义服务器池,可以写多个服务器池针对不同的服务实现不同的调度
upstream tomcat_server { // tomcat_server表示定义这个池的名称
server 192.168.1.52:8080 weight=1; //server设置后方真实节点的IP及端口号 weight表示权重
server 192.168.1.53:8080 weight=1;
}

server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat_server; // 利用proxy_pass将访问请求转发给上方的地址池,
书写格式http://{上方定义的地址池名称}
}

nginx负载均衡的调度算法
1、默认轮询
2、使用weight参数后,可以实现加权轮询
如:
upstream tomcat {
server 192.168.100.102:8080 weight=1;
server 192.168.100.103:8080 weight=2;
server 192.168.100.104:8080 weight=3;
}
3、最少连接,需要使用参数least_conn ,配合weight可以实现加权最少连接
如:
upstream tomcat {
least_conn;
server 192.168.100.102:8080 weight=1;
server 192.168.100.103:8080 weight=1;
server 192.168.100.104:8080 weight=1;
}
4、可以实现基于IP地址的会话保持功能,需要使用ip_hash参数
实现效果:可以将同一个IP地址来的访问请求,一直交给后端的同一个应用服务器处理,注意该参数针对于IP地址中的前三段实现相应效果,也就是说192.168.100.101和192.168.100.102会调度给相同的应用服务器,而192.168.100.100和192.168.200.100会调度给不同的应用服务器
如:
upstream tomcat {
ip_hash;
server 192.168.100.102:8080 weight=1;
server 192.168.100.103:8080 weight=1;
server 192.168.100.104:8080 weight=1;
}

nginx中自带了健康检测机制,可以在upstream模块中每一个主机信息后增加参数max_fails=(检测连通失败次数) fail_timeout=(检测周期) ,这两个参数的默认值max_fails=1 fail_timeout=10
如:
upstream tomcat {
ip_hash;
server 192.168.100.102:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.100.103:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.100.104:8080 weight=1 max_fails=2 fail_timeout=20;
}

nginx中可以实现将某些真实节点设置为备用服务器,备用服务器一般情况下是不会被分配流量的,只有当正常工作的节点全部不可用时,才会启用备用节点,可以通过backup参数进行实现。
如:
upstream tomcat {
ip_hash;
server 192.168.100.102:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.100.103:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.100.104:8080 backup;
}

nginx配置四层负载均衡:
配置参数如下:将http模块替换成stream模块
如:
stream {
upstream tomcat {
server 192.168.100.102:8080 max_fails=2 fail_timeout=20;
server 192.168.100.103:8080 max_fails=2 fail_timeout=20;
server 192.168.100.104:8080 ;
}
server {
listen 80;
proxy_pass tomcat;
}
}

补充:
LVS的四层负载均衡是将所有请求信息转发给后方节点,包括三次握手的数据包,所以实际上客户端是和真实节点直接建立TCP连接的。
nginx的七层负载均衡,是客户端先和nginx建立TCP连接,然后nginx再根据调度算法和对应的真实节点建立三次握手。
所以也可以称这两层负载均衡为四层转发,七层代理

Nginx负载均衡Tomcat工作文档:
Nginx负载均衡Tomcat
部署环境:
nginx负载均衡器IP:192.168.40.11
tomcat1:192.168.40.12
tomcat2:192.168.40.13
tomcat3:192.168.40.14

=安装Tomcat==
tar -xf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60/ /usr/local/java
echo -e “export JAVA_HOME=/usr/local/java\nexport PATH=/usr/local/java/bin:$PATH” >> /etc/profile
. /etc/profile
echo $PATH
tar -xf apache-tomcat-8.5.41.tar.gz
mv apache-tomcat-8.5.41 /usr/local/tomcat
systemctl stop firewalld
setenforce 0

增加网页测试页=
cd /usr/local/tomcat/webapps/ROOT/
vim 1.jsp
tomcat1测试页内容:111
tomcat2测试页内容:222
tomcat3测试页内容:333

/usr/local/tomcat/bin/startup.sh
启动Tomcat并使用浏览器测试,看是否能打开三台Tomcat的测试页
或者直接在另一台主机的终端中输入curl {tomcat服务器IP}:8080/1.jsp

安装nginx
yum -y install gcc gcc-c++ pcre-devel zlib-devel make
systemctl stop firewalld
setenforce 0
tar -xf nginx-1.12.2.tar.gz -C /usr/src/
useradd -M -s /sbin/nologin -r nginx
cd /usr/src/nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream --with-http_stub_status_module && make && make install

–with-stream(si/zhui/mu):该模块提供了四层负载均衡,只能用于1.9版本以上的nginx,nginx默认支
持七层负载均衡

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t
=两种负载均衡调度方式====
=修改nginx主配置文件,开启七层负载功能
vim /usr/local/nginx/conf/nginx.conf
七层负载均衡参数只能写在http或其他工作在应用层的模块中
将以下参数卸载http模块中:
upstream tomcat { //upstream表示地址池,tomcat表示定义一个地址
池的名称,可根据不同的服务写多个不同的地址池
server 192.168.40.12:8080 weight=1; //weight表权重,默认为轮询,如果想使用加权轮询
可以根据实际情况修改weight的参数值
server 192.168.40.13:8080 weight=1;
server 192.168.40.14:8080 weight=1;
}

server {
listen 80;
server_name localhost;

    charset utf-8;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
        proxy_pass http://tomcat;		//在server的location模块中写proxy_pass参数,
				表示将访问请求转发给调度地址池中
proxy_set_header Host $host;	//如果在server_name中填写的是域名,location则
				需要增加该参数,表示将访问请求的请求头信息,作
				为nginx请求tomcat时的请求头信息
    }

=启动nginx及实验七层负载均衡功能=====
nginx
netstat -anpt |grep nginx
在浏览器或者在终端中访问192.168.40.11/1.jsp,看是否起到了轮询的效果

=修改nginx主配置文件,开启四层负载功能
vim /usr/local/nginx/conf/nginx.conf
替换http模块为stream模块即可实现四层负载均衡
如:
stream {
upstream tomcat {
server 192.168.40.12:8080 weight=1;
server 192.168.40.13:8080 weight=1;
server 192.168.40.14:8080 weight=1;
}
server {
listen 80;
proxy_pass tomcat; //因为四层负载均衡无法使用应用协议,所以这里直接写地址池
名称即可
}
}

实验四层负载均衡功能=
nginx
netstat -anpt |grep nginx
在终端中执行curl 192.168.40.11/1.jsp,看是否起到了轮询的效果
注意:当使用四层负载均衡后,nginx会和LVS一样会自动建立长连接,所以在浏览器无法查看轮询效果

额外拓展=
=nginx负载均衡的调度算法==
加权轮询如:
upstream tomcat {
server 192.168.40.12:8080 weight=1;
server 192.168.40.13:8080 weight=2;
server 192.168.40.14:8080 weight=3;
}

最少连接如:在upstream中增加 least_conn
upstream tomcat {
least_conn;
server 192.168.40.12:8080 weight=1;
server 192.168.40.13:8080 weight=1;
server 192.168.40.14:8080 weight=1;
}

实现基于IP地址的会话保持功能,可以将同一个IP地址来的访问请求,一直交给后端的同一个应用服务器处
理,但只能针对IP地址前三段实现相应效果,也就是说192.168.100.101和192.168.100.102会调度给相同
的应用服务器,而192.168.100.100和192.168.200.100会调度给不同的应用服务器
如:
upstream tomcat {
ip_hash;
server 192.168.40.12:8080 weight=1;
server 192.168.40.13:8080 weight=1;
server 192.168.40.14:8080 weight=1;
}

自定义nginx健康检查==
nginx中自带了健康检测机制,可以在upstream模块中每一个主机信息后增加参数max_fails=(检测连通失败次数) fail_timeout=(检测周期) ,这两个参数的默认值max_fails=1 fail_timeout=10
如:
upstream tomcat {
server 192.168.40.12:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.40.13:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.40.14:8080 weight=1 max_fails=2 fail_timeout=20;
}

=对真实节点设置备用服务器======
nginx中可以实现将某些真实节点设置为备用服务器,备用服务器一般情况下是不会被分配流量的,只有当正常工作的节点全部不可用时,才会启用备用节点,可以通过backup参数进行实现。
如:
upstream tomcat {
ip_hash;
server 192.168.40.12:8080 weight=1;
server 192.168.40.13:8080 weight=1;
server 192.168.40.14:8080 backup;
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值