注:没事测试负载均衡都要重启tomcat
打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页
使用默认端口 8080
tomcat 安装文件放到 liunx 系统中,解压
进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器
具体操作如下
#下载tomcat压缩包 用filezilla 进行发送到linux中
#我这里是 安装到/usr/src 文件下
进入linux系统后
[root@localhost ~]# cd /usr/src
#进行解压
[root@localhost src]# tar -xvf apache-tomcat-9.0.36.tar.gz
#将apache-tomcat-9.0.36改为tomcat8080
#可使用filezilla 也可以使 一下命令
[root@localhost ~]# mv /usr/src/apache-tomcat-9.0.36 /usr/src/tomcat8080
#进入apache-tomcat-9.0.3/bin中
[root@localhost ~]# cd /usr/src/tomcat8080/bin
#启动tomcat
[root@localhost ~]# /usr/src/tomcat8080/bin/startup.sh
#关闭tomcat
[root@localhost ~]# /usr/src/tomcat8080/bin/startdown.sh
#查看日志
[root@localhost ~]# cd /usr/src/tomcat8080/logs/
[root@localhost logs]# tail -f catalina.out
#关闭tomcat端口端口号
[root@localhost tomcat:8081]# ps -ef | grep tomcat
root 8891 1 0 16:18 pts/0 00:00:51 /usr/bin/java -Djava.util.logging.config.file=/usr/src/tomcat8080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/src/tomcat8080/bin/bootstrap.jar:/usr/src/tomcat8080/bin/tomcat-juli.jar -Dcatalina.base=/usr/src/tomcat8080 -Dcatalina.home=/usr/src/tomcat8080 -Djava.io.tmpdir=/usr/src/tomcat8080/temp org.apache.catalina.startup.Bootstrap start
root 11218 6788 0 18:46 pts/0 00:00:00 grep --color=auto tomcat
#根据id关闭
[root@localhost tomcat:8081]# kill -9 8891
[root@localhost tomcat:8081]# ps -ef | grep tomcat
root 11234 6788 0 18:47 pts/0 00:00:00 grep --color=auto tomcat
#这是关闭状态的防火墙
[root@localhost ~]# firewall-cmd --list-all
FirewallD is not running
#开启防火墙
[root@localhost ~]# systemctl start firewalld
#防火墙
[root@localhost ~]# systemctl stop firewalld
#查看所有端口
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#没有8080端口 请添加端口
[root@localhost ~]# firewall-cmd --add-port=8080/tcp --permanent
#重启防火墙
[root@localhost ~]# firewall-cmd --reload
在 windows 系统中通过浏览器访问 tomcat 服务器
**第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置 **
具体位置如下
具体操作如下
**第二步 在 nginx 进行请求转发的配置(反向代理配置) **
[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vi nginx.conf
重启nginx一定要重启
[root@localhost conf]# cd /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
#没有8080端口 请添加端口
[root@localhost ~]# firewall-cmd --add-port=9001/tcp --permanent
#重启防火墙
[root@localhost ~]# firewall-cmd --reload
#查看所有端口
[root@localhost ~]# firewall-cmd --list-all
访问 http://192.168.61.132:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://192.168.61.132:9001/vod/ 直接跳转到 127.0.0.1:8082
(1)准备两个 tomcat 服务器,一个 8081 端口,一个 8082 端口
修改tomcat端口号(文件名不能有:)
#将名字更改为tomcat8081 和tomcat8082
[root@localhost ~]# mv /usr/src/apache-tomcat-9.0.36 /usr/src/tomcat8080
[root@localhost ~]# cd /usr/src/tomcat8081/conf
[root@localhost conf]# vi server.xml
修改3个地方的端口 只要不和8082端口一样即可
#1
#2
#3
[root@localhost ~]# cd /usr/src/tomcat8082/conf
[root@localhost conf]# vi server.xml
#1
#2
#3
启动tomcat
[root@localhost /]# /usr/src/tomcat8081/bin/startup.sh
[root@localhost /]# /usr/src/tomcat8082/bin/startup.sh
关闭tomcat
[root@localhost /]# /usr/src/tomcat8081/bin/shutdown.sh
[root@localhost /]# /usr/src/tomcat8082/bin/shutdown.sh
添加端口号
[root@localhost bin]# firewall-cmd --add-port=8081/tcp --permanent
success
[root@localhost bin]# firewall-cmd --add-port=8082/tcp --permanent
success
[root@localhost bin]# firewall-cmd --reload
success
http://192.168.61.132:8081/ http://192.168.61.132:8082/ 连接即可
(2)创建文件夹和测试页面
注:其中一个 理解即可
端口8081的为webapps/edu/a.html | 端口8082的为webapps/vod/a.html
测试页面
(1)找到 nginx 配置文件,进行反向代理配置
[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vi nginx.conf
添加如下操作 具体如何添加 (改注释也可以 自己添加也可以 但是最好还是修改注释)
server {
listen 9001;
server_name 192.168.61.132;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8082;
}
}
重启nginx
[root@localhost conf]# cd /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload
(2)开放对外访问的端口号 9001 8080 8081
#查看端口号 是否都有 如果没有请添加
[root@localhost conf]# firewall-cmd --list-all
#添加端口
[root@localhost ~]# firewall-cmd --add-port=8080/tcp --permanent
#重启防火墙
[root@localhost ~]# firewall-cmd --reload
(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8081
和 8082端口中
注:以下操作均可以模仿反向代理2中准备工作
(1)准备两台 tomcat 服务器,一台 8081,一台 8082
(2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建
页面 a.html,用于测试
注:把先前使用的反向代理给注释了 如果使用的是同一个nginx.conf请注释
#gzip on;
upstream myserver{
server 192.168.61.132:8081;
server 192.168.61.132:8082;
}
server {
listen 80;
server_name 192.168.61.132;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
输入 http://192.168.61.132/edu/a.html 即可查询 刷新便会在2个html中来回转换 这就是负载均衡
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
weight 代表权重默认为 1,权重越高被分配的客户端越多
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和
静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx
处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏
览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源
设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,
不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一
个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,
如果有修改,则直接从服务器重新下载,返回状态码 200。
在 liunx 系统中准备静态资源,用于进行访问
内容大致为 www中有a.html image中有1.jpg
在 nginx 配置文件中进行配置
#动态
location /www/ {
root /data/;
index index.html index.htm;
}
#静态
location /image/ {
root /data/;
autoindex on;
}
(1)浏览器中输入地址
http://192.168.61.132/image/1.jpg
因为配置文件 autoindex on
重点是添加 location,
最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端 tomcat
服务器上的某个静态文件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回
了,不走后端 tomcat 服务器
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,
继续进行争抢,实现请求过程,不会造成服务中断
worker 数和服务器的 cpu 数相等是最为适宜的
第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的
最大并发数是多少?
l 普通的静态访问最大并发数是: worker_connections * worker_processes /2,
l 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *
worker_processes/4。
需要2台服务器 192.168.61.133(主) 192.168.61.134(从) 一主一从
2台服务器中都要安装 nginx和keepalived
安装nginx省略
安装keepalived
#在usr/src中下载安装包
cd /usr/src/
#安装keepalived
yum install keepalived -y
#查看是否安装
rpm -q -a keeplived
#keepalived的配置文件目录
cd /etc/keepalived
#修改配置文件
vi keepalived.conf
主虚拟机
1.修改keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.61.133
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
192.168.61.50
}
}
2.在/usr/local/src 添加检测脚本
文件名字为nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
从虚拟机
1.只修改keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.61.134
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.61.50
}
}
2.在/usr/local/src 添加检测脚本
文件名字为nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启动nginx和keepalived(2台都要启动)
#启动nginx
/usr/local/nginx/sbin/nginx
#关闭nginx
/usr/local/nginx/sbin/nginx -s stop
#启动keepalived
systemctl start keepalived.service
#查看进程
ps -ef | grep keepalived
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.61.50
}
}
2.在/usr/local/src 添加检测脚本
文件名字为nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启动nginx和keepalived(2台都要启动)
#启动nginx
/usr/local/nginx/sbin/nginx
#关闭nginx
/usr/local/nginx/sbin/nginx -s stop
#启动keepalived
systemctl start keepalived.service
#查看进程
ps -ef | grep keepalived
在浏览器地址栏输入 虚拟ip 地址 192.168.61.50