在CentOS上使用Nginx和Tomcat搭建高可用高并发网站

news/2024/5/21 6:25:09/文章来源:https://blog.csdn.net/weixin_33749242/article/details/86135574

目录

  • 目录
  • 前言
  • 创建CentOS虚拟机
  • 安装Nginx
  • 安装Tomcat
  • 安装lvs和keepalived
  • 反向代理
  • 部署网站
    • 搭建数据库
    • 编写网站项目
  • 解决session一致性
  • 注意
  • 参考资料

前言

本篇文章将介绍如何搭建使用Nginx和Tomcat的高可用高并发的网站,我们将会在CentOS系统上搭建这样一个网站后端。这个系统的架构如下:
这里写图片描述

  • 虚拟IP地址:192.168.204.221
  • 主虚拟服务器:192.168.204.121
  • 备虚拟服务器:192.168.204.122
  • Nginx服务器1:192.168.204.123
  • Nginx服务器2:192.168.204.124
  • Tomcat服务器1:192.168.204.123
  • Tomcat服务器2:192.168.204.124

创建CentOS虚拟机

我们这次安装的虚拟机是CentOS迷你版,镜像为:CentOS-6.5-x86_64-minimal.iso,该镜像可以到这里下载:http://vault.centos.org/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso。参考笔者的这一篇文章CentOS搭建云服务平台的前半部分创建4个CentOS虚拟机,用来模仿后台的多个系统,要注意的是这篇文章CentOS搭建云服务平台安装的的桌面版,我们在本文章用的迷你版,但是安装步骤差不多,可以参考b部分的安装操作。关于创建CentOS虚拟机就不用重复介绍了,主要是说明这四个虚拟机的网络配置。当然读者的网段跟读者的可能不一样,所以读者要根据自己的情况配置网络。

node1的网络配置:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.204.121
NETMASK=255.255.255.0
GATEWAY=192.168.204.2

node2的网络配置:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.204.122
NETMASK=255.255.255.0
GATEWAY=192.168.204.2

node3的网络配置:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.204.123
NETMASK=255.255.255.0
GATEWAY=192.168.204.2

node4的网络配置:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.204.124
NETMASK=255.255.255.0
GATEWAY=192.168.204.2

安装Nginx

接下来是安装Nginx服务器,这个也是一个完整的服务器,可以当做普通的网站服务器。但是在这个结构中,我们是使用它来做反向代理,使它代理更多的Tomcat,在起分流的同时,也有高可用的作用,因为就算一个Nginx服务器泵机了,还有其他的运行。我们在node3和node4的虚拟机下安装Nginx。

安装Nginx之前,先要安装依赖库:

yum -y install gcc openssl-devel pcre-devel zlib-devel

如果没有安装wget命令,要先安装这个命令,因为下面会用到这个命令:

yum -y install wget

下载Nginx并放在/opt下:

cd /opt
wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz

解压Nginx压缩包:

tar -zxvf tengine-2.1.0.tar.gz

进入到刚才解压得到的文件夹tengine-2.1.0,开始配置tengine,配置命令如下:

./configure \--prefix=/opt/sxt/soft/tengine-2.1.0/ \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre 

配置完成之后,开始安装,执行安装之后,tengine会安装在/opt/sxt/soft/tengine-2.1.0/目录下:

make && make install

使用vim命令创建一个文件/etc/init.d/nginx用于启动服务的,并添加以下内容:

#!/bin/bash
#
# chkconfig: - 85 15
# description: nginx is a World Wide Web server. It is used to serve
# Source function library.
. /etc/rc.d/init.d/functions# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0nginx="/opt/sxt/soft/tengine-2.1.0/sbin/nginx"
prog=$(basename $nginx)NGINX_CONF_FILE="/opt/sxt/soft/tengine-2.1.0/conf/nginx.conf"#[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginxstart() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval
}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval
}restart() {configtest || return $?stopsleep 1start
}reload() {configtest || return $?echo -n $"Reloading $prog: "
#  -HUP是nginx平滑重启参数  killproc $nginx -HUPRETVAL=$?echo
}force_reload() {restart
}configtest() {$nginx -t -c $NGINX_CONF_FILE
}rh_status() {status $prog
}rh_status_q() {rh_status >/dev/null 2>&1
}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit 2
esac

