ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅析liunx负载均衡(apache篇)

2021-03-25 16:52:41  阅读:119  来源: 互联网

标签:httpd tomcat web 192.168 liunx conf apache root 浅析


什么是负载均衡?

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

为什么使用负载均衡?

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

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" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="blue">TomcatA.magedu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

[root@TomcatB~]# vim /data/mywebapps/index.jsp
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="red">TomcatB.magedu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
3、添加web虚拟机配置文件:
[root@Tomcat A~]# vim /usr/local/tomcat/conf/server.xml
1) <Engine name="Catalina" defaultHost="web.test.com" jvmRoute="TomcatA">
2) <Host name="web.test.com" appbase="/data/mywebapps">
           <Context path=""  docBase="/data/mywebapps" unpackWARs="true"  autoDeploy="true" />
          <Valve className="org.apache.catalina.valves.AccessLogValve"  directory="/data/logs"
             prefix="webA_access_log" suffix=".txt"
             pattern="%h %l %u %t "%r" %s %b" />
</Host>

[root@TomcatB~]# vim /usr/local/tomcat/conf/server.xml
1)<Engine name="Catalina" defaultHost="web.test.com" jvmRoute="TomcatB">
2)<Host name="web.test.com" appbase="/data/mywebapps">
          <Context path=""  docBase="/data/mywebapps" unpackWARs="true"  autoDeploy="true" />
          <Valve className="org.apache.catalina.valves.AccessLogValve"  directory="/data/logs"
             prefix="webB_access_log" suffix=".txt"
             pattern="%h %l %u %t "%r" %s %b" />
</Host>
[root@tomcat ~]# configtest.sh  #查看server.xml配置文件是否有语法错误
[root@tomcat ~]# catalina.sh start  #启动tomcat
[root@tomcat ~]# netstat -tan | grep 8005 #管理jvm虚拟机的端口
[root@tomcat ~]# netstat -tan | grep 8009 #ajp协议端口
[root@tomcat ~]# netstat -tan | grep 8080 #http协议端口

注:下面三种负载的实现,需要上面这些配置的支持。

三种基于http负载均衡的简单解析:

第一种:
Apache:
        mod_proxy、
        mod_proxy_http、
        mod_proxy_balancer
Tomcat:
        http connector
第二种:
Apache:
        mod_proxy、
        mod_proxy_ajp、
        mod_proxy_balancer
Tomcat:
        ajp connector
第三种:                    
Apache:
        mod_jk
Tomcat:
        ajp connector

第一种实现:

[root@httpd ~]# yum install httpd -y
[root@httpd ~]# rpm -ql httpd #查看httpd相关的配置文件
[root@httpd ~]# vim /etc/httpd/conf/httpd.conf
注释掉  #DocumentRoot "/var/www/html"
[root@httpd ~]# cd /etc/httpd/conf.d/
[root@httpd conf.d]# vim lb_http.conf  #创建一个必须以.conf结尾文件
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED #session会话绑定
<proxy balancer://lbcluster1> #定义集群lbcluster1
BalancerMember http://192.168.117.4:8080 loadfactor=10 route=TomcatA #指定集群成员,loadfactor指定负载权重,route指定web服务器的标签,集群可以通过此标签找到这个集群成员
BalancerMember http://192.168.117.5:8080 loadfactor=10 route=TomcatB
ProxySet Stickysession=ROUTEID #session会话绑定
</proxy>
<VirtualHost *:80>
ServerName web.test.com
ProxyVia on 
ProxyRequests off #关闭正向代理
ProxyPreserveHost on #开启web虚拟机
<Proxy *>
    Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPa***everse / balancer://lbcluster1/ #ProxyPass Reverse,因为前面被和谐了,分开写的,合在一起就可以了。
<Location />
    Require all granted
</Location>
</VirtualHost>
[root@httpd conf.d]# httpd -t #检查conf文件的语法格式是否正确
[root@httpd conf.d]# systemctl start httpd.service
[root@httpd conf.d]# netstat -tan | grep 80 

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

http://192.168.117.6/index.jsp

第二种实现:

