Nginx+Tomcat+Redis实现负载均衡会话保持

时间:2023-02-24 20:16:54

Nginx+Tomcat+Redis实现负载均衡会话保持

????荣誉认证:51CTO博客专家博主、TOP红人、明日之星;阿里云开发者社区专家博主、技术博主、星级博主。

????微信公众号:​​微笑的段嘉许​

????本文由​​微笑的段嘉许​​原创!

????欢迎关注????点赞????收藏⭐留言????

????51CTO首发时间:????2023年2月24日????

✉️坚持和努力一定能换来诗与远方!

????作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

Nginx+Tomcat+Redis实现负载均衡会话保持

不要偷走我小火车哦~ ~ ~

本文介绍

在之前的文章介绍了 Nginx 一个很重要的功能——代理,包括正向代理和反向代理。这两个代理的核心区别是:正向代理代理的是客户端,而反向代理代理的是服务器。其中我们又重点介绍了反向代理,以及如何通过 Nginx 来实现反向代理。那么了解了Nginx的反向代理之后,我们要通过Nginx的反向代理实现另一个重要功能——负载均衡,然后再此基础上再加一台redis非关系型数据库来保存客户端请求的数据,实现会话保持。

????理论讲解:

负载均衡的由来

​早期的系统架构,基本上都是如下形式的:​Nginx+Tomcat+Redis实现负载均衡会话保持

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

我们首先想到的可能是升级服务器的配置,比如提高CPU执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的*物理配置,都是不能够满足需求的。那么怎么办呢?

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。Nginx+Tomcat+Redis实现负载均衡会话保持

负载均衡完美的解决了单个服务器硬件性能瓶颈的问题,但是随着而来的如何实现负载均衡呢?客户端怎么知道要将请求发送到那个服务器去处理呢?

Nginx实现负载均衡

Nginx 服务器是介于客户端和服务器之间的中介,通过上一篇博客讲解的反向代理的功能,客户端发送的请求先经过 Nginx ,然后通过 Nginx 将请求根据相应的规则分发到相应的服务器。Nginx+Tomcat+Redis实现负载均衡会话保持

负载均衡主要通过专门的硬件设备或者软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本较高。而通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法又主要分为两大类:

静态负载均衡算法:主要包括轮询算法、基于比率的加权轮询算法或者基于优先级的加权轮询算法。

动态负载均衡算法:主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。

静态负载均衡算法在一般网络环境下也能表现的比较好,动态负载均衡算法更加适用于复杂的网络环境。

​普通轮询算法​

这是Nginx 默认的轮询算法。

例子:两台相同的Tomcat服务器,通过 localhost:8080 访问Tomcat1,通过 localhost:8081访问Tomcat2,现在我们要输入 localhost 这个地址,可以在这两个Tomcat服务器之间进行交替访问。

​基于比例加权轮询​

上述两台Tomcat服务器基本上是交替进行访问的。但是这里我们有个需求:

由于Tomcat1服务器的配置更高点,我们希望该服务器接受更多的请求,而 Tomcat2 服务器配置低,希望其处理相对较少的请求。

​基于IP路由负载​

我们知道一个请求在经过一个服务器处理时,服务器会保存相关的会话信息,比如session,但是该请求如果第一个服务器没处理完,通过nginx轮询到第二个服务器上,那么这个服务器是没有会话信息的。

最典型的一个例子:用户第一次进入一个系统是需要进行登录身份验证的,首先将请求跳转到Tomcat1服务器进行处理,登录信息是保存在Tomcat1 上的,这时候需要进行别的操作,那么可能会将请求轮询到第二个Tomcat2上,那么由于Tomcat2 没有保存会话信息,会以为该用户没有登录,然后继续登录一次,如果有多个服务器,每次第一次访问都要进行登录,这显然是很影响用户体验的。

这里产生的一个问题也就是集群环境下的 session 共享,如何解决这个问题?

​通常有两种方法:​

  • 第一种方法是选择一个中间件,将登录信息保存在一个中间件上,这个中间件可以为Redis这样的数据库。那么第一次登录,我们将session 信息保存在 Redis 中,跳转到第二个服务器时,我们可以先去Redis上查询是否有登录信息,如果有,就能直接进行登录之后的操作了,而不用进行重复登录。
  • 第二种方法是根据客户端的IP地址划分,每次都将同一个 IP 地址发送的请求都分发到同一个 Tomcat 服务器,那么也不会存在 session 共享的问题。

Tomcat介绍

