服务器群集—Nginx+Tomcat+keepalived负载均衡、动静分离群集

一、架构解析

1.1 Tomcat

1.11 Tomcat简介

最初是由Sun的软件架构师詹姆斯.邓肯。戴维森开发
安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件

1.12 Tomcat重要目录

bin:存放启动和关闭Tomcat脚本
conf:存放Tomcat不同的配置文件
doc:存放Tomcat文档
lib:存放Tomcat运行需要的库文件
logs:存放Tomcat执行时的LOG文件
src:存放Tomcat的源代码
webapps:Tomcat的主要Web发布目录
work:存放jsp编译后产生的class文件

1.2 Nginx

1.21 Nginx应用

Nginx是一款非常优秀的HTTP服务器软件
● 支持高达50000个并发连接数的响应
● 拥有强大的静态资源处理能力
● 运行稳定
● 内存,CPU等系统资源消耗非常低
目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

1.22 Nginx负载均衡实现原理——反向代理

Nginx实现负载均衡是通过反向代理实现
反向代理原理
在这里插入图片描述

1.23 Nginy配置反向代理的主要参数

● upstream 服务池名 { }
配置后端服务器池,以提供响应数据
● proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理

2.3 动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端(Tomcat等)

2.31 Nginx静态处理优势

● Nginx处理静态页面的效率远高于Tomcat的处理能力
● 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
● Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
● Nginx处理静态资源的能力是Tomcat处理的6倍

二、Nginx+Tomcat+keepalived负载均衡,动静分离,热备群集

以Nginx作为负载均衡器,Tomcat作为应用服务器,增加热备功能

2.1 部署解析

2.11 Tomcat部署与测试网站搭建

要求部署两台后端Tomcat服务器
为了进行测试,搭建两个内容不同的网站
Tomcat部署与网站搭建步骤

  • 关闭firewalld防火墙

  • 安装JDK,配置JAVA环境

  • 安装配置Tomcat

  • 创建/web/webapp1目录,修改server.xml,将网站文件目录更改到/web/webapp1/路径下

  • /web/webapp1/下建立测试页面index.jsp,并进行测试

2.12 Nginx配置负载均衡,动静分离,热备

在Nginx服务器上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡

  • 关闭Firewalld防火墙

  • 安装Nginx依赖软件包

  • 解压并编译安装Nginx

  • 配置nginx.conf,添加location静态页面处理及添加upstream配置段与proxy_pass

  • 检测配置文件与启动Nginx

  • 测试负载均衡,动静分离效果

  • 安装keepalived依赖包

  • 解压并编译安装keepalived

  • 编辑keepalived.conf

  • 测试热备

2.2 部署流程

2.21 配置环境

在这里插入图片描述

记得改名及所有服务器关闭防火墙

nginx120.0.0.11(调度器1)
nginx220.0.0.12(调度器2)
tomcat120.0.0.13(节点服务器1)
tomcat220.0.0.14(节点服务器2)
nfs20.0.0.15(存储服务器)
client20.0.0.16(客户机)

2.22 nfs配置

1.创建测试页面web1,并添加图片a.jpg b.jpg

[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# vi /web1/index.jsp    #创建动态主页
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat1</title>
</head>
<body>
<% out.println("this is tomcat1 server");%>
<div>动态页面</div><br/><img src="a.jpg" />
</body>
</html>

# %%:表示区间
# language表示语言是java
# import类似于java类中的import就是把包导入进来,这样在jsp才可以调用包中的类
# pageEncoding表示页面的编码格式

[root@nfs ~]# cp /web1/index.jsp /web2    #复制主页文件到web2

2.修改测试页面web2

[root@nfs ~]# vi /web2/index.jsp   #修改
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020121402181835.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thbmdfMDE=,size_16,color_FFFFFF,t_70)

3.添加图片a.jpg b.jpg

[root@nfs ~]# cd /web1
[root@nfs ~]# cd /web2

在这里插入图片描述
在这里插入图片描述

4.配置文件

[root@nfs ~]# vi /etc/exports        #添加
/web1 20.0.0.12 (ro)          #ro:只读
/web2 20.0.0.13 (ro)
[root@nfs ~]# systemctl start nfs     #服务开启(允许nginx客户可以访问共享)
[root@nfs ~]# systemctl restart rpcbind            #(跨平台,端口管理服务)
[root@nfs ~]# showmount -e      #查看共享情况

在这里插入图片描述
在这里插入图片描述

2.23 tomcat配置

在tomcat1(we1)、tomcat2(web2)上添加安装包
apache-tomcat-8.5.16.tar.gz
jdk-8u91-linux-x64.tar.gz

tomcat1(we1)上配置

1.tar解包

