【集群】nginx+keepalived负载均衡高可用(四层/七层反向代理)、nginx+Tomcat动静分离


前言

本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。


一、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.10keepalived/nginx
节点服务器1192.168.13.20nginx+Tomcat
节点服务器2192.168.13.30nginx+Tomcat
负载均衡器(备)192.168.13.40keepalived/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模块
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪碧不要气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值