【岁月留声(Linux)】基于Ubuntu搭建Apache + Tomcat+ Memcached集群

这又是一篇来自2015年的文章,当时因为要解决一个项目Session共享问题,需要搭建与生产环境一样的环境进行验证。同时,根据领导要求需要将生产环境做成水平扩展集群,因此也在本环境中进行验证。

1. 安装Ubuntu

请添加图片描述

其实ubuntu的安装没有什么好说的(虽然是CLI安装,但只要按照指示一步一步安装问题不大)。另外,虚拟机使用的是VirtualBox,用了“仅主机(Host-Only)适配器”的网络模式,所以在安装过程中需要配置子网ip,其他的没有什么好说的。

在这里插入图片描述

因为想安装一台“干净”的机器,在这个环节一个都没选直接下一步。其实真的需要时通过apt-get获取即可。10分钟后一台ubuntu裸机就可以使用了。

在这里插入图片描述

2. Ubuntu配置

2.1 配置root账号对应密码

为了方便操作采用root登录,先通过 sudo passwd root 来设置root对应的密码

在这里插入图片描述

2.2 设置静态网络地址

在root账号下再试试当前网络,ping了一下百度发现ping不通,但ping本机没有问题,这是因为我使用了Host-Only的方式设定了虚拟机的网络。

在这里插入图片描述

既然这样先修改**/etc/network/interfaces**让其自动获取ip,然后将虚拟机切换成NAT网络,让Ubuntu连上外网下载些软件再说。

在这里插入图片描述

iface eth0 inet dhcp行前方的“#”去掉,并且将下方三行给注释掉即可。接着就将虚拟机网络改成NAT模式

在这里插入图片描述

系统重启后再ping一下百度,可以ping通了。

在这里插入图片描述