然后对刚才创建的文件分配权限:

chmod +x /etc/init.d/nginx

添加该文件到系统服务中

chkconfig --add /etc/init.d/nginx

查看是否添加成功:

chkconfig --list nginx

创建一个临时目录:

mkdir -p /var/tmp/nginx/client/

启动Nginx:

service nginx start

关闭防火墙:

service iptables stop

最后输入对应的IP地址,就可以访问Nginx的网站了:

http://192.168.204.123
http://192.168.204.124

安装Tomcat

接下来就是安装我们最终的服务器,Tomcat服务器是我们真正部署网站的服务器,因为我们搭建的是一个Java web网站。所以这一部分介绍如何在CentOS下安装Tomcat。我们在node3和node4的虚拟机下安装Tomcat,理论上面Tomcat不应该是跟Nginx同一个机器的,但是由于笔者的电脑安装不了那么多的虚拟机,就暂且公用一个机器。

首先要先有Java环境,先是下载JDK:

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm

下载完成之后可以进行安装JDK:

rpm -ivh jdk-8u131-linux-x64.rpm

安装完成之后,可以使用以下命令检测安装版本,如果正常输出版本信息,那证明安装成功了:

java -version

/opt中下载Tomcat压缩包:

cd /opt
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.88/bin/apache-tomcat-7.0.88.tar.gz

下载完成之后,要解压Tomcat:

tar -zxvf apache-tomcat-7.0.88.tar.gz

解压之后可以得到一个文件夹apache-tomcat-7.0.88,然后我们可以启动Tomcat:

cd /opt/apache-tomcat-7.0.88/bin
./startup.sh

如果需要外界访问的话,还要关闭防火墙:

service iptables stop

访问网网站:

http://192.168.204.123:8080
http://192.168.204.124:8080

安装lvs和keepalived

我们安装lvs和keepalived是为了保证高可用,首先使用l可以设置虚拟IP,这样我们就可以只需要访问一个虚拟IP就可以访问所有的服务器了。keepalived是为了保证虚拟服务器一直在运行,当主服务器挂掉了,马上就启动备用服务器,以确保网站一直正常运行。以下的操作在node1和node2下操作。

一、配置负载均衡服务器

首先安装lvs和keepalived,命令如下:

yum -y install ipvsadm keepalived

备份keepalived的配置文件,如果以后需要还可以使用:

cp -a /etc/keepalived/keepalived.conf /etc/keepalived/backup.keepalived.conf

在主的负载均衡服务器中编辑配置文件/etc/keepalived/keepalived.conf,清空里面的内容,加入以下的配置信息:

