千家信息网

利用Nginx反向代理Tomcat 多节点

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,利用Nginx反向代理 Tomcat 多节点实验说明:通过两台nginx反代理和 keepalived实现双机热备并成功访问后端商城项目数据。实验所需两台nginx keepalived 漂移地址 1
千家信息网最后更新 2024年09月24日利用Nginx反向代理Tomcat 多节点

利用Nginx反向代理 Tomcat 多节点

实验说明:通过两台nginx反代理和 keepalived实现双机热备并成功访问后端商城项目数据。

实验所需

两台nginx keepalived 漂移地址 192.168.30.100

Nginx 192.168.30.34

192.168.30.36

Tomcat 192.168.30.31

192.168.30.32

Mysql 192.168.30.35

事先已经安装完成nginx和mysql


实验达成结果 通过nginx漂移地址访问tomcat搭建的商城项目并登陆,主服务器模拟宕机,实现备份机上线


商城文件 点击链接 提取码: 97f7 里面有商城构架和一个数据库表


以下是各服务详细配置

mysql

[root@localhost ~]# mysql -u root -p #登陆mysql

mysql> create database slsaledb; #创建名为slsaledb 的数据库

mysql> GRANT all ON slsaledb.* TO 'testuser'@'%' IDENTIFIED BY 'admin123'; #授权testuser 使用密码admin123

mysql> flush privileges; #刷新

上传商城数据库文件

[root@localhost ~]# mysql -u root -p

Enter password: #输入数据管理员库密码

接下来配置tomcat

Tomcat所需文件


[root@lin3031 ~]# tar xf apache-tomcat-8.5.23.tar.gz #解压tomcat

[root@lin3031 ~]# tar xf jdk-8u144-linux-x64.tar.gz #解压java

[root@lin3031 ~]# cp -a jdk1.8.0_144/ /usr/local/java #复制Java解压文件至/usr/local/java

[root@lin3031 ~]# vi /etc/profile #增加环境变量

在最后插入下四行

export JAVA_HOME=/usr/local/java

export JRE_HOME=/usr/local/java/jre

export PATH=$PATH:/usr/local/java/bin

export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

刷新环境变量

[root@lin3031 ~]# source /etc/profile

查看是否生效

[root@lin3031 ~]# java -version

java version "1.8.0_144"

Java(TM) SE Runtime Environment (build 1.8.0_144-b01)

Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

[root@lin3031 ~]# cp -a apache-tomcat-8.5.23 /usr/local/tomcat8 #将解压后的tomcat复制到/usr/local/tomcat8


