恩施市住房和城乡建设局网站,手机网站建设 技术规范,三一crm手机客户端下载,沈阳建站模板展示一.Nginx负载均衡实现原理
Nginx实现负载均衡是通过反向代理实现
1、 反向代理原理 2、反向代理的概念
反向代理#xff08;Reverse Proxy#xff09;方式是指以代理服务器来接受internet上的连接请求#xff0c;然后将请求转发给内部网络上的服务器#xff0c;并将从服…一.Nginx负载均衡实现原理
Nginx实现负载均衡是通过反向代理实现
1、 反向代理原理 2、反向代理的概念
反向代理Reverse Proxy方式是指以代理服务器来接受internet上的连接请求然后将请求转发给内部网络上的服务器并将从服务器上得到的结果返回给internet上请求连接的客户端此时代理服务器对外就表现为一个反向代理服务器。
反向代理是为服务端服务的反向代理可以帮助服务器接收来自客户端的请求帮助服务器做请求转发负载均衡等。
反向代理对服务端是透明的对我们是非透明的即我们并不知道自己访问的是代理服务器而服务器知道反向代理在为他服务。
3、反向代理的优势
反向代理的优势
隐藏真实服务器负载均衡便于横向扩充后端动态服务动静分离提升系统健壮性
4、Nginx四层反向代理和七层反向代理
四层反向代理是基于IPPORTTCP/UDP端口转发
七层反向代理基于httphttpsmail代理转发
二、Nginx动静分离实现原理
1、动静分离的概念
动静分离是指在 web 服务器架构中将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法进而提示整个服务的访问性和可维护性。
2、动静分离的原理
服务端接收来自客户端的请求中。既有静态资源也有动态资源静态资源由Nginx提供服务动态资源Nginx转发至后端
3、Nginx 静态处理优势
• Nginx处理静态页面的效率远高于Tomcat的处理能力
• 若Tomcat的请求量为1000次则Nginx的请求量为6000次
• Tomcat每秒的吞吐量为0.6MNginx的每秒吞吐量为3.6M
• Nginx处理静态资源的能力是Tomcat处理的6倍
三、Nginx负载均衡调度算法6种
1、轮询默认
每个请求按时间顺序逐一分配到不同的后端服务器如果超过了最大失败次数后max_fails默认1在失效时间内fail_timeout默认10秒该节点失效权重变为0超过失效时间后则恢复正常或者全部节点都为down后 那么将所有节点都恢复为有效继续探测一般来说rr可以根据权重来进行均匀分配。
2、加权轮训
weight的值越大分配到的权限概率越高主要用于后端每台服务器性能不均匀情况或者仅仅为在主从情况下设置不同的权重值达到合理利用主机资源
3、least_conn最少连接
优先将客 户端请求调度到当前连接最少的服务器。
4、ip_hash
每个请求按访问ip的hash结果分配这样每个访客固定访问一个后端服务器 可以解决session会话状态的问题但是ip_hash会造成负载不均有的服务请求接受多有的服务请求接受少所以不建议采用ip_hash模式
补充session的概念
session共享问题可用后端服务的session共享代替nginx的ip_hash。ip_hash无法作用于四层反向代理配置需要将其他模式删除例如weight删掉然后直接在加上
注释
Session又称为会话状态是Web系统中最常用的状态用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限中经常用到Session来存储用户状态
session其实分为客户端Session和服务器端Session。
当用户首次与Web服务器建立连接的时候服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的属于客户端Session。
其实客户端Session默认是以cookie的形式来存储的所以当用户禁用了cookie的话服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中当然这种方法不常用。
Session共享指在一个浏览器对应多个Web服务时服务端的Session数据需要共享。例如单点登录、Web服务器集群等场景都需要用到、多子服务。
5、fair第三方
按后端服务器的响应时间来分配请求响应时间短的优先分配。
6、url_hash第三方
和ip hash算法类似是对每个请求按url的hash结果分配使每个URL定向到同一个后端服务器 但是也会造成分配不均的问题 这种模式后端服务器为缓存时比较好。
四、NginxTomcat负载均衡、动静分离的操作步骤
1、准备三台服务器Nginx作为负载均衡器Tomcat作为应用服务器
Nginx 服务器192.168.2.66:80 Tomcat服务器1192.168.2.105:80 Tomcat服务器2192.168.2.200:8080 192.168.2.200:8081
2、部署Nginx 负载均衡器
systemctl stop firewalld
setenforce 0yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c makeuseradd -M -s /sbin/nologin nginxcd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/
./configure \
--prefix/usr/local/nginx \
--usernginx \
--groupnginx \
--with-file-aio \ #启用文件修改支持
--with-http_stub_status_module \ #启用状态统计
--with-http_gzip_static_module \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块提供对 flv 视频的伪流支持
--with-http_ssl_module #启用 SSL模块提供SSL加密功能
----------------------------------------------------------------------------------------------------------
./configure --prefix/usr/local/nginx --usernginx --groupnginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_modulemake make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/vim /lib/systemd/system/nginx.service
[Unit]
Descriptionnginx
Afternetwork.target
[Service]
Typeforking
PIDFile/usr/local/nginx/logs/nginx.pid
ExecStart/usr/local/nginx/sbin/nginx
ExecrReload/bin/kill -s HUP $MAINPID
ExecrStop/bin/kill -s QUIT $MAINPID
PrivateTmptrue
[Install]
WantedBymulti-user.targetchmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service3、部署2台Tomcat 应用服务器
systemctl stop firewalld
setenforce 0tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/vim /etc/profile.d/java.sh
export JAVA_HOME/usr/java/jdk1.8.0_201-amd64
export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH$JAVA_HOME/bin:$PATHsource /etc/profile.d/java.shtar zxvf apache-tomcat-8.5.16.tar.gzmv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.shnetstat -ntap | grep 80804、动静分离配置
Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
html
head
titleJSP test1 page/title
/head
body
% out.println(动态页面 1,Tomcat1);%
/body
/htmlvim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost需要删除前面的 HOST 配置
Host namelocalhost appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalseContext docBase/usr/local/tomcat/webapps/test path reloadabletrue/Context
/Host/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.shTomcat2 server 配置(多实例)
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/testvim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
html
head
titleJSP test2 page/title
/head
body
% out.println(动态页面 2,Tomcat2中的实例1);%
/body
/htmlvim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
Host namelocalhost appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalseContext docBase/usr/local/tomcat/tomcat1/webapps/test path reloadabletrue /
/Host/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.shvim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
html
head
titleJSP test3 page/title
/head
body
% out.println(动态页面 3,Tomcat2中的实例2);%
/body
/htmlvim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
Host namelocalhost appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalseContext docBase/usr/local/tomcat/tomcat2/webapps/test path reloadabletrue /
/Host/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.shNginx server 配置——七层转发配置
#准备静态页面和静态图片
echo htmlbodyh1这是静态页面/h1/body/html /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/imgvim /usr/local/nginx/conf/nginx.conf
......
http {
......#gzip on;#配置负载均衡的服务器列表weight参数表示权重权重越高被分配到的概率越大upstream tomcat_server {server 192.168.116.70:8080 weight1;server 192.168.116.120:8080 weight1;server 192.168.116.120:8081 weight1;}server {listen 80;server_name www.kgc.com;charset utf-8;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求将 .jsp文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名域名或IP、端口默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器如果后端有防攻击策略的话那么机器就被封掉了。proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP来获取源IPproxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时设置的IP列表会把经过的机器ip代理机器ip都记录下来proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#配置Nginx处理静态图片请求location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}location / {root html;index index.html index.htm;}
......}
......
}5、测试效果
测试静态页面效果 浏览器访问 http://192.168.2.66/ 浏览器访问 http://192.168.2.66/pic.jpg
测试负载均衡效果不断刷新浏览器测试 浏览器访问 http://192.168.2.66/index.jsp
五、实例操作NginxTomcat负载均衡、动静分离
1、准备好Nginx服务器192.168.2.66 2、准备好tomcat服务器1192.168.2.105:8080 3、准备好Tomcat服务器2两个实例192.168.2.200:8080 192.168.2.200:8081——参照此篇文章 Tomcat多实例部署 - 啦啦啦12178 - 博客园 (cnblogs.com) 4、动静分离Tomcat1 server 配置
4.1 配置Tomcat1的动态网页显示内容 4.2 添加新的host内容 4.3 重启服务 5、Tomcat2 server 配置实例1
5.1 创建Tomcat实例1的网页测试目录test和测试网页文件 5.2 Tomcat实例1主配置删除前面的 HOST 配置添加新的HOST配置 5.3 重启服务 6、Tomcat2 server 配置实例2
6.1 创建Tomcat实例2的网页测试目录test和测试网页文件 6.2 Tomcat实例2主配置删除前面的 HOST 配置添加新的HOST配置 6.3 重启服务 7、Nginx server 配置192.168.2.66
7.1 准备网页显示相关内容 7.2 修改主配置文件——七层转发配置 7.3 重启服务 8、使用win10客户端在浏览器中进行测试动态页面测试进行不断刷新即可
测试静态页面效果 浏览器访问 http://192.168.2.66/ 浏览器访问 http://192.168.2.66/meme.jpg
测试负载均衡效果不断刷新浏览器测试 浏览器访问 http://192.168.2.66/index.jsp
8.1 测试静态页面效果 8.2 测试负载均衡效果不断刷新浏览器测试 六、Nginx四层代理配置
1、nginx做四层代理时编译需要添加 --with-stream模块
1.1 查看当前模块 1.2 在已有的nginx上面添加该模块--with-stream 2、nginx四层代理配置
2.1 修改配置文件进行四层代理配置 2.2 重启服务 3 浏览器访问测试
基于端口访问但是会有60s左右的缓存时间才会实现跳转到别的tomcat服务器
输入网址http://192.168.2.66 输入网址http://192.168.2.66:8080