! Configuration File for keepalivedglobal_defs {notification_email {root@localhost   #发送提醒邮件的目标地址可有多个goldbin@126.com}notification_email_from test@localhost   #发送邮件的from地址,可以随意写,邮件地址不存在都无所谓smtp_server 127.0.0.1    #邮件服务的地址,一般写本地smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_instance VI_1 {state MASTER      # MASTER 主 和 BACKUP 从interface eth0    #VIP需要绑定的网卡名称virtual_router_id 51priority 101      #优先级 主的优先级要高advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.204.221/24 dev eth0 label eth0:0    #设置VIP}
}virtual_server 192.168.204.221 80 {    #设置虚拟lvs服务,VIP PORTdelay_loop 6lb_algo rr    #调度算法wrrlb_kind DR    #lvs的模式nat_mask 255.255.255.0persistence_timeout 50   #同一个IP地址在50秒内lvs转发给同一个后端服务器protocol TCPreal_server 192.168.204.123 80 {   #设置真实服务器的心跳机制 RID PORTweight 1      #权重HTTP_GET {    #心跳检测的方式url {path /  #心跳检查的地址status_code 200   #心跳检查返回的状态}connect_timeout 2    #超时时间nb_get_retry 3       #重复检查3次delay_before_retry 1 #每隔1秒钟再次检查}}real_server 192.168.204.124 80 {  #第二个真实服务器设置weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2nb_get_retry 3delay_before_retry 1}}
}

在备的负载均衡服务器中同样以上的配置方式,但需要修改两个地方,一个是state设置为BACKUP,也就是备用的意思。另一个是priority,这个是优先级,需要设置比主的要低。

vrrp_instance VI_1 {state BACKUP      # MASTER 主 和 BACKUP 从interface eth0    #VIP需要绑定的网卡名称virtual_router_id 51priority 50      #优先级 主的优先级要高advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.204.221/24 dev eth0 label eth0:0    #设置VIP}
}

配置好keepalived之后就可以启动它了,命令如下:

service keepalived start

然后使用ipvsadm -L查看映射的IP地址,启动一会再查看,因为可能不会那么快就映射,正常的话应该输出以下信息,主备虚拟服务器都是一样:

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.204.221:http rr persistent 50-> 192.168.204.123:http         Route   1      0          0         
  -> 192.168.204.124:http         Route   1      0          2         

二、配置真实服务器

负载均衡服务器(虚拟服务器)设置好了,然后就可以设置真实服务器(Nginx服务器)了。通过命令输入有点麻烦,我们可以编写一个脚本,让它来帮我们处理这些。node3和node4这个两真实服务器都要配置,创建文件vim realserver.sh并添加以下信息:

#!/bin/bash
#description: Config realserverVIP=192.168.204.221/etc/rc.d/init.d/functionscase "$1" in
start)/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP/sbin/route add -host $VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK";;
stop)/sbin/ifconfig lo:0 down/sbin/route del $VIP >/dev/null 2>&1echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;
*)echo "Usage: $0 {start|stop}"exit 1
esacexit 0

然后执行这个脚本就可以自动配置了,命令如下:

sh realserver.sh start

然后使用ifconfig查看是否有添加以下网络信息:

lo:0      Link encap:Local Loopback  inet addr:192.168.204.221  Mask:255.255.255.255UP LOOPBACK RUNNING  MTU:16436  Metric:1

安装完成之后,可以测试是否可以正常工作,如何还没启动Nginx,首先启动Nginx:

service nginx start

需要关闭防火墙:

service iptables stop

最后我们只需要通过虚拟IP地址就可以访问真实服务器了。

http://192.168.204.221

我们可以手动关闭keepalived,观察是否会自动启动备的服务器。这就是keepalived的作用,当主服务器挂了,会自动启动备虚拟服务器来指向真实服务器。

service keepalived stop

反向代理

我们希望是使用Nginx来代理更多的Tomcat服务器,来对用户进行分流,以应对高并发时对单个服务器的压力。所以我们要设置node3和node4的Nginx。

要配置这个反向代理,只要修改一个配置文件就可以了。如下:

vim /opt/sxt/soft/tengine-2.1.0/conf/nginx.conf

我们主要是添加upstream cluster1这个内容,这就是反向代理的服务器IP地址,同时也可以设置健康检查的配置信息。
然后要在server中添加反向代理,还可以创建对各个代理的服务器进行健康检查location /status。其他的地方不用修改。

upstream cluster1 {# 服务器访问的路径,可以指定多个服务器server 192.168.204.123:8080;server 192.168.204.124:8080;# 健康检查check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD / HTTP/1.0\r\n\r\n";check_http_expect_alive http_2xx http_3xx;
}server {listen       80;server_name  localhost;# 根目录访问路径location / {# 指定反向代理,跟上面的名称一样cluster1proxy_pass http://cluster1;root   html;index  index.html index.htm;}# 健康检查路径location /status {check_status;}
}

修改配置文件之后,需要重启Nginx:

service nginx restart

在访问之前,要确保Tomcat是正常启动了,因为我们是反向代理了Tomcat的服务器,所以需要启动Tomcat服务器。