[root@lin3031 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup #优化路径

[root@lin3031 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown #优化路径


[root@lin3031 ~]# tomcatup #启动tomcat

[root@lin3031 ~]# netstat -anpt | grep 8080 #过滤8080端口

tcp6 0 0 :::8080 :::* LISTEN 1325/java


另一台tomcat安装操作相同


商城文件 点击链接 提取码: 97f7 里面有商城构架和一个数据库表

需要复制商城文件到tomcat

[root@lin3031 ~]# tar xf SLSaleSystem.tar.gz

[root@lin3031 ~]# cp -a SLSaleSystem /usr/local/tomcat8/webapps/

Tomcat主conf文件中添加

[root@lin3031 ~]# vim /usr/local/tomcat8/conf/server.xml


将tomcat连接后方数据库

[root@lin3031 ~]# vim /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/jdbc.properties

修改数据库地址和授权的账号密码


第二台tomcat操作如上相同


下面来测试

启动tomcat

[root@lin3031 ~]# tomcatdown

访问 192.168.30.31:8080 账号 admin 密码 123456


可以看到已经跳出了登陆选项


当然,用户是不可以知晓后方服务器的,需要提供一个前端来访问,下面的操作是配置两个nginx

Nginx配置

第一台 192.168.30.36

[root@lin3036 ~]# vim /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

error_log logs/error.log info;

#pid logs/nginx.pid;

events {

use epoll;

worker_connections 10240;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

upstream center_pool { #默认轮询

ip_hash; #保持连接

server 192.168.30.31:8080; #两台tomcat服务器

server 192.168.30.32:8080;

}

server {

listen 80;

server_name lvs01 192.168.30.36;

location / {

proxy_pass http://center_pool; #代理tomcat

}

}

}

使用nginx -t 检查语法

[root@lin3036 ~]# nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: [warn] 10240 worker_connections exceed open file resource limit: 1024

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

另一台nginx 192.168.30.34

[root@lin3034 ~]# vi /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

error_log logs/error.log info;

#pid logs/nginx.pid;

events {

use epoll;

worker_connections 10240;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

upstream center_pool { #默认轮询

ip_hash; #保持连接

server 192.168.30.31:8080; #两台tomcat服务器

server 192.168.30.32:8080;

}

server {

listen 80;

server_name lvs02 192.168.30.34;

location / {

proxy_pass http://center_pool; #代理tomcat

}

}

}

使用nginx -t 检查语法

[root@lin3034 ~]# nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: [warn] 10240 worker_connections exceed open file resource limit: 1024

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


检查后没有问题就重启nginx

systemctl restart nginx


验证


使用keepalived来保持两台nginx实现热备份 并用192.168.30.100访问商城

下面进行安装

yum -y install popt-devel \

kernel-devel \

openssl-devel

tar xvf keepalived-1.4.2.tar.gz

cd keepalived-1.4.2

[root@lin3034 keepalived-1.4.2]# ./configure --prefix=/

[root@lin3034 keepalived-1.4.2]# make && make install

[root@lin3034 keepalived-1.4.2]# cp keepalived/etc/init.d/keepalived /etc/init.d/

[root@lin3034 keepalived-1.4.2]# systemctl enable keepalived

两台安装方式相同

下面进行配置文件修改

第一台

[root@lin3036 keepalived-1.4.2]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

route_id NGINX-01 #服务器名称

}

vrrp_script nginx {

script "/opt/nginx.sh" #keepalived 状态检查配置文件路径

interval 2

weight -10

}

vrrp_instance VI_1 {

state MASTER #作为主服务器

interface ens33

virtual_router_id 51

priority 150 #优先级设为150

advert_int 1

authentication {

auth_type PASS #认证方式

auth_pass 1111 #认证密码

}

track_script {

nginx

}

virtual_ipaddress {

192.168.30.100 #两台nginx共同虚拟的IP地址(漂移地址)

}

}

该脚本方便同时将nginx和keepalived服务器同时启动

[root@lin3036 keepalived-1.4.2]# vi /opt/nginx.sh

#!/bin/bash

#Filename:nginx.sh

A=$(ps -ef | grep keepalived | grep -v grep | wc -l)

if [ $A -gt 0 ]; then

/etc/init.d/nginx start

else

/etc/init.d/nginx stop

fi

[root@lin3036 keepalived-1.4.2]# chmod +x /opt/nginx.sh

[root@lin3036 keepalived-1.4.2]# systemctl start keepalived

[root@lin3036 keepalived-1.4.2]# ip addr

由于第二台没有配置,所以默认192.168.30.100 在主服务器上

第二台

[root@lin3034 keepalived-1.4.2]# vi /etc/keepalived/keepalived.conf

global_defs {

route_id NGINX-02

}

vrrp_script nginx {

script "/opt/nginx.sh"

interval 2

weight -10

}

vrrp_instance VI_1 {

state BACKUP #作为从服务器

interface ens33

virtual_router_id 51

priority 100 #和主相差50

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

nginx

}

virtual_ipaddress {

192.168.30.100

}

根据漂移地址是否存在而启动nginx服务。

[root@lin3034 keepalived-1.4.2]# vi /opt/nginx.sh

#!/bin/bash

#Filename:nginx.sh

A=$(ip addr | grep 192.168.80.100/32 | grep -v grep | wc -l)

if [ $A -gt 0 ]; then

/etc/init.d/nginx start

else

/etc/init.d/nginx stop

fi


chmod +x /opt/nginx.sh

systemctl start keepalived


模拟主服务器故障

[root@lin3036 keepalived-1.4.2]# systemctl stop keepalived

[root@lin3036 keepalived-1.4.2]# systemctl stop nginx

[root@lin3036 keepalived-1.4.2]# ip addr

192.168.30.100 已经不在主服务器上了

而是到了从服务器

[root@lin3034 keepalived-1.4.2]# ip addr

访问192.168.30.100 账号 admin 密码 123456

0