前言
本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。
一、nginx反向代理
1.1 四层反向代理(速度快)
- 四层反向代理必须安装stream模块,若之前编译安装时未配置,则需要重新编译安装配置
nginx -V #查看当前安装了哪些模块
1.2 配置stream模块
vim /usr/local/nginx/conf/nginx.conf #修改nginx主配置文件
stream { #与http模块同级别
server {
listen 80; #监听端口为80端口
proxy_pass httpd_server; #定义负载均衡服务名称为httpd
} #对应server块的大括号
upstream httpd_server { #配置负载均衡配置
server 192.168.13.20:80 weight=1; #设置节点服务器IP/端口/权重等配置
server 192.168.13.30:80 weight=1;
} #对应upstream块的大括号
log_format main '$remote_addr $upstream_addr-[$time_local] $status $upstream_bytes_sent';
#开启日志(内容自定义)
} #对应stream块的大括号
nginx -t #检查语法错误
systemctl restart nginx #重启nginx服务
1.2 七层反向代理(功能多)
vim /usr/local/nginx/conf/nginx.conf #修改nginx主配置文件
http{
upstream httpd { #定义httpd负载调度服务(可自定义命名)
server 192.168.13.20:80 weight=1; #设置节点服务器IP/端口/权重等配置
server 192.168.13.30:80 weight=1;
}
keepalive_timeout 3; #缩小长链接时间,方便验证结果
server {
location / { #设置匹配规则(精确/正则/通用)
proxy_pass http://httpd/; #当触发该匹配规则时,调用自定义的httpd服务
} #对应location快大括号
} #对应server块大括号
} #对应http块大括号
nginx -t #检查语法错误
systemctl restart nginx #重启nginx服务
二、nginx+keepalived高可用部署
2.0 架构概况
作用 | IP地址 | 安装服务 |
---|---|---|
负载均衡器(主) | 192.168.13.10 | keepalived/nginx |
节点服务器1 | 192.168.13.20 | nginx+Tomcat |
节点服务器2 | 192.168.13.30 | nginx+Tomcat |
负载均衡器(备) | 192.168.13.40 | keepalived/nginx |
2.1 环境配置(所有服务器)
- 任何实验,如果你不想花几个小时排障的话,第一步:必须是关闭防火墙
- systemctl stop firewalld
- sentenceforce 0
2.2 负载均衡调度器(主)
2.2.1 编译安装nginx
yum -y install pcre-devel zlib-devel make #安装编译环境
useradd -M -s /sbin/nologin nginx #创建专门管理nginx的系统用户
tar xf /opt/nginx-1.12.0.tar.gz -C /opt/ #解压nginx源码包
cd /opt/nginx-1.12.0/ #进入解压后的目录,对nginx的模块进行配置
./configure \
--prefix=/usr/local/nginx \ #配置nginx安装路径
--user=nginx \ #配置nginx管理用户
--group=nginx \ #配置nginx所属组
--with-http_stub_status_module \ #监视模块,可以查看目前的连接数等一些信息(非核心模块)
--with-stream #四层反向代理模块(想启动四层代理,必须安装该模块)
make -j 4 && make install #编译安装nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #将nginx命令做软链接,方便后续使用
vim /lib/systemd/system/nginx.service #将nginx添加到系统服务当中(方便启动/关闭/开机自启)
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service #赋予nginx服务文件执行权限
systemctl enable --now nginx.service #设置nginx为开机自启,并立即启动nginx服务
netstat -natp |grep nginx #查看nginx是否启动成功
2.2.2 修改nginx配置(调度器)(主/四层反向代理)
vim /usr/local/nginx/conf/nginx.conf #四层反向代理
stream{
server {
listen 1314; #监听1314端口(这里博主试过用80端口,但是总是显示80端口被占用,博主没有解决这个问题,只能换个端口了)
proxy_pass backend_server; #调用对应的四层反向代理服务
}
upstream backend_server { #配置四层反向代理模块的服务名(与proxy_pass调用的服务名对应)
server 192.168.13.20:80 weight=1; #配置四层反向代理的调度算法、IP/端口、权重等
server 192.168.13.30:80 weight=1;
} #对应upstream模块的大括号
} #对应stream模块的大括号
约47行:七层反向代理的端口注释掉,或者换一个端口号,如下图
nignx -t #检查nginx配置文件语法错误
systemctl restart nginx #重启nginx服务
2.2.3 安装keepalived服务(高可用)
yum install -y keepalived #安装keepalived高可用工具
vim /etc/keepalived/check_nginx.sh #编写nginx健康检查脚本
#!/bin/bash
#effect: Nginx健康检查
count=$(ps -ef |grep nginx |egrep -cv "grep|$$") #ps命令查看运行中的进程-->grep过滤nginx服务-->-v排除这条命令进程
if [ $count -eq 0 ];then #如果运行的nginx命令数量为0,则判断nginx服务停止运行
systemctl stop keepalived #判断成功后,停止主keepalived进程(此时备启动keepalived进程)
fi
chmod +x /etc/keepalived/check_nginx.sh #赋予脚本执行权限
crotab -e #设置脚本每分钟执行一次(也可以编写shell脚本设置开机自启,sleep控制时间,缩短间隔时间)
*/1 * * * * /etc/keepalived/check_nginx.sh
cd /etc/keepalived/
vim keepalived.conf #修改keepalived高可用配置(详情如图)
10行:smtp_server 127.0.0.1
12行:router_id NGINX_01
13-16行:删除
17行:interface ens33
26行:192.168.13.100
27-28行:删除
29行及以下:删除
14行插入以下内容:
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 2
}
33行插入一下内容:
track_script {
check-nginx
}
systemctl start keepalived.service #启动keepalived服务
ip addr #此时应有VIP地址:inet 192.168.13.100/32
2.3 负载均衡调度器(备)
- 备用服务器的nginx安装与配置,与主服务相同,就不再次演示
#(在主调度器操作)scp keepalived.conf 192.168.13.40:`pwd` #将配置文件远程传送给备用负载调度器
vim /etc/keepalived/keepalived.conf
12行:router_id NGINX_02 #设置负载均衡类型和主次级别
21行:state BACKUP #设置状态为BACKUP(备份状态,必须大写)
24行:priority 90 #优先级只要比master低就行
systemctl start keepalived #启动keepalived高可用服务
ip addr #此时查看ip,会发现没有VIP地址
#(在主调度器操作)systemctl stop nginx #将主服务器nginx服务停止
ip addr #等待一分钟后,发现VIP地址已经到备用调度器上面了
注:为了防止脑裂现象,可以设置非抢占模式(不再区分主从,都设置为BACKUP,且添加配置nopreempt,可自行搜索扩展)
2.4 部署节点服务器(nginx+Tomcat)
2.4.1 编译安装jdk环境
#安装jdk环境(Tomcat是基于jdk环境运行的)
tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/ #将源码包下载至对应的目录
cat >/etc/profile.d/jdk.sh<<EOF #设置jdk相关的环境变量(以前有解释过)
JAVA_HOME=/usr/local/jdk1.8.0_91
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile.d/jdk.sh #刷新环境变量配置文件
java -version #显示的版本应该与源码包的版本一致(博主是:1.8.0_131)
2.4.2 编译安装Tomcat
cd /opt
#下载Tomcat源码包
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
mkdir -p /usr/local/tomcat/webapps/test
cd /usr/local/tomcat/webapps/test
#Tomcat动态主页配置(不需要精通,只需要简单的配置,能进行检测即可)
cat >index.jsp<<EOF
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
<body>
<% out.println("动态页面2,this is web 2");%>
</head>
</body>
</html>
EOF
#修改Tomcat动态页面路径指向(不需要精通,只需要简单的配置,能进行检测即可)
sed -i '148,149d' /usr/local/tomcat/conf/server.xml
sed -i '148i <Host name="localhost" appBase="webapps"\n unpackWARs="true" autoDeploy="true"\n xmlValidation="false" xmlNamespaceAware="false">' /usr/local/tomcat/conf/server.xml
sed -i '151i <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />' /usr/local/tomcat/conf/server.xml
#唯一要注意的就是151行,这行是路径指向,其余的都是默认配置,复制粘贴即可
/usr/local/tomcat/bin/startup.sh #启动Tomcat服务
curl 192.168.13.20:8080 #访问页面,检测Tomcat是否启动成功
2.4.3 编译安装nginx(七层反向代理+动静分离)
- 安装步骤与2.2.1的编译安装方法相同,配置文件修改如下即可
vim /usr/local/nginx/conf/nginx.conf
39行:charset utf-8; #开启万国字符集
47行下插入:
location ~ jsp$ {
proxy_pass http://192.168.13.20:8080;
}
nginx -t #检查语法错误
systemclt start nginx #启动nginx服务
此时到浏览器访问http://192.168.13.100:1314和http:192.168.13.100:1314/index.jsp会产生动静分离效果,多几台虚拟机访问还会产生负载均衡
三、结语
- 易错点:大括号对应错误,这种错误通过nginx -t 可逐渐排查出来,为了防止此类错误,要养成良好写代码习惯,复制粘贴的时候也要注意大括号是否对应整齐
- 注意点:想使用四层反向代理,nginx必须安装stream模块
版权声明:本文为H875035681原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。