如果在访问路径的时候加上健康检查的路径/status,就可查看各个服务器的健康问题。

http://192.168.204.123/status
http://192.168.204.124/status

通过访问上面的地址就可以看到类似以下的页面信息:
这里写图片描述

最后我们在正常访问Nginx服务器的时候,就会访问都Tomcat服务器了。而且Nginx是访问到多个Tomcat。
比如笔者只是访问其中的一个Nginx,如下:

http://192.168.204.123

这里写图片描述

这里写图片描述

上面是访问Nginx服务器的IP地址的,我们在安装lvs和keepalived这部分设置了虚拟IP,所以我们可以直接访问这个虚拟IP就可以了。最终网站只需要访问一个IP地址就可以了:

http://192.168.204.221/

这里写图片描述

部署网站

经过上面的搭建,已经组建好一个高可用高并发的的服务器,现在我们只要把Java web项目部署到Tomcat服务器就可以。接下来我们编写一个简单的实现登录的网站。

搭建数据库

我们使用的是MySQL数据库,所以我们需要先安装MySQL数据库,然后对它进行一些配置就可以使用。现在我们在node4服务器上操作。

我们可以使用以下命令查看MySQL是否安装了:

rpm -qa | grep mysql

应该会输出一下日志:

[root@localhost ~]# rpm -qa | grep mysql
mysql-libs-5.1.71-1.el6.x86_64

然后我们可以先移除这个MySQL,重新安装一个:

yum -y remove mysql-libs-5.1.71-1.el6.x86_64

移除之前的MySQL之后,可以重新安装MySQL:

yum -y install mysql-server mysql mysql-devel

最后在查看安装情况:

rpm -qa | grep mysql

正常的应该会输出以下信息:

mysql-5.1.73-8.el6_8.x86_64
mysql-libs-5.1.73-8.el6_8.x86_64
mysql-server-5.1.73-8.el6_8.x86_64
mysql-devel-5.1.73-8.el6_8.x86_64

如果已经安装了MySQL,那么我们可以直接启动MySQL:

service mysqld start

然后我们可以把MySQL服务添加到开机自动启,这样就不用每次都启动了。

chkconfig mysqld on

我们可以使用以下的命令查看是否成功添加到开机服务中了。

chkconfig --list | grep mysqld

设置MySQL数据库的密码:

mysqladmin -u root password 'root'

登录数据库,输入该命令之后还有输入数据库的密码,这个密码就是上面设置的root

mysql -u root -p

因为我们的网站是在其他的服务器,当连接这个数据库的话,就是远程连接数据库了,所以要设置数据库支持远程连接,在登录数据库之后输入以下命令:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

配置好数据库之后,就可以创建数据表了,我们在MySQL自带的test数据库上面创建一张user表。

首先我们可以使用命令查看当前有那些数据库了:

mysql> SHOW DATABASES;

以下是输出信息,可以看到有3个数据库,我们使用test数据库作为我们的项目数据库:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.01 sec)

然后我们使用test数据库,开始创建数据表。

mysql> USE test

然后在这个数据库中创建一个user表,这个表只要两个字段。

mysql> CREATE TABLE user(`number` VARCHAR(100) NOT NULL, `password` VARCHAR(100) NOT NULL);

然后在user表中添加一条数据,方便之后的登录。

mysql> INSERT INTO user(number, password) VALUES('hello', 'world');

然后我们查询看看有没有添加成功数据:

mysql> select * from user;

可以看到已经成功添加数据了:

+--------+----------+
| number | password |
+--------+----------+
| hello  | world    |
+--------+----------+
1 row in set (0.00 sec)

编写网站项目

我们这项目比较简单,只有登录功能。虽然是简单,但是完全可以测试整个网站的运行情况了。我们主要的创建3个页面和一个Servlet,具体代码如下:

index.jsp代码,主要完成登录页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title>
</head>
<body>
<form action="/Test2/login" method="post">账号:<input type="text" name="number"><br>密码:<input type="password" name="password"><br><button type="submit">登录</button>
</form>
</body>
</html>