Apache Tomcat 是由 Apache Software Foundation(ASF)开发的一个开源 Java WEB 应用服务器。由于 Tomcat 是由 Java 语言实现的,因此需要运行在 Java 虚拟机上,所以使用前要先安装 JDK,以提供运行环境。

Tomcat 实现了几个 Java EE 规范,包括 Java Servlet、Java Server Pages(JSP)、Java Expression Language 和 Java WebSocket 等。在下载好 Tomcat 后,可以在它的 lib 目录中看到相关的 Java EE 规范 API 源码的引用。

Tomcat 实现的几个 Java EE 规范中,有一个很重要的规范 Servlet,通过它我们可以运行自己编写的 Servlet 应用程序处理动态请求,即实现动态页面。

Tomcat 的 Connector 组件实现了 HTTP 请求的解析,可以把 Tomcat 看作是一个 HTTP 服务器,Tomcat 可以通过 Connector 组件接收 HTTP 请求并解析,然后把解析后的信息交给 Servlet 处理:

  • 对于静态资源(html/css/js 等)请求:Tomcat 提供默认的 Servlet 来处理响应
  • 对于动态请求:可以映射到自己编写的 Servlet 应用程序来处理

redis简介

​ Redis 是C语言开发的一个开源高性能键值对的​​内存数据库​​,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库

​ 与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被​​广泛应用于缓存​​,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。


????实验配置与实现:

拓扑图Nginx+Tomcat+Redis实现负载均衡会话保持

推荐步骤

  • 在Cento01和Centos02上安装Nginx和keepalived服务器,创建脚本监听Nginx和keepalived状态,配置Nginx服务器支持负载均衡
  • 安装Nginx服务器设置域名www.duanjiaxu.com
  • 在Centos03和Centos04上安装tomcat,设置虚拟主机根目录启动服务
  • 客户端使用域名www.duanjiaxu.com访问keepalived的VIP地址实现故障转移
  • Tomcat服务器配置会话保持设置主页
  • 安装redis服务器,集中化保存客户端请求信息实现会话保存

实验步骤

一、在Centos01和Centos02上安装Nginx和keepalived服务器,创建脚本监听Nginx和keepalived状态,配置Nginx服务器支持负载均衡

1.1、在Centos01上安装nginx和keepalived服务

1)挂载系统光盘

[root@centos01 ~]# mount /dev/cdrom /mnt/     //挂载系统光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# ls /mnt/ //查看是否挂载成功
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@centos01 ~]# rm -rf /etc/yum.repos.d/CentOS-* //删除系统自带的yum源
[root@centos01 ~]# cat /etc/yum.repos.d/local.repo //查看本地yum源
[local]
name=centos
baseurl=file:///mnt
enabled=1
gpgcheck=0

Nginx+Tomcat+Redis实现负载均衡会话保持

2)在Centos01上安装keepalived服务

[root@centos01 ~]# yum -y install pcre-devel zlib-devel openssl-devel     //安装依赖程序
[root@centos01 ~]# yum -y install keepalived //安装keepalived
[root@centos01 ~]# systemctl start keepalived //启动keepalived
[root@centos01 ~]# systemctl enable keepalived //设置开机自启

3)在Centos01上安装nginx服务

[root@centos01 ~]# umount /mnt/     //卸载系统光盘
[root@centos01 ~]# ls /mnt/ //查看是否卸载成功
[root@centos01 ~]# mount /dev/cdrom /mnt/ //挂载云计算光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# ls /mnt/ //查看是否卸载成功
amoeba-mysql-binary-2.2.0.tar.gz
apache-tomcat-7.0.54.tar.gz
haproxy-1.4.24.tar.gz
httpd-2.2.17.tar.gz
inotify-tools-3.14.tar.gz
jdk-6u14-linux-x64.bin
jdk-7u65-linux-x64.gz
nginx-1.6.0.tar.gz
---
[root@centos01 ~]# useradd -M -s /sbin/nologin nginx //创建nginx用户
[root@centos01 ~]# tar zxf /mnt/nginx-1.6.0.tar.gz -C /usr/src/ //解压nginx源代码程序到/usr/src
[root@centos01 ~]# cd /usr/src/nginx-1.6.0/ //切换到nginx目录
[root@centos01 nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module //安装模块
[root@centos01 nginx-1.6.0]# make && make install //编译安装
[root@centos01 ~]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ //优化命令

Nginx+Tomcat+Redis实现负载均衡会话保持

1.2、在Centos02上安装nginx和keepalived服务

1)挂载系统光盘

