一、JDK1.8 环境搭建

1、上传文件解压

[root@localhost tmp]# tar -zxvf jdk-8u172-linux-x64.tar.gz -C /opt
[root@localhost tmp]# cd /opt
[root@localhost opt]# mv jdk1.8.0_161 jdk1.8

2、检查环境,已经安装删除

[root@localhost mysoft]# ps -aux|grep java
[root@localhost mysoft]# rpm -e --nodeps rpm -qa | grep java

3、配置环境变量

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos
[root@localhost /]# vim /etc/profile
# 文件末尾追加 下面内容 shit+g 跳到文件末尾
# JAVA_HOME
export JAVA_HOME=/opt/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin

#注意添加完成后需要执行命令配置生效
[root@localhost /]# source /etc/profile
CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos

4、检测安装成功

[root@localhost /]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

二、TOMCAT8 安装

1、上传安装包

[root@localhost tmp]# tar -zxvf apache-tomcat-8.5.40.tar.gz -C /opt
[root@localhost opt]# mv apache-tomcat-8.5.40 tomcat8

2、启动服务

[root@localhost bin]# pwd
/opt//tomcat8/bin
[root@localhost bin]# ./startup.sh

3、访问测试

http://127.0.0.1:8080/ 

4、一台服务器配置多个tomcat

需要注意的是多台tomcat配置在同一个机器上避免冲突,需要修改端口

在opt下复制tomcat8改名为tomcat,然后进入到conf目录下修改server.xml文件

vi /opt/tomcat/conf/server.xml

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_03

具体修改内容如下:

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_04

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_05

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_06

同时为了体现出各个Tomcat的区别,顺便修改一下各个tomcat的index.jsp文件用于区分tomcat

vi /opt/tomcat/webapps/ROOT/index.jsp

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_07

三、Nginx的安装

步骤 1: 添加 yum 源

Nginx 不在默认的 yum 源中,可以使用 epel 或者官网的 yum 源,本例使用官网的 yum 源。

$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装完 yum 源之后,可以查看一下。

[root@localhost ~]# sudo yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.aliyun.com
源标识                                                                                  源名称                                                                           状态
base/7/x86_64                                                                           CentOS-7 - Base                                                                  10,070
extras/7/x86_64                                                                         CentOS-7 - Extras                                                                   413
mysql-connectors-community/x86_64                                                       MySQL Connectors Community                                                          175
mysql-tools-community/x86_64                                                            MySQL Tools Community                                                               120
mysql56-community/x86_64                                                                MySQL 5.6 Community Server                                                          564
nginx/x86_64                                                                            nginx repo                                                                          206
updates/7/x86_64                                                                        CentOS-7 - Updates                                                                1,134
repolist: 12,682

可以发现 nginx repo 已经安装到本机了。

步骤 2: 安装

yum 安装 Nginx,非常简单,一条命令。

$ sudo yum install nginx

步骤 3: 配置 Nginx 服务

设置开机启动

$ sudo systemctl enable nginx

启动服务

$ sudo systemctl start nginx

停止服务

$ sudo systemctl restart nginx

重新加载,因为一般重新配置之后,不希望重启服务,这时可以使用重新加载。

$ sudo systemctl reload nginx

步骤 4: 打开防火墙端口

默认 CentOS7 使用的防火墙 firewalld 是关闭 http 服务的(打开 80 端口)。

$ sudo firewall-cmd --zone=public --permanent --add-service=http
success
$ sudo firewall-cmd --reload
success

打开之后,可以查看一下防火墙打开的所有的服务

$ sudo firewall-cmd --list-service
ssh dhcpv6-client http

可以看到,系统已经打开了 http 服务。

Nginx 是一个很方便的反向代理,需要指出的是 CentOS 7 的 SELinux,使用反向代理需要打开网络访问权限。

$ sudo setsebool -P httpd_can_network_connect on 

打开网络权限之后,反向代理可以使用了。Nginx安装文件默认在/etc/nginx目录下,

然后直接访问服务器IP,若出现以下信息则说明到这里我们的Nginx就安装成功了!

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_08

四、配置Nginx完成反向代理、负载均衡

修改Nginx配置文件,注意特别注意:http里面默认的东西需要全部删除

vi nginx.conf

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_09

events {
    # 各工程最大连接数
    worker_connections 1024;
}

http {
    # upstream 各服务器地址以及权重,权重越大代表访问率越大
    upstream alie.com {
        server xxx.xx.xx.66:8081 weight=2;
        server xxx.xx.xx.66:8080 weight=1;
    }

    server {
        # 端口默认80
        # 配置域名,由于没有域名,因此使用localhost
        server_name localhost;

        location / {
            # 反向代理,这里的地址与上面配置的upstream需一致,实现负载均衡
            proxy_pass http://alie.com;
            proxy_redirect default;
        }

    }

}