[root@httpd ~]# yum install httpd -y
[root@httpd ~]# rpm -ql httpd #查看httpd相关的配置文件
[root@httpd ~]# vim /etc/httpd/conf/httpd.conf
注释掉  #DocumentRoot "/var/www/html"
[root@httpd ~]# cd /etc/httpd/conf.d/
[root@httpd conf.d]# vim lb_ajp.conf  #创建一个必须以.conf结尾文件
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED #session会话绑定
<proxy balancer://lbcluster1> #定义集群lbcluster1
BalancerMember ajp://192.168.117.4:8009 loadfactor=10 route=TomcatA #指定集群成员
BalancerMember ajp://192.168.117.5:8009 loadfactor=10 route=TomcatB
ProxySet Stickysession=ROUTEID #session会话绑定
</proxy>
<VirtualHost *:80>
ServerName web.test.com
ProxyVia on 
ProxyRequests off #关闭正向代理
ProxyPreserveHost on #开启web虚拟机
<Proxy *>
    Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPa***everse / balancer://lbcluster1/ #ProxyPass Reverse,因为前面被和谐了,分开写的,合在一起就可以了。
<Location />
    Require all granted
</Location>
</VirtualHost>
注:与第一种基本相同,基于ajp协议,配置文件只需更改:http->ajp;8080->8009
[root@httpd conf.d]# httpd -t #检查conf文件的语法格式是否正确
[root@httpd conf.d]# systemctl start httpd.service
[root@httpd conf.d]# netstat -tan | grep 80 

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

http://192.168.117.6/index.jsp

第三种实现:

1、加载mod_jk模块
[root@httpd ~]# yum install httpd-devel gcc -y #安装依赖
[root@httpd ~]# cd /usr/local/src
[root@httpd src]# wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz #下载源码,此操作需主机可连外网
[root@httpd src]# tar xf tomcat-connectors-1.2.41-src.tar.gz -C .. #..代表上级目录,即 /usr/local/
[root@httpd src]# cd ../tomcat-connectors-1.2.41-src/native
[root@httpd native]# which apxs # 查询apxs命令的可执行程序的路径
[root@httpd native]# ./configure --with-apxs=/usr/bin/apxs #此处/usr/bin/apxs就是上个步骤which apxs查出的结果
[root@httpd native]# make&&make install #编译安装
[root@httpd native]# ls /etc/httpd/modules/mod_jk.so #查看mod_jk模块是否安装成功

2、添加配置文件
[root@httpd ~]# vim /etc/httpd/conf.d/lb_jk.conf 
# Load the mod_jk
LoadModule  jk_module  modules/mod_jk.so #加载mod_jk模块
JkWorkersFile  /etc/httpd/extra/workers.properties #指定被代理tomcat的属性
JkLogFile  logs/mod_jk.log #指定日志目录
JkLogLevel  debug #指定日志级别
JkMount  /*  lbcluster1  #被代理web集群lbcluster1所有内容都可以通过代理访问
JkMount  /status/  stat1 #访问192.168.117.4/status/可查看被代理tomcat状态,注:status后面的斜线不可省略,否则会报404,因为此处定义的/status/后面是加了斜线的,要保持一致

[root@httpd ~]# mkdir /etc/httpd/extra/
[root@httpd ~]#vim /etc/httpd/extra/workers.properties #此路径与上个配置文件定义JkWorkersFile的路径是一致的
worker.list = lbcluster1,stat1 #工作列表:集群及集群状态
worker.TomcatA.type = ajp13 #ajp协议
worker.TomcatA.host = 192.168.117.4
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 1 #负载权重
worker.TomcatB.type = ajp13
worker.TomcatB.host = 192.168.117.5
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 2
worker.lbcluster1.type = lb
worker.lbcluster1.sticky_session = 0 #会话绑定,0对应关闭,1对应开启
worker.lbcluster1.balance_workers = TomcatA, TomcatB #指定集群成员
worker.stat1.type = status           
[root@httpd ~]# httpd -t #检查配置文件语法是否正确
[root@httpd ~]#systemctl start httpd
[root@httpd ~]#netstat -tan | grep 80

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

http://192.168.117.6
http://192.168.117.6/status/

标签:httpd,tomcat,web,192.168,liunx,conf,apache,root,浅析
来源: https://blog.51cto.com/15134854/2672145

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有