[root@centos02 ~]# mount /dev/cdrom /mnt/     //挂载系统光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# ls /mnt/ //查看是否挂载成功
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@centos02 ~]# rm -rf /etc/yum.repos.d/CentOS-* //删除系统自带的yum源
[root@centos02 ~]# cat /etc/yum.repos.d/local.repo //查看本地yum源
[local]
name=centos
baseurl=file:///mnt
enabled=1
gpgcheck=0

Nginx+Tomcat+Redis实现负载均衡会话保持

2)在Centos02上安装keepalived服务

[root@centos02 ~]# yum -y install pcre-devel zlib-devel openssl-devel     //安装依赖程序
[root@centos02 ~]# yum -y install keepalived //安装keepalived
[root@centos02 ~]# systemctl start keepalived //启动keepalived
[root@centos02 ~]# systemctl enable keepalived //设置开机自启

3)在Centos02上安装nginx服务

[root@centos02 ~]# umount /mnt/     //卸载系统光盘
[root@centos02 ~]# ls /mnt/ //查看是否卸载成功
[root@centos02 ~]# mount /dev/cdrom /mnt/ //挂载云计算光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# ls /mnt/ //查看是否卸载成功
amoeba-mysql-binary-2.2.0.tar.gz
apache-tomcat-7.0.54.tar.gz
haproxy-1.4.24.tar.gz
httpd-2.2.17.tar.gz
inotify-tools-3.14.tar.gz
jdk-6u14-linux-x64.bin
jdk-7u65-linux-x64.gz
nginx-1.6.0.tar.gz
---
[root@centos02 ~]# useradd -M -s /sbin/nologin nginx //创建nginx用户
[root@centos02 ~]# tar zxf /mnt/nginx-1.6.0.tar.gz -C /usr/src/ //解压nginx源代码程序到/usr/src
[root@centos02 ~]# cd /usr/src/nginx-1.6.0/ //切换到nginx目录
[root@centos02 nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module //安装模块
[root@centos02 nginx-1.6.0]# make && make install //编译安装
[root@centos02 ~]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ //优化命令

Nginx+Tomcat+Redis实现负载均衡会话保持

1.3、创建脚本监听nginx和keepalived状态

1)修改keepalived主配置文件

[root@centos01 ~]# vim /opt/chk_nginx.sh      //进入脚本文件
---
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ]
then
/usr/bin/systemctl stop keepalived
fi
---
[root@centos01 ~]# chmod +x /opt/chk_nginx.sh //给脚本添加执行权限

Nginx+Tomcat+Redis实现负载均衡会话保持

2)修改keepalived主配置文件

[root@centos01 ~]# vim /etc/keepalived/keepalived.conf      //进入keepalived主配置文件
---
1 ! Configuration File for keepalived
2 global_defs {
3 router_id Nginx_Master //名字
4 }
5 vrrp_script check_nginx { //检查nginx服务运行状态
6 script "/opt/chk_nginx.sh" //执行脚本
7 interval 2 //2秒
8 }
9 vrrp_instance VI_1 { //vrrp实例名字Vl_1
10 state MASTER //角色Master主
11 interface ens32 //监听网卡
12 virtual_router_id 51 //路由器id
13 priority 100 //优先级100
14 advert_int 1 //监控检测间隔时间1秒
15 authentication {
16 auth_type PASS //主备份设置验证
17 auth_pass 1111 //密码1111
18 }
19 virtual_ipaddress {
20 192.168.100.100 //nginx的群集漂移IP地址
21 }
22 track_script {
23 check_nginx //执行脚本
24 }
25}

Nginx+Tomcat+Redis实现负载均衡会话保持

1.4、启动nginx服务重启keepalived服务

1)启动nginx和keepalived服务

[root@centos01 ~]# nginx      //启动nginx服务
[root@centos01 ~]# systemctl restart keepalived //重启keepalived服务

2)查看IP地址

[root@centos01 ~]# ip a         //查看IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:3a:c5:6c brd ff:ff:ff:ff:ff:ff
inet 192.168.100.20/24 brd 192.168.100.255 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.100.100/32 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe3a:c56c/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff

Nginx+Tomcat+Redis实现负载均衡会话保持

3)停止nginx服务IP地址漂移

[root@centos01 ~]# killall nginx            //停止nginx服务
[root@centos01 ~]# netstat -anptu | grep nginx //监听网卡
[root@centos02 ~]# ip a //查看IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:3a:c5:6c brd ff:ff:ff:ff:ff:ff
inet 192.168.100.20/24 brd 192.168.100.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe3a:c56c/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff

1.5、配置nginx服务器支持负载均衡

1)备份第一台keepalived配置文件和脚本文件到第二台keepalived

[root@centos01 ~]# scp /etc/keepalived/keepalived.conf root@192.168.100.20:/etc/keepalived/       //备份keepalived配置文件
[root@centos01 ~]# scp /opt/chk_nginx.sh root@192.168.100.20:/opt/ 备份脚本配置文件

2)修改keepalived主配置文件

[root@centos02 ~]# vim /etc/keepalived/keepalived.conf      //进入主配置文件目录
---
1 ! Configuration File for keepalived
2 global_defs {
3 router_id Nginx_Master
4 }
5 vrrp_script check_nginx {
6 script "/opt/chk_nginx.sh"
7 interval 2
8 }
9 vrrp_instance VI_1 {
10 state BACKUP //修改为备份服务器
11 interface ens32
12 virtual_router_id 51
13 priority 90 //优先级改成90
14 advert_int 1
15 authentication {
16 auth_type PASS
17 auth_pass 1111
18 }
19 virtual_ipaddress {
20 192.168.100.100
21 }
22 track_script {
23 check_nginx
24 }
25 }
---
[root@centos02 ~]# nginx //启动nginx服务
[root@centos02 ~]# systemctl restart keepalived //重新启动keepalived服务

Nginx+Tomcat+Redis实现负载均衡会话保持

3)验证

​停止第一台nginx服务模拟故障​

[root@centos01 ~]# killall nginx            //停止nginx服务
nginx: no process found
[root@centos01 ~]# ip a //查看IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:25:91:b5 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/24 brd 192.168.100.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe25:91b5/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff

4)查看第二台服务器IP地址是否漂移过来

[root@centos02 ~]# ip a         //查看IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:3a:c5:6c brd ff:ff:ff:ff:ff:ff
inet 192.168.100.20/24 brd 192.168.100.255 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.100.100/32 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe3a:c56c/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:3f:6b:6d brd ff:ff:ff:ff:ff:ff

Nginx+Tomcat+Redis实现负载均衡会话保持

二、安装DNS服务设置域名www.duanjiaxu.con

2.1、在Centos02上安装DNS服务

1)配置IP地址和DNS

[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.10 //IP地址
NETMASK=255.255.255.0 //子网掩码
DNS1=192.168.100.10 //DNS
----
[root@centos01 ~]# systemctl restart network //重新启动网卡服务
[root@centos01 ~]# cat /etc/resolv.conf //查看DNS是否配置成功
# Generated by NetworkManager
nameserver 192.168.100.10

2.2、安装DNS服务

1)挂载系统光盘

[root@centos01 ~]# mount /dev/cdrom /mnt/   //挂载系统光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# ls /mnt/ //查看系统光盘是否挂载成功
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL

2)安装DNS程序包

[root@centos01 ~]# rpm -ivh /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm 
警告:/mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-32:9.9.4-50.el7 ################################# [100%]
[root@centos01 ~]# rpm -ivh /mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm
警告:/mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-chroot-32:9.9.4-50.el7 ################################# [100%]

2.3、修改DNS配置文件按

1)修改DNS配置文件

[root@centos01 ~]# echo "" > /etc/named.conf     //清空主配置文件
[root@centos01 ~]# vim /etc/named.conf //进入到主配置文件
----
options {
listen-on port 53 { any; };
};
zone "duanjiaxu.com" IN {
type master;
file "var/named/duanjiaxu.com.zone";
};
[root@centos01 ~]# named-checkconf /etc/named.conf //检查主配置文件是否修改正确

Nginx+Tomcat+Redis实现负载均衡会话保持

2)修改DNS区域配置文件

[root@centos01 ~]# vim /var/named/duanjiaxu.com.zone    //进入区域配置文件
----
$TTL 86400
@ SOA duanjiaxu.com. root.duanjiaxu.com. (
2023020210
1H
15M
1W
1D
)
@ NS centos01.duanjiaxu.com.
centos01 A 192.168.100.10
www A 192.168.100.100

[root@centos01 ~]# named-checkzone duanjiaxu.com /var/named/duanjiaxu.com.zone //检查主配置文件是否修改成功
zone duanjiaxu.com/IN: loaded serial 2023022310
OK
----
[root@centos01 ~]# systemctl start named //启动DNS服务
[root@centos01 ~]# systemctl enable named //设置开机自启

2.4、查看DNS服务是否已经启动

1)查看DNS服务是否已经启动