[root@tomcat1 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz 
[root@tomcat1 ~]# mv jdk1.8.0_91/ /usr/local/java    #解压缩软件包到/usr/local/下生成java目录

2.设置环境变量

[root@tomcat1 ~]# vi /etc/profile     #末行添加
export JAVA_HOME=/usr/local/java    #定义变量并设为全局变量,设置JAVA的根目录
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre     #引用环境变量
[root@tomcat1 ~]# source /etc/profile     #变量立即生效
[root@tomcat1 ~]# echo $PATH       #查看当前环境变量
[root@tomcat1 ~]# java -version     #查看版本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.编译java脚本,测试java是否正常运行

[root@tomcat1 ~]# vi abc.java
public class abc {

        public static void main (String[] args) {
               System.out.println ("hello world!!!");
}
}
[root@tomcat1 ~]# javac abc.java    #编译
[root@tomcat1 ~]# java abc    #执行
hello world!!!           #代表正常运行

4.安装Tomcat

4.1 解压缩
[root@tomcat1 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz 
[root@tomcat1 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8     #生成tomcat8目录

4.2 创建站点目录并挂载
[root@tomcat1 ~]# mkdir /webapp1
[root@tomcat1 ~]# cd /webapp1/ 
[root@tomcat1 webapp1]# mount 20.0.0.15:/web1 /webapp1/         #/webapp1挂载到nfs/web1下
[root@tomcat1 webapp1]# df -Th
[root@tomcat1 webapp1]# cd

4.3 配置文件中引用站点主页目录
[root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml   #配置文件中引用目录
#添加:
      <Context docBase="/webapp1" path="" reloadable="false">
      </Context>

#docBase:web应用的文档基准目录
#path=""指定访问路径URI(虚拟目录名),访问url路径下是否跟内容
#reloadable:本项为true时,当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务(所谓的支持热发布功能)

#其中 <Host name=“localhost” appBase=“webapps”
#localhost:指的是本地主机名,不是域名,代表地址(127.0.0.14.4 启动关闭脚本创建链接并启动
[root@tomcat1 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup   #启动脚本创建链接
[root@tomcat1 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown   #关闭脚本创建链接
[root@tomcat1 ~]# tomcatup  #服务启动
[root@tomcat1 ~]# netstat -anpt | grep 8080  #查看8080端口状态(tomcat默认端口) 

在这里插入图片描述
在这里插入图片描述

5. 浏览器验证
http://20.0.0.13:8080

在这里插入图片描述

以上完成tomcat1的配置

tomcat2(we2)配置同上
修改:创建站点webapp2挂载到web2下,配置文件内引用目录也需修改为webapp2;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

浏览器验证http://20.0.0.14:8080
在这里插入图片描述

以上完成tomcat2的配置

2.24 调度器配置

在nginx1,nginx2上
添加nginx,keepalived安装包
nginx-1.13.7.tar
keepalived-2.0.13.tar.gz

2.241 配置Nginx

nginx1上配置

1. 安装Nginx依赖包

[root@nginx1 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel    #pcre-devel:正则表达式库;zlib-devel:函数库
[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx  #创建不带宿主,不可登录的用户nginx
[root@nginx1 ~]# tar zxvf nginx-1.13.7.tar.gz       #解压缩
[root@nginx1 ~]# cd nginx-1.13.7/    #进入主目录
[root@nginx1 nginx-1.13.7]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx   #安装路径,属主,属组设置
[root@nginx1 nginx-1.13.7]# make && make install   #编译安装
[root@nginx1 nginx-1.13.7]# ln -s /usr/local/nginx/conf/nginx.conf /etc/     #创建设置链接
[root@nginx1 nginx-1.13.7]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/      #创建命令链接,方便使用命令
[root@nginx1 nginx-1.13.7]# cd

2. 配置文件

[root@nginx1 ~]# vi /usr/local/nginx/conf/nginx.conf
#server上面添加upstream服务池:server里面添加调用程序
    upstream tomcat_server {        #服务地址池名
             server 20.0.0.13:8080 weight=1;
             server 20.0.0.14:8080 weight=1;
             #节点      ip地址  端口号  权重
}

        location ~ \.jsp$ {
             proxy_pass http://tomcat_server;  
}                                         #服务地址池名

[root@nginx1 ~]# nginx -t   检查语法
[root@nginx1 ~]# nginx    服务启动
[root@nginx1 ~]# netstat -anpt | grep 80   查看端口状态

在这里插入图片描述
在这里插入图片描述

3. 在浏览器上测试该调度器是否可以单独工作
http://20.0.0.11
在这里插入图片描述

4.解决静态资源在nginx上显示问题
http://20.0.0.11/index.jsp
发现图片未显示出来
在这里插入图片描述

进行抓包查看
发现图片a.jpg和图片b.jpg转跳地址都是20.0.0.11(nginx地址),而不是20.0.0.13,20.0.0.14(tomcat地址)说明了静态资源是在nginx上进行调度的
在这里插入图片描述

解决图片不显示问题
在本地/usr/local/nginx/html/目录下添加图片a.jpg b.jpg
就可以解决了
在这里插入图片描述
在这里插入图片描述

浏览器再次访问http://20.0.0.11/index.jsp

在这里插入图片描述
在这里插入图片描述

进行抓包查看:
在这里插入图片描述

以上说明图片,音频等静态资源应该放在nginx的站点目录下

nginx2上配置同上

2.242 配置keepalived

1. 安装包

[root@nginx1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel   #安装依赖包
[root@nginx1 ~]# tar zxvf keepalived-2.0.13.tar.gz    #解压缩
[root@nginx1 ~]# cd keepalived-2.0.13/   
[root@nginx1 keepalived-2.0.13]# ./configure --prefix=/      路径设置
[root@nginx1 keepalived-2.0.13]# make && make install   编译安装
[root@nginx1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@nginx1 keepalived-2.0.13]# vi /etc/init.d/keepalived   
修改:
#chkconfig: 35 21 79  运行级别
[root@nginx1 keepalived-2.0.13]# chmod 755 /etc/init.d
[root@nginx1 keepalived-2.0.13]# chkconfig --add keepalived
[root@nginx1 keepalived-2.0.13]# chkconfig --list

在这里插入图片描述

2. 添加配置文件

[root@nginx1 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf 
删除所有,除了第一行
添加:
global_defs {
     router_id nginx1       #本服务器的名称
}
vrrp_script chk_http_port {       #vrrp脚本
     script "/usr/local/src/nginx.sh"    #脚本路径 最后手动执行此脚本,以确保脚本能够正常运行
     interval 2          #检测间隔时间 单位秒
     weight 2
}**加粗样式**
vrrp_instance vi_1 {       #实例名称
     state MASTER        #指定keepalived的角色,MASTER为主,BACKUP为备
     interface ens33    #当前进行vrrp通讯的网络接口卡
     virtual_router_id 51   #虚拟路由编号,主从要一致
     priority 110            #优先级,数值越大,获取地址优先级越大
     adver_int 1             #检查间隔,默认为1s (vrrp组播周期秒数)
     authentication {       #认证方式
          auth_type PASS
          auth_pass 1111
}
track_script {         
       chk_http_port     #调用检测脚本  
}
virtual_ipaddress {
     20.0.0.100           #定义虚拟ip(VIP}
}

在调度器2上完成keepalived的编译安装后从调度器1进行拷贝
调度器1[root@nginx1 keepalived-2.0.13]# scp /etc/keepalived/keepalived.conf root@20.0.0.12:/etc/keepalived/     #拷贝文件
调度器2上进行文件编辑
[root@nginx2 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf 
修改:
router_id nginx2   服务器名称
 state BACKUP      指定keepalived的角色,MASTER为主,BACKUP为备
 priority 105   优先级

在这里插入图片描述

3. 配置脚本文件
在调度器1上配置脚本文件,并拷贝给调度器2

[root@nginx1 keepalived-2.0.13]# vi /usr/local/src/nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`    查询进程数
if [ $A -eq 0 ]          
then /usr/local/nginx/sbin/nginx
   if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
    then exit 1
    else exit 0
   fi
else
   exit 0
fi
[root@nginx1 keepalived-2.0.13]# scp /usr/local/src/nginx.sh root@20.0.0.12:/usr/local/src
[root@nginx1 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh 
[root@nginx1 keepalived-2.0.13]# systemctl start keepalived.service 
[root@nginx1 keepalived-2.0.13]# systemctl status keepalived.service 服务状态
[root@nginx1 ~]# tail -100 /var/log/messages    查看日志
[root@nginx1 ~]# ip addr   查看虚拟地址

在这里插入图片描述
在这里插入图片描述

调度器2上

[root@nginx2 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh 
[root@nginx2 keepalived-2.0.13]# systemctl start keepalived.service 
[root@nginx2 keepalived-2.0.13]# systemctl status keepalived.service 服务状态
[root@nginx2 ~]# tail -100 /var/log/messages    查看日志
[root@nginx2 ~]# ip addr   查看虚拟地址

在这里插入图片描述
在这里插入图片描述

4. 浏览器访问
http://20.0.0.100
http://20.0.0.100/index.jsp
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.25 故障模拟

2.251 调度器1出现问题时,是否高可用
调度器1[root@nginx1 ~]# systemctl stop keepalived.service    #停止服务
[root@nginx1 ~]# ip addr  #虚拟地址消失
调度器2[root@nginx2 ~]# ip addr    #漂移地址过来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网页仍然能够访问

2.251 节点1出现问题,访问是否影响
调度器1[root@nginx1 ~]# tomcatdown     #tomcat停止服务

在这里插入图片描述

在浏览器上访问发现只能访问tomcat2的页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值