redis+tomcat9+nginx实现多台服务器负载均衡
本次实验环境
所需要的环境以及软件
配置环境 | Tomcat所需要的jar包 |
---|---|
Windows Server2019 Datacenter | tomcat-redis-session-manager-master-2.0.0.jar |
Tomcat9 | jedis-2.7.3.jar |
Redis3.2 | commons-pool2-2.3.jar |
nginx1.17.7 | 这里提供基于不同版本Tomcat编译后的jar包的下载 |
JDK1.8 | 链接:https://pan.baidu.com/s/1PjPZWIiz6mnAOxPiHWhhQw 提取码:o2e8 |
服务器配置
服务器(关闭三台服务器防火墙) | 主从关系 | 所需要的配置环境 |
---|---|---|
192.168.100.211 | 主 | Redis(master)+Nginx |
192.168.100.210 | 从 | Redis+Tomcat9+JDK1.8 |
192.168.100.209 | 从 | Redis+Tomcat9+JDK1.8 |
Redis配置
安装Redis
windows版本需要从github下载
下载地址: https://github.com/microsoftarchive/redis/releases
将下载好的Redis压缩包分别解压到三台服务器下
配置Redis.windows.conf
主服务器(192.168.100.211)配置Redis
##最基础配置
port 6379(Redis默认端口,配置Redis端口,每台服务器Redis端口不能相同)
bind 127.0.0.1 192.168.100.211(主服务器ip地址)
protected-mode no(默认为yes需要修改为no)
----------------
##可额外添加的配置
requirepass foobared 设置主服务器密码
maxclients 10000 默认最大链接数
maxmemory <bytes> 最大内存容量(字节)
从服务器(192.168.100.209、192.168.100.210)配置Redis
注意从服务器有多少台就要配置多少次,操作步骤每台服务器都相同(以下两台服务器都配置都举例出来,以作对比)
##192.168.100.209
##最基础配置
port 6380(配置Redis端口,每台服务器Redis端口不能相同)
bind 127.0.0.1 192.168.100.209
slaveof 192.168.100.211 6379(绑定主服务器)
protected-mode no (默认为yes需要修改为no)
slave-read-only no(原先是yes必须要修改为no不然部署项目,节点只有读的权限没有写的权限)
----------------
##可额外添加配置
masterauth <master-password>(如果主服务器设置了密码,那么从服务器要配置主服务器密码,否则链接不上)
##192.168.100.210
##最基础配置
port 6381(配置Redis端口,每台服务器Redis端口不能相同)
bind 127.0.0.1 192.168.100.210
slaveof 192.168.100.211 6379(绑定主服务器)
protected-mode no (默认为yes需要修改为no)
slave-read-only no(原先是yes必须要修改为no不然部署项目,节点只有读的权限没有写的权限)
----------------
##可额外添加配置
masterauth <master-password>(如果主服务器设置了密码,那么从服务器要配置主服务器密码,否则链接不上)
至此主从服务器所有配置文件都已配置完毕
编写Redis启动脚本
如果直接点击redis-server.exe则无法他是无法直接运行我们编写好的配置文件的,所以我们需要编写启动脚本来运行Redis
每台服务器均做相同操作,这里以主服务器192.168.100.211为例
在配置文件目录下,创建Startup.bat文件,代码如下
title Redis-x64-3.2.100(文件夹名字)
redis-server.exe redis.windows.conf
在配置文件目录的上一级目录,创建一个Start6379.bat(命名随便起),代码如下
cd Redis-x64-3.2.100(文件夹名字)
startup.bat
运行
依次运行主服务器以及各从服务器目录下的Start6379.bat……若出现以下则表示运行成功
主服务器
从服务器
配置从服务器Tomcat
添加所需文件
将下载好的文件,选择对应的Tomcat版本,将lib目录下的三个jar包拷贝至Tomcat安装目录下的lib文件下
有多少台Tomcat服务器就重复几次操作
编写Tomcat配置文件
打开Tomcat安装目录下的conf/context.xml文件,在<context></context>
下添加如下配置
##192.168.100.209
----------------
<Valve className="com.naritech.nicole.gump.RedisSessionHandlerValve" />
<Manager className="com.naritech.nicole.gump.RedisSessionManager"
host="192.168.100.209"(从服务器IP)
port="6380"(从服务器Redis端口)
database="0"
maxInactiveInterval="60"
/>
##192.168.100.210
----------------
<Valve className="com.naritech.nicole.gump.RedisSessionHandlerValve" />
<Manager className="com.naritech.nicole.gump.RedisSessionManager"
host="192.168.100.210"(从服务器IP)
port="6381"(从服务器Redis端口)
database="0"
maxInactiveInterval="60"
/>
运行
添加完配置文件后我们重新启动Tomcat检查各台从服务器是否能访问到Tomcat默认页面
配置主服务器Nginx
#允许生成的进程数,一般设置为当前机器总Cpu核心数的1-2倍
worker_processes 2;
#添加配置
upstream mycluster{
#集群有几台服务器就配置几台,weight表示权重,权重越大访问几率越大
#这里添加已经配置启动好的两台tomcat服务器
#down表示当前的server暂时不参与负载
#backup其他设备都宕机或者繁忙的时候,就使用backup标注的备用机器
server 192.168.100.209:8080 weight=1;
server 192.168.100.210:8080 weight=2;
ip_hash;
}
在server里添加如下配置
----------------
server {
#可以修改listen为8080
listen 80;
#可以为域名
server_name 192.168.100.211;
#charset koi8-r;
#access_log logs/host.access.log main;
#localhost删除掉原有的root然后添加以下东西
location / {
root html;
#默认访问的首页
index index.html index.htm;
proxy_redirect off;
# 请求头中Host信息
proxy_set_header Host $host;
# 真实的客户端IP
proxy_set_header X-Real-IP $remote_addr;
# 代理路由信息,此处取IP有安全隐患
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mycluster; #反向代理地址
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html://mycluster;
}
}
配置文件总体如下
#允许生成的进程数,一般设置为当前机器总Cpu核心数的1-2倍
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#添加配置
upstream mycluster{
#集群有几台服务器就配置几台,weight表示权重,权重越大访问几率越大
#这里添加已经配置启动好的两台tomcat服务器
#down表示当前的server暂时不参与负载
#backup其他设备都宕机或者繁忙的时候,就使用backup标注的备用机器
server 192.168.100.209:8080 weight=1;
server 192.168.100.210:8080 weight=2;
ip_hash;
}
server {
#修改listen为8080
listen 80;
server_name 192.168.100.211;
#localhost删除掉原有的root然后添加以下东西
location / {
root html;
#默认访问的首页
index index.html index.htm;
proxy_redirect off;
# 请求头中Host信息
proxy_set_header Host $host;
# 真实的客户端IP
proxy_set_header X-Real-IP $remote_addr;
# 代理路由信息,此处取IP有安全隐患
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mycluster; #反向代理地址
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html://mycluster;
}
}
}
部署运行
1、将项目解压至每个从服务器Tomcat安装目录下的\webapps\ROOT目录下
2、依次按顺序运行:主服务器Redis>每个从服务器Redis>每个从服务器Tomcat>主服务器Nginx
3、访问localhost,项目运行成功