[root@centos01 ~]# netstat -anptu | grep named
tcp 0 0 192.168.100.10:53 0.0.0.0:* LISTEN 42964/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 42964/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 42964/named
tcp6 0 0 ::1:953 :::* LISTEN 42964/named
udp 0 0 192.168.122.1:53 0.0.0.0:* 42964/named
udp 0 0 192.168.100.10:53 0.0.0.0:* 42964/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 42964/named

2)查看是否能够成功解析域名

[root@centos02 ~]# nslookup www.duanjiaxu.com
Server: 192.168.100.10
Address: 192.168.100.10#53

Name: www.duanjiaxu.com
Address: 192.168.100.100

三、在Centos03和Centos04上安装tomcat,设置虚拟主机根目录启动服务

3.1、在Centos03上安装tomcat服务

1)挂载云计算光盘

[root@centos03 ~]# mkdir /www     //创建网站根目录
[root@centos03 ~]# echo "www.duanjiaxu.com" > /www/index.jsp //设置网站主页
[root@centos03 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos03 ~]# ls /mnt/
amoeba-mysql-binary-2.2.0.tar.gz
apache-tomcat-7.0.54.tar.gz //tomcat程序包
awstats-7.3.tar.gz
cacti-0.8.8b.tar.gz
cmake-2.8.6.tar.gz
cronolog-1.6.2.tar.gz
OpenStack.rar
OpenVPN.rar
percona-monitoring-plugins-1.1.4.tar.gz
php-5.3.28.tar.gz
phpMyAdmin-4.2.5-all-languages.tar.gz
postfix+dovecot.rar
puppet-2.7.21.tar.gz
rrdtool-1.4.8.tar.gz
Xshell4_4.0.0.112.exe
ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz

Nginx+Tomcat+Redis实现负载均衡会话保持

2)安装tomcat

[root@centos03 ~]# tar zxf /mnt/apache-tomcat-7.0.54.tar.gz -C /usr/src/      //解压tomcat源代码程序
[root@centos03 ~]# mv /usr/src/apache-tomcat-7.0.54/ /usr/local/tomcat //剪切tomcat源代码程序到/usr/local/tomcat目录
[root@centos03 ~]# vim /usr/local/tomcat/conf/server.xml
---
127 <Context docBase="/www" path="" reloadable="false"/> //加载网站根目录
---
[root@centos03 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@centos03 ~]# netstat -anptu | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 41437/java

Nginx+Tomcat+Redis实现负载均衡会话保持

3.2、在Centos04上安装tomcat服务

1)挂载云计算光盘

[root@centos04 ~]# mkdir /www     //创建网站根目录
[root@centos04 ~]# echo "www.djx.com" > /www/index.jsp //设置网站主页
[root@centos04 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos04 ~]# ls /mnt/
amoeba-mysql-binary-2.2.0.tar.gz
apache-tomcat-7.0.54.tar.gz //tomcat程序包
awstats-7.3.tar.gz
cacti-0.8.8b.tar.gz
cmake-2.8.6.tar.gz
cronolog-1.6.2.tar.gz
OpenStack.rar
OpenVPN.rar
percona-monitoring-plugins-1.1.4.tar.gz
php-5.3.28.tar.gz
phpMyAdmin-4.2.5-all-languages.tar.gz
postfix+dovecot.rar
puppet-2.7.21.tar.gz
rrdtool-1.4.8.tar.gz
Xshell4_4.0.0.112.exe
ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz

Nginx+Tomcat+Redis实现负载均衡会话保持

2)安装tomcat

[root@centos04 ~]# tar zxf /mnt/apache-tomcat-7.0.54.tar.gz -C /usr/src/      //解压tomcat源代码程序
[root@centos04 ~]# mv /usr/src/apache-tomcat-7.0.54/ /usr/local/tomcat //剪切tomcat源代码程序到/usr/local/tomcat目录
[root@centos04 ~]# vim /usr/local/tomcat/conf/server.xml
---
127 <Context docBase="/www" path="" reloadable="false"/> //加载网站根目录
---
[root@centos04 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@centos04 ~]# netstat -anptu | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 41437/java

Nginx+Tomcat+Redis实现负载均衡会话保持

四、客户端使用域名www.duanjiaxu.com访问keepalived的VIP地址实现故障转移

4.1、客户端使用域名访问www.duanjiaxu.com

1)修改第一台nginx服务器主配置文件

