类似于tomcat,web应用服务器,tomcat一般处理需要编译的动态资源。一般都是静态资源服务器和动态资源服务器是分开部署的。为了提高服务器的效率,静态资源可以大量使用缓存。
Apache 静态资源服务器和nginx都可以作为静态资源服务器
nginx是一个反向的静态资源服务器。
反向代理一般是用在服务器端,做请求的分发,能实现负载均衡。
yum install -y yum-utils
在官方yum源中也是没有nginx的,但是我们可以在本机去配置nginx的yum源,来实现nginx的yum安装。
然后再创建一个nginx.repo的文件:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
vim nginx.repo
i 插入后,esc,:wq 保存退出
使用yum源安装 nginx
[root@localhost yum.repos.d]# yum install -y nginx
安装成功
systemctl start nginx
systemctl stop nginx
sysemctl disable nginx
systemctl status nginx
[root@localhost yum.repos.d]# systemctl status nginx
nginx服务没有开启
启动nginx服务,并查看nginx服务状态
[root@localhost yum.repos.d]# systemctl start nginx
[root@localhost yum.repos.d]# systemctl status nginx
启动之后,在宿主机(windows电脑上)的浏览器测试是否能连接上nginx服务器。
nginx服务器默认端口号是 80
注意:防火墙一定要关闭
[root@localhost yum.repos.d]# systemctl stop firewalld
[root@localhost yum.repos.d]# systemctl status firewalld
在浏览器上输入 http://192.168.25.10/
nginx 安装成功。
selinux是linux的安全服务套件。
修改 vi /etc/selinux/confifig文件,修改如下内容:
[root@localhost yum.repos.d]# vi /etc/selinux/config
修改过之后,必须重启linux。
测试实例:nginx代理百度
比如我们想让nginx代理百度,可以修改它的配置文件。
[root@localhost ~]# vi /etc/nginx/nginx.conf
可以查看下系统用户
vi /etc/passwd
可以看到,创建了一个nginx的用户。
worker_processes 1; ----- nginx工作的进程数
进程数一般配置成跟操作系统的核心一样,效率最高,比如电脑是4核的,这里可以配置4,或者是操作系统核心数的2倍也可以。
error_log 错误日志
pid nginx启动的进程号
worker_connections 1024; #每个nginx进程最大支持多少个并发连接
计算nginx最多支持多少并发量 :worker_processes 乘以 worker_connections
keepalive_timeout 65;
配置http协议的长连接的超时时间为65秒。
我们以后经常修改的配置文件是 /etc/nginx/conf.d/default.conf
[root@localhost ~]# cd /etc/nginx/conf.d
[root@localhost conf.d]# ls
default.conf
[root@localhost conf.d]# vi default.conf
重启nginx服务,查看nginx服务启动状态
[root@localhost conf.d]# systemctl restart nginx
[root@localhost conf.d]# systemctl status nginx
在浏览器中访问 http://192.168.25.10/,跳转到百度页面
补充:如果没有跳转到百度页面,可以清楚下浏览器的缓存,重新加载页面。
准备好tomcat 和 jdk的linux版本的安装包,
通过Xftp上传到linux系统中
先配置jdk。
解压缩jdk
[root@localhost opt]# tar -xvf jdk-8u171-linux-x64.tar.gz
配置jdk环境变量
[root@localhost jdk8]# vim /etc/profile
JAVA_HOME=/opt/jdk8/
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH
然后 保存退出 ,在命令行执行 source 命令 编译环境变量文件,让环境变量立刻生效:
source /etc/profile
[root@localhost jdk8]# cd ..
[root@localhost opt]# ls
apache-tomcat-8.5.32.tar.gz cluster jdk8 redis-5.0.4 redis-5.0.4.tar.gz
[root@localhost opt]# tar -xvf apache-tomcat-8.5.32.tar.gz
tomcat 启动:
在浏览器访问 http://192.168.25.10:8080
查看tomcat有没有启动
ps -ef|grep tomcat
关闭tomcat服务
./shutdown.sh
将端口号改为 8000
另一个tomcat端口号为9000
生产环境中,不能把两个tomcat部署到一起,nginx也不能把tomcat部署到一起,请求会通过nginx服务器分发到两台电脑上。部署项目,一个项目需要部署两份相同的。访问8080,其实访问的也是一个项目,访问的是webapps目录下root的根项目,部署项目也可以把项目打成war包放到webapp下面。
访问doc项目,http://192.168.25.10:8000, 不写项目名访问的是 ROOT项目。
访问 http://192.168.25.10:8000/docs
访问 http://192.168.25.10:8000/examples
判断访问的是8000的项目还是9000的项目。
访问 http://192.168.25.10:8000
按照同样的步骤改下 tomcat9000的项目
[root@localhost ROOT]# vim /opt/tomcat9000/webapps/ROOT/index.jsp
启动tomcat9000
[root@localhost opt]# ./tomcat9000/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat9000
Using CATALINA_HOME: /opt/tomcat9000
Using CATALINA_TMPDIR: /opt/tomcat9000/temp
Using JRE_HOME: /opt/jdk8/
Using CLASSPATH: /opt/tomcat9000/bin/bootstrap.jar:/opt/tomcat9000/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]#
查看下服务进程
浏览器访问 http://192.168.25.10:9000
[root@localhost opt]# vim /etc/nginx/conf.d/default.conf
shift + o, 在第一行配置负载均衡的服务器, nginx服务转发的服务器i 和端口号
#配置负载均衡的服务器
upstream aaa{
server 192.168.25.10:8000;
server 192.168.25.10:9000;
}
注意: proxy_pass http://aaa; 和upstream的命名一致。
保存退出。
重新启动nginx
systemctl restart nginx
浏览器访问 http://192.168.25.10 ,刷新一次是访问8000,再刷新一次是访问9000。
默认是轮询。
默认nginx 支持的策略 。 来了请求之后 排队把请求一个一个的分发出去。
##配置负载均衡的服务器
upstream aaa{
server 192.168.25.10:8000 weight=3;
server 192.168.25.10:9000 weight=1;
}
数字是可以自定义的。上面的权重配比,比如发了4个请求,3个请求是转发给8000的服务器,1个请求时转发给9000的服务器。
如果不配置权重,就是一次8000,一次9000
重启nginx服务。
在浏览器访问 http://192.168.25.10
根据 客户端ip地址 固定分配到一台服务器上,以后这个ip来的所有请求 都会只到这一个服务器上。
重启nginx,在浏览器测试访问 http://192.168.25.10, 如果第一次访问的是某个服务器,那么以后都访问这个服务器。
好处:解决session共享问题。
保存退出。重启nginx。
结束tomcat9000的进程
浏览器访问 http://192.168.25.10 , 一直访问的是8000
重新启动tomcat9000服务器,浏览器测试访问,又可以轮询访问了。只要服务器没有全部挂掉,可以持久的提供服务。
上面我们实现的集群方式 可以解决tomcat 服务器单点故障的问题,但是解决不了 nginx服务器单点故
障的问题。
解决nginx 单点故障问题,市场上通用的解决方案就是使用keepalived 这种插件。
yum install -y keepalived
安装成功
下面修改keepalived的配置文件: vim /etc/keepalived/keepalived.conf文件
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
#keepalived如果检测到nginx服务不能用会往这个邮件发信息
[email protected]
}
#配置邮件服务器的信息
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
#声明一个脚本
vrrp_script chk_http_port {
#检测本机nginx的服务是否能用的脚本 这个脚本等下要自己编写
script "/usr/local/src/check_nginx_pid.sh"
#每隔多长时间自动调用上述脚本
interval 2
#权重
weight 2
}
vrrp_instance VI_1 {
#state MASTER
#配置当前的nginx服务器是主机还是备机
state BACKUP
#配置当前nginx服务是是否非抢占模式
#nopreempt
#配置心跳网卡的名称
interface ens33
#所有的keepalived的服务器的虚拟化路由都要一致
virtual_router_id 50
#nginx服务器的初始化权重
priority 100
#心跳连接发送的间隔
advert_int 1
#认证方式和认证密码 要保证所有keepalive的服务器的验证方式和 密码都一样
authentication {
auth_type PASS
auth_pass 1111
}
#启用上述脚本
track_script {
chk_http_port
}
virtual_ipaddress {
#配置了keeplived服务器之后再访问tomcat集群虚拟的ip地址时多 少
192.168.25.222#虚拟ip
}
}
d + G 把原来的删掉,i 插入,复制粘贴。
下一步,写/usr/local/src/check_nginx_pid.sh这个脚本:
vim /usr/local/src/check_nginx_pid.sh
#! /bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl start nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
创建好这个脚本之后,不要忘记修改文件的权限, 可以执行
[root@localhost src]# chmod 777 check_nginx_pid.sh
下面启动keepalived服务:
systemctl start keepalived
nginx如果关掉,keepalived会自动把nginx服务启动。
克隆一个虚拟机,192.168.25.12
启动tomcat8000,tomcat9000服务
[root@localhost opt]# ./tomcat8000/bin/startup.sh
[root@localhost opt]# ./tomcat9000/bin/startup.sh
启动keepalived服务
[root@localhost opt]# systemctl start keepalived
[root@localhost opt]# systemctl status nginx
keepalived默认启动nginx服务。
在浏览器中访问 192.168.25.222
windows系统下的dos命令里执行如下命令, 访问物理主机的物理地址
arp -a 192.168.25.222
在192.168.25.12中执行ip addr
在192.168.25.10中执行ip addr
可以看到现在访问的是nginx服务器或者keepalived是192.168.25.12的
现在模拟192.168.25.12挂了,是否能切换到192.168.25.10。
关闭keepalived服务
关闭nginx服务
[root@localhost opt]# systemctl stop keepalived
[root@localhost opt]# systemctl stop nginx
现在切换到了192.168.25.10
高可用就配置好了