success.jsp代码,主要是完成登录成功页面,可以在session中获取登录成功的用户名:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录成功</title>
</head>
<body>
<h1>登录成功,欢迎<% out.print(session.getAttribute("number"));%></h1>
</body>
</html>

fail.jsp代码,登录失败页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录失败</title>
</head>
<body>
<h1>登录失败</h1>
</body>
</html>

LoginServlet.java代码,登录验证Servlet:

package com.test.test;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;@WebServlet(name = "LoginServlet",urlPatterns = {"/login"})
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ConnectionDBUtil dbUtil = new ConnectionDBUtil();String number = request.getParameter("number");String password = request.getParameter("password");String sql = "SELECT  * FROM user WHERE number = ? AND password = ?";Boolean result = false;try {PreparedStatement ps = dbUtil.getConn().prepareStatement(sql);ps.setString(1, number);ps.setString(2, password);ResultSet rs = ps.executeQuery();while (rs.next()) {result = true;}ps.close();} catch (SQLException e) {e.printStackTrace();}dbUtil.closeConn();if (result){HttpSession session = request.getSession();session.setAttribute("number", number);response.sendRedirect("/Test2/success.jsp");}else {response.sendRedirect("/Test2/fail.jsp");}}
}

ConnectionDBUtil.jsp代码,主要的用于连接数据库的工具,别忘了还要导入连接数据库的jar包mysql-connector-java-5.1.46-bin.jar。我们连接数据库的node4的数据库,所以IP地址是192.168.204.124