[root@centos01 ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak     //备份nginx主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf //进入nginx主配置文件目录
---
1 user nginx;
2 worker_processes 1;
3 pid logs/nginx.pid;
4 events {
5 worker_connections 1024;
6 }
7
8 http {
9 include mime.types;
10 default_type application/octet-stream;
11 sendfile on;
12 keepalive_timeout 65;
13 gzip on;
14 upstream tomcat_server {
15 server 192.168.100.30:8080 weight=1; //虚拟主机
16 server 192.168.100.40:8080 weight=1;
17 }
18 server {
19 listen 80;
20 server_name localhost;
21 charset utf-8;
22 access_log logs/www.duanjiaxu.com.access.log;
23 location / {
24 proxy_pass http://tomcat_server;
25 root html;
26 index index.html index.htm;
27 }
28 }
29 }
---
[root@centos01 ~]# nginx -t //检查主配置文件你修改是否有误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@centos01 ~]# killall nginx //停止nginx服务
[root@centos01 ~]# nginx //启动nginx服务
[root@centos01 ~]# netstat -anptu | grep nginx //监听网卡
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 71534/nginx: master

Nginx+Tomcat+Redis实现负载均衡会话保持

2)修改第二台nginx服务器主配置文件

[root@centos01 ~]# scp /usr/local/nginx/conf/nginx.conf root@192.168.100.20:/usr/local/nginx/conf/      //复制第一台nginx主配置问价你到第二台nginx服务器上
The authenticity of host '192.168.100.20 (192.168.100.20)' can't be established.
ECDSA key fingerprint is SHA256:E+tzb7HjG0mQ7n57HLilVf3yLuOM+2gcT77B4Sb/Oug.
ECDSA key fingerprint is MD5:97:fa:2e:0e:10:55:71:ba:d4:2a:e5:e6:76:e4:3b:4a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.20' (ECDSA) to the list of known hosts.
root@192.168.100.20's password:
nginx.conf
---
[root@centos02 ~]# killall nginx //停止nginx服务
nginx: no process found
[root@centos02 ~]# nginx //启动nginx服务
[root@centos02 ~]# netstat -anptu | grep nginx //监听网卡
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 48804/nginx: master
[root@centos02 ~]# systemctl restart keepalived //重启keepalived服务

4.2、使用win10虚拟机访问www.duanjiaxu.com验证

1)在两台nginx服务器开启查看日志

[root@centos01 ~]# tail -f /usr/local/nginx/logs/www.duanjiaxu.com.access.log
[root@centos02 ~]# tail -f /usr/local/nginx/logs/www.duanjiaxu.com.access.log

2)在win10虚拟机上使用域名www.duanjiaxu.com访问

​第一次访问显示duanjiaxu(访问的是第一台tomcat网站)​Nginx+Tomcat+Redis实现负载均衡会话保持

​第二次访问显示djx(访问的是第二台tomcat网站)​Nginx+Tomcat+Redis实现负载均衡会话保持

3)查看日志

[root@centos01 ~]# tail -f /usr/local/nginx/logs/www.duanjiaxu.com.access.log       //查看日志
192.168.100.102 - - [21/Feb/2023:04:45:40 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:45:40 +0800] "GET /favicon.ico HTTP/1.1" 404 411 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:46:40 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:46:40 +0800] "GET /favicon.ico HTTP/1.1" 404 411 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:46:41 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:46:43 +0800] "GET / HTTP/1.1" 200 4 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"

Nginx+Tomcat+Redis实现负载均衡会话保持

4)模拟第一台nginx服务器故障,自动通过第二台nginx服务器访问tomcat网站

[root@centos01 ~]# killall nginx      //停止nginx服务
[root@centos01 ~]# netstat -anptu | grep nginx //监听网卡

5)使用win10虚拟机访问tomcat网站

​第一次访问显示duanjiaxu(访问的是第一台tomcat网站)​Nginx+Tomcat+Redis实现负载均衡会话保持

​第二次访问显示duanjiaxu(访问的是第二台tomcat网站)​Nginx+Tomcat+Redis实现负载均衡会话保持

6)查看日志

[root@centos02 ~]# tail -f /usr/local/nginx/logs/www.duanjiaxu.com.access.log       //查看日志
192.168.100.102 - - [21/Feb/2023:04:51:14 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:51:14 +0800] "GET /favicon.ico HTTP/1.1" 404 411 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:53:01 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:53:01 +0800] "GET /favicon.ico HTTP/1.1" 404 411 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:53:01 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.100.102 - - [21/Feb/2023:04:53:02 +0800] "GET / HTTP/1.1" 200 4 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"