吐槽:这里就能够看到当时自己的稚嫩的地方,我如果在安装之前就已经设置好虚拟机的NAT网络,这一步就不用做了。又或者在宿主机上增加一个虚拟网卡作为转发网关,那么Host-Only的网络也是可以访问外网的…这里还以为自己解决了什么难题,仔仔细细地写下来,现在感觉就很羞耻ε=(´ο`*)))唉

3 安装所需软件

既然能够连接互联网,那么通过apt-get来下载所需软件吧。

3.1 Apache2

通过apt-get install apahce2直接下载安装

在这里插入图片描述

3.2 Memcached

通过apt-get install memcached下载安装memcached

在这里插入图片描述

3.3 Unzip

为了后面方便也安装一个Unzip用来对zip文件进行解压,apt-get install unzip

在这里插入图片描述

3.4 PSCP

Windows与Linux之间文件传输直接从网上下载了一个pscp工具通过命令行执行数据传输。将pscp.exe文件放在C:/windows/system32文件夹里面就可以在cmd里面使用了。

在这里插入图片描述

3.5 JDK1.6

在Oracle官网下载1.6版本的JDK,先通过chmod修改操作权限后,再执行bin文件的安装

在这里插入图片描述

安装完成后在**/etc/profile**配置自己jdk的环境变量。

在这里插入图片描述

3.6 Tomcat

Tomcat解压后先配置一个来试运行项目,待运行成功后再将其复制两个出来做成三Tomcat的水平集群即可。

4. Apache配置

使用vim编辑apache2.conf文件,vim /etc/apache2/apache2.conf

在这里插入图片描述

将ServerRoot解封,并添加ServerName作为访问路径的前缀,最终是通过域名来访问的。

在这里插入图片描述

将Ubuntu中提供的端口关闭,这个我们不需要。

在这里插入图片描述

设置文件目录访问路径,以后测试用到的web工程都放在**/home/timss/tomcat/tomcat_webapps/ROOT/memcacheTest**文件夹里面,当然这个文件夹现在没有,稍后将会添加。

将需要使用到的mod开启,这个需要在命令行中启动

a2enmod slotmem_shm

a2enmod slotmem_plain

a2enmod lbmethod_bytraffic

a2enmod proxy

a2enmod proxy_balancer

a2enmod proxy_http

a2enmod proxy_ajp

mod启动完成后可以进去/etc/apache2/mods-enabled中确认一下看mod是否都开启了

在这里插入图片描述

最后在sites-available 建立配置文件timss.conf

在这里插入图片描述

Listen:是监听那个端口

ServerName:是网络主机的名称

ServerAlias:是网络别名,这个是以后访问的域名后缀

DocumentRoot:是访问文件目录

DirectoryIndex:配置首页

除此之外,其他的都是负载均衡相关配置。由于Apache使用的是粘性Session复制方法,按照官方的说法Apahce会将Session指定到一台机器上面进行保存,但是会存在Tomcat宕机后Session丢失的风险。而现在我们将这个Session指定到Memcached里保存基本上规避了Session丢失的风险了。此外,以后若要添加多一台服务器,直接可以在这里添加负载成员(BalancerMember)就可以,其他配置可以不用动了。

最后,还需要为Apache创建一个sites-enabled的超链接,因为Apache启动时将读取sites-enabled里面的超链接,之后再通过超链接访问sites-available中指定文件,所以这里先加一个超链接。

在这里插入图片描述

至此Apache已全部配置完毕。

5. Memcached配置

使用vim /etc/memcached.conf对配置文件进行修改

在这里插入图片描述

这里只需修改最大内存数量即可。

6. Tomcat配置

将集群配置需要的jar包上传到指定位置

在这里插入图片描述

在${TOMCAT_HOME}目录下创建一个tomcat_webapps文件夹,并且在里面也创建一个ROOT文件夹

在这里插入图片描述

进入${TOMCAT_HOME}/tomcat7_8080/bin目录中并用./startup.sh启动tomcat,启动完成后通过本地ip访问,看是否成功

在这里插入图片描述

验证成功后先关掉tomcat,进入${TOMCAT_HOME}/conf目录下配置context.xml文件

在这里插入图片描述

由于要做Session复制所以要在Context标签中加上distributable属性,如果这里不加也可以在项目的web.xml里面加上< distributable/>标签的。接下来还要写上这个

在这里插入图片描述

这个是Memcached的Tomcat配置信息,而这里面又分两种配置,一个是基于kryo的序列化,而另外一个是基于javolution的序列化。经过测试两种方式都是可以执行的,但是kryo效率明显比javolution的要高,所以这里就选择用kryo的配置。

其中memcachedNodes里面配置的是memcached的ip和端口,由于memcached支持分布式部署的,所以这里可以填写多个,用逗号隔开就可以了。若部署多个的话在这里还要加多一个属性failoverNodes=“n1”,让Tomcat知道应该将缓存的内容不放在那个memcached服务器。

之后就轮到server.xml配置,先在Engine标签中添加一个jvmRoute的属性,里面指定的是Apache的节点名称。

在这里插入图片描述

然后将Cluster的标签解开

在这里插入图片描述

由于是测试用的,所以集群就用Tomcat提供的最简单的就可以了。下面找到Host标签并在里面配置alias和context

在这里插入图片描述

Tomcat启动的时候不直接读取自身的webapps文件夹中的内容,而是读${TOMCAT_HOME}/tomcat_webapps/ROOT里面的,这样就可以多个Tomcat读取同一份文件,也只需要发布一次即可。

Tomcat配置完之后先别急着启动,先配置一下网络别名vim /etc/hosts

在这里插入图片描述

添加Apache访问的域名mctest.com

在这里插入图片描述

上传测试用的web项目

在这里插入图片描述

上传后解压并测试启动

在这里插入图片描述

项目启动后若需要使用宿主机通过域名访问,则需要修改宿主机的hosts文件,路径为C:\windows\system32\drivers\etc\hosts

在这里插入图片描述

之后可以在宿主机通过域名访问试试

在这里插入图片描述

看到这个画面证明已经能够正常访问了,接下来就将tomcat7_8080的内容复制两份并修改端口,这时就需要修改对应服务端口来区分,譬如server.xml中shutdown的端口

在这里插入图片描述

容器端口

在这里插入图片描述

如果tomcat中需要使用ajp服务那对应的ajp端口也需要修改

在这里插入图片描述

除了端口需要修改外,Engine标签内容在扩展容器中可以删除

在这里插入图片描述

完成上述的配置后,分别启动三个Tomcat容器,通过域名访问可以看到以下页面

在这里插入图片描述

若将8080端口的tomcat关闭掉,再次刷新可以看到

在这里插入图片描述

SessionID后缀发生了改变,从原来的tm改为了ts这就证明服务已经切换到另一台tomcat容器里面了。若将三个集群节点都关闭,重新刷新页面则会发生无法访问的情况。

在这里插入图片描述

在无法访问的状态下重新将tomcat7_8080的容器开启,可以看到

在这里插入图片描述

虽然三个Tomcat节点都曾经关闭过,但由于Session已经缓存到Memcached中了因此会话还是会保留的,只要服务恢复使用用户并不需要重新登录。

7. 补充说明

Apache提供两种Session复制的方式,一种是粘性Session复制,另一种是非粘性Session复制。

  • 粘性Session复制,是将所有的Session复制到指定的一台Tomcat服务器中,这种方式的复制效率高而且简单,但是当指定的Tomcat服务器宕机之后,所有的Session将会失去。

  • 非粘性Session复制,采用广播的方式,将Session复制到每一台Tomcat服务器中,每一次Session发生变动都会重新序列化,并将网络中的每台Tomcat服务器的Session进行覆盖。这种方式虽然保险,但是资源浪费极大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现nginx和tomcat一起部署springboot项目并实现tomcat集群,需要进行以下步骤: 1. 部署springboot项目到tomcat上,并启动多个tomcat实例,这些实例需要在不同的端口上运行。 2. 配置nginx作为反向代理服务器,将所有请求转发到tomcat集群中的一个实例上。可以使用upstream模块来配置tomcat集群,如下所示: ```nginx http { upstream tomcat_cluster { server tomcat1_ip:tomcat1_port; server tomcat2_ip:tomcat2_port; server tomcat3_ip:tomcat3_port; } server { listen 80; server_name example.com; location / { proxy_pass http://tomcat_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 在上面的配置中,tomcat_cluster是一个upstream实例,包含了所有tomcat实例的IP地址和端口号。nginx会将请求转发到tomcat_cluster中的一个实例上。 3. 配置session共享,以便在tomcat集群中的不同实例之间共享用户会话信息。可以使用memcached或redis等分布式缓存来实现session共享。 4. 配置负载均衡器,以便nginx可以根据不同的负载均衡算法来分配请求到不同的tomcat实例上。可以使用nginx自带的负载均衡模块或第三方模块,如nginx-upsync-module等。 5. 测试集群的可伸缩性和容错性,以确保tomcat集群可以在高负载和节点故障的情况下正常运行。 总结来说,要实现nginx和tomcat一起部署springboot项目并实现tomcat集群,需要进行反向代理、session共享、负载均衡器等多方面的配置和测试。这样可以保证项目的高可用性和可伸缩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kida 的技术小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值