package com.test.test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class ConnectionDBUtil {private Connection conn= null;private static final String DBURL = "jdbc:mysql://192.168.204.124:3306/test";private static final String DBUSER = "root";private static final String DBPASSWD = "root";public ConnectionDBUtil(){try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(DBURL, DBUSER,  DBPASSWD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}public Connection getConn(){return conn;}public void closeConn(){if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}

然后使用这些代码在开发环境上编译,得到一个war的文件或者是文件夹,然后我们把这个文件或者文件夹放在node3和node4的Tomcat服务器上,目录为/opt/apache-tomcat-7.0.88/webapps。最后可以在浏览器上访问我们的虚拟IP地址加上项目名称就可以访问到这个网站了。如下:

http://192.168.204.221/Test2/

这个是登录的页面:
这里写图片描述

这个是登录成功的页面,在这里就可以看到登录成功的用户名:
这里写图片描述

这个是登录失败的页面:
这里写图片描述

这个就是我们的网站项目,虽然是简单,但是我们已经让这个项目在我们的高可用高并发的服务器上正常运行工作了。这个已经证明我们的服务器已经可以正常工作了。

解决session一致性

现在有一个问题,就是我们的Tomcat服务器有好几个,而且都不在同一个机器上,那问题就来了。我们使用session保存了用户名,但是当我们在次访问的时候,也行不是原来的那个Tomcat服务器,那之前保存的session就不存在了,我们可以验证看看。

这个是我们的登录成功的界面,我们在登录成功之后,会把用户名保存的session中。然后在这个页面就可以查看到,但是我们通过不断刷新,可以看到用户名有时候会为空,这就是去到了其他的Tomcat服务器,也就没有了之前保存的session。

在当前登录成功的服务器上:
这里写图片描述

已经去到其他服务器了:
这里写图片描述

那么我们现在就来解决这个session一致性问题。我们是使用Redis来解决session一致性的。以下操作在node3和node4下操作。

下载session一致性的jar包,把里面的三个jar包复制到Tomcat的lib目录下,路径如下:

cd /opt/apache-tomcat-7.0.88/lib/

然后编辑server.xml配置文件,node3和node4都要操作:

vim /opt/apache-tomcat-7.0.61/conf/server.xml

第一个Tomcat的上找到Engine,然后在上面加上jvmRoute="tomcat1",同样在第二个Tomcat加上jvmRoute="tomcat2",如下:

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"><!--For clustering, please take a look at documentation at:/docs/cluster-howto.html  (simple how to)/docs/config/cluster.html (reference documentation) -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"><!--For clustering, please take a look at documentation at:/docs/cluster-howto.html  (simple how to)/docs/config/cluster.html (reference documentation) -->

然后编辑context.xml配置文件,node3和node4都要操作:

vim /opt/apache-tomcat-7.0.61/conf/context.xml

<Context></Context>之间添加如下内容,其中host是Redis所在的服务器,笔者在node3上安装Redis,所以这里是node3的IP地址。

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /><Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"host="192.168.204.123"port="6379"database="0"maxInactiveInterval="60" />

上面说到Redis缓存数据库,所以我们还有安装Redis缓存数据库。我们在node3上安装Redis缓存数据库。

cd /opt/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvf redis-4.0.2.tar.gz
cd redis-4.0.2
make
make install

安装完成之后,我们编辑vim /opt/redis-4.0.2/redis.conf这个配置文件,修改里面的bind地址,把地址改成node3的IP地址。如下:

# bind 127.0.0.1
bind 192.168.204.123

然后就可以启动Redis了,注意这里要回车两次。

/opt/redis-4.0.2/src/redis-server /opt/redis-4.0.2/redis.conf &

启动的界面如下:

[root@node3 src]# /opt/redis-4.0.2/src/redis-server /opt/redis-4.0.2/redis.conf &
[2] 4809
[1]   Done                    /opt/redis-4.0.2/src/redis-server redis.conf  (wd: /opt/redis-4.0.2)
(wd now: /opt/redis-4.0.2/src)
[root@node3 src]# 4809:C 22 Jun 16:21:13.162 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4809:C 22 Jun 16:21:13.162 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=4809, just started
4809:C 22 Jun 16:21:13.162 # Configuration loaded
4809:M 22 Jun 16:21:13.165 * Increased maximum number of open files to 10032 (it was originally set to 1024)._._                                                  _.-``__ ''-._                                             _.-``    `.  `_.  ''-._           Redis 4.0.2 (00000000/0) 64 bit.-`` .-```.  ```\/    _.,_ ''-._                                   (    '      ,       .-`  | `,    )     Running in standalone mode|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379|    `-._   `._    /     _.-'    |     PID: 4809`-._    `-._  `-./  _.-'    _.-'                                   |`-._`-._    `-.__.-'    _.-'_.-'|                                  |    `-._`-._        _.-'_.-'    |           http://redis.io        `-._    `-._`-.__.-'_.-'    _.-'                                   |`-._`-._    `-.__.-'    _.-'_.-'|                                  |    `-._`-._        _.-'_.-'    |                                  `-._    `-._`-.__.-'_.-'    _.-'                                   `-._    `-.__.-'    _.-'                                       `-._        _.-'                                           `-.__.-'                                               4809:M 22 Jun 16:21:13.171 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4809:M 22 Jun 16:21:13.171 # Server initialized

最后启动Tomcat服务器就可以了,如果之前已经启动过了,需要关闭Tomcat再重新启动,node3和node4都需要。

启动之后,再重新登录,在登录成功页面无论我们如何刷新都会显示用户名,这是因为我们已经保持了每一个Tomcat的session都是一一致的。
这里写图片描述

本章是介绍网站的逻辑部分的分布式部署,要应对真实的高并发还有对数据库做分布式部署,以应对庞大的数据查询。在下一章的《CentOS下安装和使用Mycat实现分布式数据库》介绍如何在CentOS上部署分布式数据库。

注意

这里要说一下的是,我们为了方便外界可以访问到服务器的端口,我们把防火墙关闭了,但是这种是非常不安全的。所以我们可以单独开放某一端口,比如我们要开放MySQL数据库的3306端口号,操作如下:

编辑防火墙配置文件:

vim /etc/sysconfig/iptables

添加以下信息:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

如下图所示:
这里写图片描述

保存退出,最后重启防火墙:

service iptables restart

开放其他端口也是同样的操作。

参考资料

  1. https://blog.csdn.net/u010392801/article/details/52085394
  2. https://blog.csdn.net/u012852986/article/details/52412174
  3. https://blog.csdn.net/love_zngy/article/details/78581995
  4. https://www.cnblogs.com/renzhicai/p/7773080.html
  5. https://blog.csdn.net/ymf827311945/article/details/76461115

原文地址:https://blog.csdn.net/qq_33200967/article/details/80707616

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_780677.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大话设计模式-享元模式的实践-网站模板享元

UML 用户类 用于网站的客户账号 是网站类的外部状态 /*** ClassName: User* Author: Leo* Description: 用户类 用于网站的客户账号 是网站类的外部状态* Date: 2019/5/28 9:58*/ public class User {private String name;public User(String name) {this.name name;}public …

只有登陆注册页需要https加密吗?N网站有必要全站加密吗?

很多人都觉得&#xff0c;HTTPS 可以保护用户的密码等登陆信息&#xff0c;那么其他时候就不需要了。但火狐Firefox浏览器插件Firesheep&#xff0c;证明了这种想法是错的。我们可以看到&#xff0c;其实在一些社交平台&#xff0c;劫持其他人的session是非常容易的。我们以常见…

Nginx-Docker下安装Nginx并部署静态网站

一、Docker安装Nginx教程 Docker安装Nginx教程 二、Nginx部署静态网站 1. 把静态文件放到挂载的宿主机目录内&#xff1a; Docker nginx 容器内 /usr/share/nginx/html/ 挂载到了宿主机 /root/nginx/www/camelia是我这个静态网站的项目文件夹&#xff0c;里面包含css/js/ima…

爬虫 -----爬取某个网站信息

一.Java爬取某个网站的信息 1.项目gitee地址&#xff1a;https://gitee.com/Javaxieyue/reptiles.git 2.爬取网站的地址&#xff1a; http://www.mca.gov.cn//article/sj/xzqh/2020/2020/2020092500801.html 3.要求&#xff1a;需要对html页面有点了解&#xff0c;以便对爬…

Sharepoint 创建个人网站时出现错误。有关详细信息,请与网站管理员联系

SharePoint Server 2007 / MOSS 2007 中启用了个人网站功能&#xff0c;并且配置了正确的SSP&#xff0c;可是用户在访问我的网站时总是提示&#xff1a;创建个人网站时出现错误。有关详细信息&#xff0c;请与网站管理员联系。 MOSS服务器场 具体环境如下&#xff1a; AD服务…

tomcat出现404的原因_Seo优化,404页面优化,这样做有利于网站页面优化-深圳长诚网络...

404页面就是在用户访问你的网站的某个地址的时候&#xff0c;如果这个地址不存在或者内容删除后&#xff0c;展现给用户看的页面。大多数站长在做站内优化时都会有404设置这么一项工作。如如果没有设置404页面&#xff0c;那么用户或的页面就是一个错误的页面&#xff0c;则搜索…

谈谈网站静态化

写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通过一个项目,谈谈网站静态化后的架构设计方案,同时和大家探讨一下,在开源产品大行其道,言架构必称MemberCache, Nginx,的时…

非常推荐:搭建一个大型网站架构的实验环境(FreeBsd+Nginx+Squid+Apache)

非常具有教育性质的好贴&#xff0c;决定本周在家按照教程学习。

大型网站架构(转帖)--详细介绍阶段性需求和应对方法

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如 LiveJournal的、 ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什…

同服务器的网站被K该怎么办,网站首页被K应该如何处理?

原标题&#xff1a;网站首页被K应该如何处理&#xff1f;上个月小编手里有几个网站首页被K&#xff0c;整站的收录和索引都正常&#xff0c;内页的排名也还在&#xff0c;唯独首页被K了&#xff0c;找了很久也没找出原因所在。网站的服务器、站内代码、文章质量、友情链接、关键…

55个神奇的网站布局

我们总是在摸索着网站布局的效果展示&#xff0c;总是花费不少心思在考虑用户体验的极致所在&#xff0c;在这里我在一个国外的网站看到以下网站布局方式&#xff0c;实为好赞&#xff0c;所以贴下来分享&#xff0c;并从中我们可以去为移动终端这块做最新的参考与演化方式。。…

小网站架构优化-提升抗并发能力:子应用程序分离方案

前言&#xff1a;标题为啥要加个“小”&#xff0c;只因为上一篇文章“小网站架构优化&#xff1a;从100并发抗到4000并发”&#xff0c;带了个“小”字&#xff0c;所以这篇也顺流加个“小”了。大意“小”是特指秋色园&#xff08;流量小&#xff0c;服务器配置低&#xff09…

打造成功电子商务网站的六大设计准则

我能信任你吗&#xff1f;这是所有网购用户忐忑不安的下订单之前都会在心里向网站问的一个问题。 你不能因此指责他们&#xff0c;因为这个时候他们正将自己的信用卡信息提交到你的网站上&#xff0c;而这又仅仅是因为他们认为你会将商品寄送给他们。 关于电子商务网页设计一直…

使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...

在线演示 本地下载 如果你曾经开发过内容聚合类网站的话&#xff0c;使用程序动态整合来自不同页面或者网站内容的功能肯定对于你来说非常熟悉。通常使用java的话&#xff0c;我们都会使用到一些HTML的解析&#xff0c;例如&#xff0c;httpparser&#xff0c;最早gbin1.com的…

初步试用Squid的替代产品──Varnish Cache网站加速器

[2007-8-29 18:45 | by 张宴 ] Varnish是一款高性能的开源HTTP加速器&#xff0c;挪威最大的在线报纸 Verdens Gang (vg.no) 使用3台Varnish代替了原来的12台squid&#xff0c;性能比以前更好。Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一&#xff0c;他认为现在…

用Varnish代替Squid做网站缓存加速器的详细解决方案

[文章作者&#xff1a;张宴 本文版本&#xff1a;v1.2 最后修改&#xff1a; 2008.01.02 转载请注明出处&#xff1a; http://blog.s135.com]我曾经写过一篇文章──《 初步试用Squid的替代产品──Varnish Cache网站加速器》&#xff0c;但当时仅仅是用着玩&#xff0c;没做深…

基于SSM的在线视频教育网站系统【附源码】

项目概述 基于SSM的在线视频教育网站系统设计与实现.系统分为管理员与普通用户两种角色。非maven项目。 1)登录模块 在进入系统首页后&#xff0c;首先看到的是登录界面&#xff0c;该界面会提供注册用户的功能&#xff0c;在登陆界面&#xff0c;输入用户名之后&#xff0c;首…

15+ 易响应的CSS框架快速开启你的敏捷网站项目

由 于移动互联用户的快速增加&#xff0c;现在数量已经超出10亿&#xff0c;几乎可以肯定的是你的网站每天都会有移动用户访问。如果你组织计划创建一个对移动用户友好的浏览体 验&#xff0c;有多个方面需要考虑。响应快速的网站设计似乎现在很流行&#xff0c;但是仅依赖你的…

Fixed Responsive Nav – 响应式的单页网站导航插件

Fixed Responsive Nav 是一个响应式的&#xff0c;固定的&#xff0c;触摸友好的单页网站导航插件&#xff0c;响应式导航&#xff0c;流畅的动画滚动。该项目采用渐进增强构建&#xff0c;支持工作在 IE6 及以上版本的浏览器。 你可以给导航打开的内容添加一个遮罩&#xff0c…

中介网站 自己接活_做网站赚钱项目之本地租房网站项目可行性和盈利模式

老蒋经常看到一些群里网友在交流哪些网站能够赚钱&#xff0c;也看到很多网赚类社群、网站关注度相对比普通网站高的&#xff0c;毕竟任何兴趣爱好都不如学习到如何赚钱有兴趣。其实&#xff0c;不论是个人博客网站&#xff0c;还是企业商业网站&#xff0c;只要项目没有太大的…