热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅析linux负载均衡(nginx篇)

什么是负载均衡?负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Lo

什么是负载均衡?

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

为什么使用负载均衡?

1、提高服务器响应速度,解决网络拥塞问题,达到高质量的网络访问效果。
2、能够远距离为用户提供完全的透明服务,真正实现与地理位置无关性
3、能够避免各种单点失效,既包括数据中心、服务器等的单点失效,也包括专线故障引起的单点失效。

nginx负载均衡的特性:

1. 工作在网络7层,可以针对http应用做一些分流的策略,比如针对域名,目录结构
2. Nginx对网络的依赖较小,理论上能ping通就能进行负载功能
3. Nginx安装配置比较简单,测试起来很方便
4. 也可以承担较高的负载压力且稳定,nginx是为解决c10k问题而诞生的
5. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
6. Nginx对请求的异步处理可以帮助节点服务器减轻负载压力
7. Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8. 不支持Session的直接保持,但能通过ip_hash来解决。对Big request header的支持不是很好。
9. Nginx还能做Web服务器即Cache功能。

注:此实验,nginx做web服务器的负载均衡


环境配置:

nginx服务器:192.168.117.6
web服务器TomcatA:192.168.117.4
web服务器TomcatB:192.168.117.5

注:此实验三台虚拟机均需关闭selinux,防火墙,以免不必要的报错

systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #关闭防火墙开机自启动
getenforce #查看selinux的状态
setenforce 0 #临时调整selinux为宽松模式
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #永久关闭selinux

nginx服务器配置:

[root@nginx ~]# yum install nginx -y
[root@nginx ~]# rpm -ql nginx
#rpm的-ql选项,通常用来查看某软件安装配置的相关文件,而软件的配置文件一般以.conf结尾的文件
[root@nginx ~]# cp /etc/nginx/nginx.conf{,.bak } #备份配置文件,尽可能养成习惯
[root@nginx ~]# vim /etc/nginx/nginx.conf
upstream tcsrvs { #upstream定义y一个集群,tcsrvs集群名称(可自定义)
ip_hash; #调度算法,也用此算法实现了session 绑定
server 192.168.117.4:8080; #指定集群成员
server 192.168.117.5:8080;
}
location ~*\.(jsp|do)$ {
proxy_pass http://tcsrvs; #此处的集群名称tcsrvs,一定要与上面定义的保持一致
}
* 在此配置文件中添加一个location,在server之内,与其他location平行。
* ~*\.(jsp|do)$:正则匹配,表示来自客户端所有的以.jsp或.do结尾的URL请求,从而实现动静分离。
* proxy_pass:将用户的请求代理到proxy_pass后面集群上
[root@nginx ~]# systemctl start nginx.service
[root@nginx ~]# netstat -tan | grep 80 #查看nginx是否正常启动

web服务器配置:


注:运行tomcat服务,需要java环境。

[root@tomcat ~]# yum list all | grep jdk
#查看java软件包,本实例以java-1.8.0-openjdk为例
[root@tomcat ~]# yum install java-1.8.0-openjdk -y
[root@tomcat ~]# java -version #查看java版本

本实例以apache-tomcat-8.0.30.tar.gz为例


tomcat官网:https://tomcat.apache.org/


注:以下两台tomcat的配置,除了web界面和server.xml配置不同,其他操作都是一样的

[root@tomcat ~]# cd /usr/local/src/ #此目录一般用于存放源码包,可以把下载的apache-tomcat-8.0.30.tar.gz放到此目录下
[root@tomcat src]# tar xf apache-tomcat-8.0.30.tar.gz -C /usr/local/
#解压tar格式压缩包,-C(大写的C)选项,指定解压目录
[root@tomcat src]# cd .. #..代表上级目录
[root@tomcat local]# ls
apache-tomcat-8.0.30 bin etc games include lib lib64 libexec sbin share src
[root@tomcat local]# ln -sv apache-tomcat-8.0.30/ tomcat
#给apache-tomcat-8.0.30作软链接,可以简单(不精确)的认为软链接之后,两目录完全相同
[root@tomcat local]# cd tomcat/
[root@tomcat tomcat]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
#在/etc/profile.d/下创建一个tomcat.sh的文件,用来声明tomcat bin目录下的环境变量,换句话说:bin目录下的所有脚本,可以在任意路径下直接运行。
1、创建web虚拟机特有的目录结构
[root@tomcat ~]# mkdir /data/mywebapps/{lib,classes,WEB-INF,META-INF} -pv
[root@tomcat ~]# tree /data/mywebapps/
/data/mywebapps/
├── classes
├── index.jsp
├── lib
├── META-INF
└── WEB-INF
注:一个webapp目录至少应有此5个文件
[root@tomcat ~]# mkdir /data/logs #提供此web访问日志
2、提供两个web界面
[root@TomcatA~]# vim /data/mywebapps/index.jsp
<%@ page language="java" %>



TomcatA.magedu.com




<% session.setAttribute("magedu.com","magedu.com"); %>






Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>



[root@TomcatB~]# vim /data/mywebapps/index.jsp
<%@ page language="java" %>



TomcatB.magedu.com



<% session.setAttribute("magedu.com","magedu.com"); %>






Session ID <%= session.getId() %>
Created on <%= session.getCreationTime() %>



3、添加web虚拟机配置文件:
[root@Tomcat A~]# vim /usr/local/tomcat/conf/server.xml
1)
2)

prefix="webA_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />

[root@TomcatB~]# vim /usr/local/tomcat/conf/server.xml
1)
2)

prefix="webB_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />

[root@tomcat ~]# configtest.sh #查看server.xml配置文件是否有语法错误
[root@tomcat ~]# catalina.sh start #启动tomcat
[root@tomcat ~]# netstat -tan | grep 8080

客户端验证(本地物理机):

http://192.168.117.6/index.jsp


推荐阅读
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 在IIS上运行的WebApi应用程序在开发环境中能够正常进行文件的读写操作。然而,在尝试通过FTP访问实时服务器上的文件列表时,遇到了无法显示的问题,尽管服务器配置与开发环境相同。这可能涉及权限设置、FTP服务配置或网络连接等方面的问题。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
author-avatar
yeeling610
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有