Nginx+Tomcat+Redis实现负载均衡会话保持

五、Tomcat服务器配置会话保持设置主页

5.1、配置基于IP地址的会话保持

1)第一台tomcat服务器生成会话信息

[root@centos03 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp
---
1 Session ID:<%= session.getId() %><BR>
2 SessionPort:<%= request.getServerPort() %>
3 <% out.println("This tomcat server 192.168.100.30");%>

2)第二台tomcat服务器生成会话信息

[root@centos04 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp
---
1 Session ID:<%= session.getId() %><BR>
2 SessionPort:<%= request.getServerPort() %>
3 <% out.println("This tomcat server 192.168.100.40");%>

3)修改第一台nginx服务器主配置文件

[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf     //进入nginx主配置文件
1 user nginx;
2 worker_processes 1;
3 pid logs/nginx.pid;
4 events {
5 worker_connections 1024;
6 }
7
8 http {
9 include mime.types;
10 default_type application/octet-stream;
11 access_log logs/www.duanjiaxu.com.log;
12 sendfile on;
13 keepalive_timeout 65;
14 gzip on;
15 upstream tomcat_server {
16 ip_hash; //配置基于IP地址保持会话
17 server 192.168.100.30:8080 weight=1 max_fails=1 fail_timeout=10s;
18 server 192.168.100.40:8080 weight=1 max_fails=1 fail_timeout=10s;
19 }
20 server {
21 listen 80;
22 server_name localhost;
23 charset utf-8;
24 access_log logs/www.duanjiaxu.com.access.log;
25
26 location / {
27 proxy_pass http://tomcat_server;
28 root html;
29 index index.html index.htm;
30 }
31 }
32 }
---
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
[root@centos01 ~]# netstat -anptu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 52521/nginx: master

4)修改第二台nginx服务器主配置文件

[root@centos01 ~]# scp /usr/local/nginx/conf/nginx.conf root@192.168.100.20:/usr/local/nginx/conf/nginx.conf      //复制第一台nginx主配置文件到第二台nginx服务器
root@192.168.100.20's password: //输入密码
nginx.conf 100% 759 1.6MB/s 00:00

5)启动tomcat服务

[root@centos03 ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@centos04 ~]# /usr/local/tomcat/bin/startup.sh

6)验证

​第一次访问​Nginx+Tomcat+Redis实现负载均衡会话保持

​第二次访问​Nginx+Tomcat+Redis实现负载均衡会话保持

5.2、配置session会话复制

1)修改tomcat主配置文件

[root@centos03 ~]# vim /usr/local/tomcat/conf/server.xml      //进入第一台tomcat主配置文件
---
104 <Engine name="Catalina" defaultHost="localhost" jvmRoute="Centos03"> //会话复制centos03
113 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> //开启会话复制群集
[root@centos04 ~]# vim /usr/local/tomcat/conf/server.xml //进入第二台tomcat主配置文件
---
104 <Engine name="Catalina" defaultHost="localhost" jvmRoute="Centos04"> //会话复制centos04
113 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> //开启会话复制群集

2)开启会话复制功能

[root@centos03 ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml     //第一台tomcat服务器开启会话复制功能
30 <distributable/>
---
[root@centos04 ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml //第二台tomcat服务器开启会话复制功能
30 <distributable/>

Nginx+Tomcat+Redis实现负载均衡会话保持

3)开启组播通信

[root@centos03 ~]#  route add -net 224.0.0.0 netmask 240.0.0.0 dev ens32
[root@centos03 ~]# /usr/local/tomcat/bin/shutdown.sh //停止tomcat服务
[root@centos03 ~]# /usr/local/tomcat/bin/startup.sh //启动tomcat服务
[root@centos03 ~]# netstat -anptu | grep java //监听网卡
---
[root@centos04 ~]# route add -net 224.0.0.0 netmask 240.0.0.0 dev ens32
[root@centos04 ~]# /usr/local/tomcat/bin/shutdown.sh //停止tomcat服务
[root@centos04 ~]# /usr/local/tomcat/bin/startup.sh //启动tomcat服务
[root@centos03 ~]# netstat -anptu | grep java //监听网卡

Nginx+Tomcat+Redis实现负载均衡会话保持

4)修改nginx主配置文件

