■ 安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件
■ bin :存放启动和关闭Tomcat脚本
■ conf :存放Tomcat坏同的配置文件
■ doc: 存放Tomcat文档
■ lib: 存放Tomcat运行需要的库文件
■ logs:存放Tomcat执行时的LOG文件
■ src: 存放Tomcat的源代码
■ webapps: Tomcat的主要Web发布目录
■ work:存放jsp编译后产生的class文件
■ Nginx是一款非常优秀的HTTP服务器软件容
● 支持高达50 000个并发连接数的响应
● 拥有强大的静态资源处理能力
● 运行稳定
● 内存、CPU等系统资源消耗非常低
■ 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力
■ Nginx实现负载均衡是通过反向代理实现
■ Nginx配置反向代理的主要参数
● upstream 服务池名{ }
◆ 配置后端服务器池,以提供响应数据
●proxy_ pass http://服务池名
◆配置将访问请求转发给后端服务 器池的服务器处理
■ 动静分离原理
●服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
■ Nginx静态处理优势
● Nginx处理静态页面的效率远高于Tomcat的处理能力
● 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
● Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M .
●Nginx处理静态资源的能力是Tomcat处理的6倍
调度器两台(双机热备)
IP地址:192.168.74.10(主)
IP地址:192.168.74.20(备)
web服务器两台
IP地址:192.168.74.30(tomcat1)
IP地址:192.168.74.40(tomcat2)
NFS服务器
IP地址:192.168.74.50
客户端电脑一台
IP地址:192.168.74.60
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# setenforce 0
[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# cd /web1
[root@nfs web1]# vi 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>
[root@nfs web1]# cp index.jsp /web2
[root@nfs web1]# cd /web2
[root@nfs web2]# vi index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat2</title>
</head>
<body>
<% out.println("This is tomcat2 server");%>
<div>动态页面2</div><br/><img src="b.jpg" />
</body>
</html>
[root@nfs web2]# cd
[root@nfs ~]# vi /etc/exports
[root@nfs ~]# systemctl start nfs #服务开启
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl status nfs
[root@nfs ~]# systemctl status rpcbind
[root@nfs ~]# showmount -e #查看共享情况
[root@tomcat1 ~]# systemctl stop firewalld
[root@tomcat1 ~]# setenforce 0
[root@tomcat1 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz #解压缩
[root@tomcat1 ~]# mv jdk1.8.0_91/ /usr/local/java #剪切到usr/local下生成java目录
[root@tomcat1 ~]# vi /etc/profile #配置文件的修改
export JAVA_HOME=/usr/local/java #设置全局变量,后面跟它的目录设置JAVA根目录设为全局变量
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre #设置环境变量,引用老的环境,后面跟新的环境变量
将java.sh脚本导入到环境变量,使其生效
[root@tomcat1 ~]# source /etc/profile #进行调用
[root@tomcat1 ~]# echo $PATH #输出环境信息
[root@tomcat1 ~]# java -version #查看版本信息
编写java脚本测试java是否可以正常使用
[root@tomcat1 ~]# vi abc.java #编写Java脚本
public class abc {
定义类
public static void main (String[] args) {
System.out.println("hello world!!!"); 输出
}
}
[root@tomcat1 ~]# javac abc.java #编译脚本
[root@tomcat1 ~]# java abc #执行脚本
[root@tomcat2 ~]# systemctl stop firewalld
[root@tomcat2 ~]# setenforce 0
[root@tomcat2 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz #解压缩
[root@tomcat2 ~]# mv jdk1.8.0_91/ /usr/local/java #剪切到usr/local下生成java目录
[root@tomcat2 ~]# vi /etc/profile #配置文件的修改
export JAVA_HOME=/usr/local/java #设置全局变量,后面跟它的目录设置JAVA根目录设为全局变量
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre #设置环境变量,引用老的环境,后面跟新的环境变量
[root@tomcat2 ~]# source /etc/profile #进行调用
[root@tomcat2 ~]# echo $PATH #输出环境信息
[root@tomcat2 ~]# java -version #查看版本信息
编写java脚本测试java是否可以正常使用
[root@tomcat2 ~]# vi abc.java #编写Java脚本
[root@tomcat2 ~]# javac abc.java #编译脚本
[root@tomcat2 ~]# java abc #输出脚本
[root@tomcat1 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz #解压缩
[root@tomcat1 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8 #进行目录剪切
[root@tomcat1 ~]# mkdir /webapp1 #创建站点目录
[root@tomcat1 ~]# mount 192.168.74.50:/web1 /webapp1/ #将NFS资源挂载到本地
在配置文件里面修改站点目录
[root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml
注:docBase:web应用的文档基准目录
path=""指定访问路径URI(虚拟目录名),访问url路径下是否跟内容
reloadable:本项为true时,当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务(所谓的支持热发布功能)
[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 #查看端口信息
[root@tomcat1 ~]# curl http://localhost:8080
[root@tomcat2 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz #解压缩
[root@tomcat2 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8 #进行目录剪切
[root@tomcat2 ~]# mkdir /webapp2 #创建站点目录
[root@tomcat2 ~]# mount 192.168.74.50:/web2 /webapp2/ #将NFS资源挂载到本地
在配置文件里面修改站点目录
[root@tomcat2 ~]# vi /usr/local/tomcat8/conf/server.xml
[root@tomcat2 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@tomcat2 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@tomcat2 ~]# tomcatup #启动服务
[root@tomcat2 ~]# netstat -anpt | grep 8080 #查看端口信息
[root@tomcat2 ~]# curl http://localhost:8080
[root@nginx1 ~]# systemctl stop firewalld
[root@nginx1 ~]# setenforce 0
[root@nginx1 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel #安装依赖包
[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx #创建不可登录,不带宿主的目录
[root@nginx1 ~]# tar zxvf nginx-1.12.2.tar.gz #解压缩
[root@nginx1 ~]# cd nginx-1.12.2/
[root@nginx1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #安装路径,属主,属组设置
[root@nginx1 nginx-1.12.2]# make && make install #编译安装
[root@nginx1 nginx-1.12.2]# ln -s /usr/local/nginx/conf/nginx.conf /etc/ #创建设置链接
[root@nginx1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ #创建命令链接
[root@nginx1 nginx-1.12.2]# cd
[root@nginx1 ~]# vi /usr/local/nginx/conf/nginx.conf #修改配置文件
添加upstream服务池
upstream tomcat_server {
server 192.168.74.30:8080 weight=1;
节点 ip地址 端口号 权重
server 192.168.74.40:8080 weight=1;
}
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
} 服务地址池名
[root@nginx1 ~]# nginx -t
[root@nginx1 ~]# nginx
[root@nginx1 ~]# netstat -anpt | grep 80
[root@nginx1 ~]# cd /usr/local/nginx/html/
[root@nginx2 ~]# systemctl stop firewalld
[root@nginx2 ~]# setenforce 0
[root@nginx2 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel #安装依赖包
[root@nginx2 ~]# useradd -M -s /sbin/nologin nginx #创建不可登录,不带宿主的目录
[root@nginx2 ~]# tar zxvf nginx-1.12.2.tar.gz #解压缩
[root@nginx2 ~]# cd nginx-1.12.2/
[root@nginx2 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #安装路径,属主,属组设置
[root@nginx2 nginx-1.12.2]# make && make install #编译安装
[root@nginx2 nginx-1.12.2]# ln -s /usr/local/nginx/conf/nginx.conf /etc/ #创建设置链接
[root@nginx2 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ #创建命令链接
[root@nginx2 nginx-1.12.2]# cd
[root@nginx2 ~]# vi /usr/local/nginx/conf/nginx.conf #修改配置文件
添加upstream服务池
upstream tomcat_server {
server 192.168.74.30:8080 weight=1;
节点 ip地址 端口号 权重
server 192.168.74.40:8080 weight=1;
}
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
} 服务地址池名
[root@nginx2 ~]# nginx -t
[root@nginx2 ~]# nginx
[root@nginx2 ~]# netstat -anpt | grep 80
[root@nginx2 ~]# cd /usr/local/nginx/html/
[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 #编译安装
注:popt库的存在,主要是为了解析命令行选项。相比手动的解析argv数组或者使用getopt函数getopt( )或getopt_long( ), 使用popt库在很多方面都占有优势。popt的一些特点:它不使用全局变量,因此可以并行解析argv;它可以解析任意的argv风格的元素数组,可以解析来自任何源文件的命令行字符串(ps:估计是命令行字符串参数可保存在文件中,程序通过导入配置文件解析获得参数) ;它提供了一个使用选项别名的标准方法(后面会再讨论);它可以执行外部选项过滤器;最后,它能够自动生成程序的help和usage信息。
kernel-devel:做内核一般开发的,比如编写内核模块,原则上,可以不需要内核的源代码
[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
[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
[root@nginx1 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
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 {
192.168.74.100 定义虚拟ip(VIP)
}
}
[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]# 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 keepalived-2.0.13]# cd
[root@nginx1 ~]# tail -100 /var/log/messages #查看日志
[root@nginx1 ~]# ip addr
[root@nginx2 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安装依赖包
[root@nginx2 ~]# tar zxvf keepalived-2.0.13.tar.gz #解压缩
[root@nginx2 ~]# cd keepalived-2.0.13/
[root@nginx2 keepalived-2.0.13]# ./configure --prefix=/ #设置路径
[root@nginx2 keepalived-2.0.13]# make && make install #编译安装
[root@nginx2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@nginx2 keepalived-2.0.13]# vi /etc/init.d/keepalived
[root@nginx2 keepalived-2.0.13]# chmod 755 /etc/init.d
[root@nginx2 keepalived-2.0.13]# chkconfig --add keepalived
[root@nginx2 keepalived-2.0.13]# chkconfig --list
[root@nginx2 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx2
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx.sh"
interval 2
weight 2
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
adver_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.74.100
}
}
~
:wq
[root@nginx2 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@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 keepalived-2.0.13]# cd
[root@nginx2 ~]# tail -100 /var/log/messages #查看日志
[root@nginx2 ~]# ip addr
[root@nginx1 ~]# systemctl stop keepalived.service #关掉主调度器
[root@nginx2 ~]# ip addr
[root@nginx2 ~]# tail -50 /var/log/messages