重启Nginx并进行访问测试

$ sudo systemctl reload nginx

直接访问服务器的80端口,Nginx便会通过反向代理将请求转发至配置好的服务器集群中,通过不断刷新即可发现可以访问不同的tomcat。

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_10

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_11

至此,使用Nginx通过反向代理实现负载均衡就已经完成啦。

五、绑定其他端口

Nginx 默认绑定的端口是 http 协议的默认端口,端口号为:80,如果需要绑定其他端口,需要注意 SELinux 的配置

例如:绑定 8081 端口,但是会发现无法启动,一般的报错如下

YYYY/MM/DD hh:mm:ss [emerg] 46123#0: bind() to 0.0.0.0:8081 failed (13: Permission denied)

此时需要更改 SELinux 的设置。我们使用 SELinux 的管理工具 semanage 进行操作,比较方便。

安装 semanage 使用如下命令

$ sudo yum install policycoreutils-python

然后查看是否有其他协议类型使用了此端口

$ sudo semanage port -l | grep 8081
transproxy_port_t              tcp      8081

返回了结果,表明已经被其他类型占用了,类型为 transproxy_port_t

我们还要查看一下 Nginx 的在 SELinux 中的类型 http_port_t 绑定的端口

$ sudo semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988

第一行 http_port_t 中没有包含 8081 这个端口。因此需要修改 8081 端口到 http_port_t 类型中。

$ sudo semanage port -m -p tcp -t http_port_t 8081

如果没有其他协议类型使用想要绑定的端口,如 8001,则我们只要新增到 SELinux 中即可。

$ sudo semanage port -l | grep 8001
$ sudo semanage port -a -p tcp -t http_port_t 8001

此时,重新启动 Nginx 即可。

六、安装redis

1、下载fedora的epel仓库

yum install epel-release

2、安装redis数据库

yum install redis

3、常见命令介绍

systemctl start redis #启动服务
systemctl stop redis  #停止服务
systemctl restart redis  #重启服务
systemctl status redis   #查看服务状态
systemctl enable redis   #设置开机自启动
ps -ef | grep redis  #查看redis进程
netstat -lnp|grep 6379  #查看端口

在centos7.3默认安装readis后配置文件在/etc/目录下

4.修改redis配置文件

vi /etc/redis.conf

修改配置文件redis.conf 大概在55行左右。修改bind 后面的ip为 0.0.0.0 即可,

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_12

七、配置tomcat session redis同步

通过TomcatClusterRedisSessionManager,这种方式支持redis3.0的集群方式,下载tomcat-cluster-redis-session-manager.zip包,解压放到tomcat/lib下

注意:在github要下载最新版的包

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_13

在tomcat/conf/context.xml这个<Context>标签里面配置,切记tomcat关闭哦

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <Valve className ="tomcat.request.session.redis.SessionHandlerValve"/>
        <Manager className ="tomcat.request.session.redis.SessionManager"/>
   host="127.0.0.1"
   port="6379"
   password=""      如果设置了密码则在这里配置上
   database="0"      redis默认16个database 第一个是0 最后一个是15
   maxInactiveInterval="60" />
</Context>

配置会话到期时间在../conf/web.xml

<session-config>
<session-timeout>60</session-timeout>
</session-config>

启动tomcat服务

[root@localhost bin]# cd /opt/tomcat1/bin/
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /opt/tomcat2/bin/
[root@localhost bin]# ./startup.sh

测试,增加文件

在tomcat/webapps/ROOT新建文件session.jsp

[root@localhost ROOT]# vi /opt/tomcat1/webapps/ROOT/session.jsp

文件内容如下:

<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>tomcat-1</title>
    </head>
    <body>
        <h1><font color="red">Session serviced by tomcat</font></h1>
        <table aligh="center" border="1">
        <tr>
            <td>Session ID</td>
            <td><%=session.getId() %></td>
                <% session.setAttribute("abc","abc");%>
            </tr>
            <tr>
            <td>Created on</td>
            <td><%= session.getCreationTime() %></td>
            </tr>
        </table>
    tomcat-1
    </body>
<html>

Tomcat-1节点与tomcat-2节点配置相同,测试,我们每次强刷他的sessionID都是一致的,所以我们认为他的session会话保持已经完成,你们也可以选择换个客户端的IP地址来测试

 CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_14

 

CentOS 7通过Nginx反向代理实现多Tomcat负载均衡_centos_15