[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf     //修改第一台nginx服务器主配置文件
1 user nginx;
2 worker_processes 1;
3 pid logs/nginx.pid;
4 events {
5 worker_connections 1024;
6 }
7
8 http {
9 include mime.types;
10 default_type application/octet-stream;
11 sendfile on;
12 keepalive_timeout 65;
13 gzip on;
14 upstream tomcat_server {
15 server 192.168.100.30:8080 weight=1;
16 server 192.168.100.40:8080 weight=1;
17 }
18 server {
19 listen 80;
20 server_name localhost;
21 charset utf-8;
22 access_log logs/www.duanjiaxu.com.access.log;
23
24 location / {
25 proxy_pass http://tomcat_server;
26 root html;
27 index index.html index.htm;
28 }
29 }
30 }
---
[root@centos02 ~]# vim /usr/local/nginx/conf/nginx.conf //修改第二台nginx服务器主配置文件
1 user nginx;
2 worker_processes 1;
3 pid logs/nginx.pid;
4 events {
5 worker_connections 1024;
6 }
7
8 http {
9 include mime.types;
10 default_type application/octet-stream;
11 sendfile on;
12 keepalive_timeout 65;
13 gzip on;
14 upstream tomcat_server {
15 server 192.168.100.30:8080 weight=1;
16 server 192.168.100.40:8080 weight=1;
17 }
18 server {
19 listen 80;
20 server_name localhost;
21 charset utf-8;
22 access_log logs/www.duanjiaxu.com.access.log;
23
24 location / {
25 proxy_pass http://tomcat_server;
26 root html;
27 index index.html index.htm;
28 }
29 }
30 }

5)验证

​第一次访问​Nginx+Tomcat+Redis实现负载均衡会话保持

​第二次访问​Nginx+Tomcat+Redis实现负载均衡会话保持

六、安装redis服务器,集中化保存客户端请求信息实现会话保持

6.1、安装redis服务器

1)挂载光盘

[root@centos05 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos05 ~]# ls /mnt
redis-3.2.0.gem redis-3.2.9.tar.gz

2)解压安装redis

[root@centos05 ~]# tar zxf /mnt/redis-3.2.9.tar.gz -C /usr/src/     //解压redis程序包
[root@centos05 ~]# mv /usr/src/redis-3.2.9/ /usr/local/redis
[root@centos05 ~]# cd /usr/local/redis/
[root@centos05 redis]# make && make install //编译安装

3)初始化redis服务器

[root@centos05 redis]# cd ./utils/
[root@centos05 utils]# ./install_server.sh

4)修改redis主配置文件

[root@centos05 utils]# /etc/init.d/redis_6379 stop  //停止redis服务
[root@centos05 utils]# vim /etc/redis/6379.conf
---
62 bind 0.0.0.0
[root@centos05 ~]# /etc/init.d/redis_6379 start //启动redis服务
Starting Redis server...
[root@centos05 ~]# netstat -anptu | grep 6379 //监听网卡
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 4468/redis-server 0

6.2、tomcat链接redis服务器

1)上传依赖文件

[root@centos03 ~]# cd /usr/local/tomcat/lib/
[root@centos03 ~]#rz //上传tomcat连接redis依赖tar包

2)修改tomcat配置文件连接redis

[root@centos03 ~]# vim /usr/local/tomcat/conf/context.xml 
<ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.100.50" //redis的IP地址
port="6379" //redis端口
database="0" //数据存储到0库
maxInactiveInterval="60" />
</Context>

3)重新启动tomcat服务

[root@centos03 ~]# /usr/local/tomcat/bin/shutdown.sh      //停止tomcat服务
[root@centos03 ~]# /usr/local/tomcat/bin/startup.s //启动tomcat服务

6.3、tomcat连接redis服务器

1)上传依赖文件

[root@centos04 ~]# cd /usr/local/tomcat/lib/
[root@centos04 ~]#rz //上传tomcat连接redis依赖tar包

2)修改tomcat配置文件连接redis

[root@centos04 ~]# vim /usr/local/tomcat/conf/context.xml 
<ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.100.50" //redis的IP地址
port="6379" //redis端口
database="0" //数据存储到0库
maxInactiveInterval="60" />
</Context>

3)重新启动tomcat服务

[root@centos04 ~]# /usr/local/tomcat/bin/shutdown.sh      //停止tomcat服务
[root@centos04 ~]# /usr/local/tomcat/bin/startup.s //启动tomcat服务

6.4、验证

1)第一次访问Nginx+Tomcat+Redis实现负载均衡会话保持

2)第二次访问

​请求的tomcat服务器变成了192.168.100.40客户端请求信息没有改变,实现会话保持​Nginx+Tomcat+Redis实现负载均衡会话保持


????作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!Nginx+Tomcat+Redis实现负载均衡会话保持