锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Linux环境下Tomcat负载均衡集群的搭建

时间:2024-01-02 13:07:03 de型连接器

1. Tomcat建设负载均衡集群

在这里插入图片描述

关于代理服务器

  • 代理服务器本身不负责处理请求,而是将请求转发给真正的服务器。真正的服务器处理后,返回给它,然后做出反应,称为反向代理服务器。

Nginx是反向代理服务器,以后可以收到大规模的请求,收到后可以把我们的请求分成所有的集群结点。也就是说,以后可以通过Ngnix在服务器集群中管理许多节点。所有的请求将来都会通过Ngnix时,Ngnix它可以帮助我们解决负载平衡,Ngnix其核心是完成负载平衡。Ngnix不仅可以作为方向代理服务器,还可以作为(正向代理)服务器解决跨域问题和动态和静态分离问题。

  • 例如,跨域是你自己的计算机访问 www.baidu.com 这是跨域名

  • 动静分离解决了项目中动静资源的分离,如 jsp 不依赖服务器不能使用,jsp属于动态资源,以后还是要把的jsp放在应用服务器上。直接部署与项目静态资源相关的项目Ngnix如果请求中的一半是静态资源,则不需要直接通过后端应用服务器Nginx响应。

还有一点,Ngnix必须实现Session为什么分享?

首先,我们应该明白为什么要实现共享。如果您的网站存储在机器上,则不存在此问题,因为会话数据在本机中,但如果您使用负载平衡将请求分发给不同的机器呢?此时会话id在客户端没有问题,但如果用户两次要求两台不同的机器,它的session其中一台机器可能存在数据,此时无法获取session所以session共享成了问题。

注:关于Session共享分析引自 简书

session共享有两种解决方案:

第一种是tomcat之间session同步

例如,有一个请求tomc1上创建了session,那tom2、tom3······跟随同步,以便根据负载平衡 原则,无论到达tom2还是tom三上都能找到对应的session, 

二是使用redis或cachedb实现session当然,第二种方式是主流的方式

第二种方法是在整个系统架构的背面建造一个redis集群或者Memcachedb它们叫集群 分布式缓存服务器由分布式缓存服务器管理session数据, 当然,为了避免单节点的并发压力,分布式缓存服务器也应进行集群处理。 分布式缓存服务器的核心解决方案是session如何解决共享问题? 用户登录后会有用户信息,我们可以将用户信息放入 redis 或者  cachedb 里面, 根据未来负载平衡的原理,将相应tom二、统一去redis将用户信息复制到本机。 session在这种情况下,我们可以实现它session共享了。 

接下来是关于tomcat构建负载均衡集群

第一步个步骤,第一步是建造tomcat第二步是实现集群session管理,我们在这里使用memcached来完成Session共享。

让我们先建一下 Nginx管理Tomcat集群实现负载平衡,

在这里,我们将构建伪分布式。所谓伪分布式,就是在机器上启动三个tomcat,但是这三个tomcat服务端口不同。在机器上建造Nginx,在另一台机器上启动三个tomca服务。

要建立负载均衡集群,必须提前安装Nginx

小知识:在Linux中执行 halt 指令Linux会关机

1.1 安装Nginx

1.1.1 Nginx的引言

Nginx是轻量级的Web 服务器/反向代理服务器和电子邮件(IMAP/POP3)代理服务器,在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev俄罗斯大型入口网站和搜索引擎的开发Rambler(俄文:Рамблер)使用。其特点是内存少,并发能力强nginx并发能力在同类网页服务器中确实表现良好,在中国大陆使用nginx网站用户有:京东、新浪、网易、腾讯、淘宝等。

Nginx它是用C语言写的,所以我们需要编译和安装它

1.1.2 Nginx的安装

# 0.安装c语言环境和必要依赖  Ngnix它是用C语言写的,然后安装Ngnix要对其进行编译安装,所以我们这里要安装c语言环境   yum install -y gcc pcre-devel zlib-devel  # 1.下载Nginx  从官网下载的是源码包,我们需要编译和安装它  http://nginx.org/en/download.html  # 2.将Nginx上传到linux中,并解压缩    tar -zxvf nginx-1.11.1.tar.gz  # 3.查看Nginx安装目录  ls   auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src  其中有一个configure文件是用来生成编译文件的  # 4.生成编译文件,检查编译文件编译位置是否缺乏相关依赖性    在Nginx在安装目录中执行以下命令:(指定安装位置)  执行下列命令后,将生成Makefile编译文件,还将测试是否缺乏相关依赖,缺乏依赖将报告错误,并指定编译  出来的Ngnix应用的安装位置。   cd nginx-1.11.1  ./configure --prefix=/usr/nginx  # 5.安装编译文件Ngnix  在Nginx编译和安装源代码包目录执行以下命令  编译下列命令后,安装 /usr 目录下   cd nginx-1.11.1  make && make install  # 6.编译完成后,进入编译安装目录/usr/nginx查看目录:  编译安装后 /root 下的源码包 nginx-1.11.1.tar.gz 其实可以删除   ls -l   drwxr-xr-x. 2 root root 4096 10月 14 21:17 conf  drwxr-xr-x. 2 root root   40 10月 14 21:17 html  drwxr-xr-x. 2 root root    6 10月 14 21:17 logs  drwxr-xr-x. 2 root root   19 10月 14 21:17 sbin   其中conf配置目录,html是Nginx的家目录,logs是日志目录,sbin中是启动Nginx的脚本文件  conf配置文件之一的目录nginx.conf可用于修改Nginx的相关配置  html有两个目录html文件index.html、50x.html ,其中 index.html 是它的主页,50x.html  显示在报告相关错误时的页面。  logs有些日志文件  sbin中有一个nginx用于启动的文件Nginx的  # 7.启动nginx,进入nginx安装目录的sbin执行目录:  nginx端口是80端口,我们知道默认是80端口,没有任何参数,所以启动Nginx非常简单,  在 /usr/nginx/sbin/ 直接在目录下执行 ./nginx 运行Nginx即可   cd /usr/nginx/sbin/  ./nginx      执行nginx文件完成后,可以使用以下指令查看Nginx是否成功启动  ps -aux|grep redis   nginx启动时会有两个过程,一个是master,一个是worker,关闭时只需关闭master,worker就会  跟着关闭了  # 8.在windows访问中浏览器可以看到nginx欢迎页面:  http://192.168.72.132/  这是Nginx服务器功能,但我们在这里使用负载均衡集群Nginx管理反向代理功能tomcat集群  注:关闭网络防火墙  # 9.关闭nginx,进入nginx安装目录的sbin执行目录:  cd /usr/nginx/sbin/  ./nginx -s stop  # 10.nginx配置文件在nginx安装目录的conf目录中:  cd /usr/nginx/conf  其中有一个nginx.conf配置文件  注意:nginx.conf为nginx配置文件,可以在nginx.conf修改nginx默认配置 

1.2 启动多个tomcat

启动多个tomcat如果你需要的话tomcat压缩包解压三份  # 0.准备多个tomcat   tar -zxvf apache-tomcat-8.5.78.tar.gz #解压缩一个新的tomcat安装包   mv apache-tomcat-8.5.78 tomcat1     #改名tomcat1   cp -r tomcat1/ tomcat2         #复制一份   cp -r tomcat1/ tomcat3                #复制一份  # 1.此时当前目录中有三个服务器,如下:  [root@localhost ~]# ls -l  总量 12248
	-rwxrwxrwx. 1 root root  11623939 10月 13 12:25 apache-tomcat-8.5.78.tar.gz
	drwxr-xr-x. 9 root root       220 10月 14 21:28 tomcat1
	drwxr-xr-x. 9 root root       220 10月 14 21:38 tomcat2
	drwxr-xr-x. 9 root root       220 10月 14 21:38 tomcat3

# 2.修改tomcat1端口号:(伪分布式)
		vim tomcat1/conf/server.xml
		每个服务器关闭时所占用的端口号、http协议端口、AJP协议端口都不能一样
		所以为了使得三个tomcat可以在一台机器上运行我们要修改端口号
		vim tomcat1/conf/server.xml
		命令修改如下内容:

		a.   ---关闭端口

		b.

   	c. ---AJP协议端口

# 3.修改tomcat2端口号:(伪分布式)
		vim tomcat2/conf/server.xml
		命令修改如下内容:
  	a.
		b.
   	c.

# 4.修改tomcat3端口号:(伪分布式)
		vim tomcat3/conf/server.xml
		命令修改如下内容:
  	a.
		b.
   	c.

# 5.将多个tomcat启动:
		tomcat1/bin/startup.sh 
		tomcat2/bin/startup.sh 
		tomcat3/bin/startup.sh

# 6.查看tomcat是否启动成功
		ps -aux|grep tomcat

		最后可以使用如下命令查看日志
    tail -f tomcat1/logs/catalina.out
    tail -f tomcat2/logs/catalina.out
    tail -f tomcat3/logs/catalina.out

# 7.在windows中分别访问tomcat,都看到主页代表启动成功:

	http://192.168.72.135:8989/
	http://192.168.72.135:8990/
	http://192.168.72.135:8991/

	注意:这步一定要关闭网路防火墙

# 8.将多个tomcat配置到nginx的配置文件中:
		vim /usr/nginx/conf/nginx.conf

		配置它管理的tomcat集群中每个tomc
	1).在server标签的上面加入如下配置:
    upstream tomcat-servers {
      server 192.168.72.135:8989;
      server 192.168.72.135:8990;
      server 192.168.72.135:8991;
    }
	2).将配置文件中 location /替换为如下配置:
		使用了Nginx之后,Nginx将请求转给tomcat,然后tomcat返回给Nginx,
		那么访问Nginx看到的应该是某个tomcat的画面

		location / {
			 proxy_pass http://tomcat-servers;
			 proxy_redirect    off;
			 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			 proxy_set_header X-Real-IP $remote_addr;
			 proxy_set_header Host $http_host;
			 proxy_next_upstream http_502 http_504 error timeout invalid_header;
		   }

# 9.进入nginx安装目录sbin目录启动nginx
	加载配置文件启动
	cd /usr/nginx/sbin/
	./nginx -c /usr/nginx/conf/nginx.conf

	上面加载配置文件启动时必须是绝对路径

# 10.访问nginx,看到其中一个tomcat画面:
	http://192.168.72.132/

 因为我们使用的是一台机器启动三个tomcat服务,所以我们可以修改一下三个tomcat文件中的
	首页以便于我们在访问Nginx时可以证明它的确起到了负载均衡的作用
	
	vim tomcat1/webapps/ROOT/index.jsp 
	vim tomcat2/webapps/ROOT/index.jsp 
	vim tomcat3/webapps/ROOT/index.jsp 

1.3 Nginx负载均衡策略

./nginx -s stop
./nginx -c /usr/nginx/conf/nginx.conf
vim /usr/nginx/conf/nginx.conf


# 1.轮询

	按照顺序循环,轮询是由请求的先后顺序组成的
	 说明: 默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器

	 Nginx还可以做到动态剔除,当某个tomcat宕机,之后Nginx不会再将请求转向它
	 当宕机的tomcat重新启动服务时,Nginx会瞬间将其加入管理之中

# 2.weight 权重
	vim /usr/nginx/conf/nginx.conf

	说明: weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比 
    upstream tomcat-servers {
        server localhost:8989   weight=10;  
        server localhost:8990   weight=3;  
        server localhost:8991   backup;  
    }
    注意:1.权重越高分配到需要处理的请求越多。2.此策略可以与least_conn和ip_hash结合使用主要用于后端服务器性能不均
    主要用于后端服务器性能不均这种情况

# 3.ip_hash  4%3=1 
	对客户端ip取哈希,取哈希结果之后去与服务器可用的节点数做一个模运行,
	这种方式可以保证客户端始终在一个固定节点上(前提是客户端ip不变)
	 说明:指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,
	 可以解决session不能跨服务器的问题。(前提是这个服务器不宕机)
	 upstream tomcat-servers {
        ip_hash;    #保证每个访客固定访问一个后端服务器
        server localhost:8080;
        ......
    }

# 4.least_conn
	说明: 把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相
	同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达
	到更好的负载均衡效果。
	upstream tomcat-servers{
        least_conn;    #把请求转发给连接数较少的后端服务器
        server localhost:8080;
    }

1.4 MSM配置

Memcached Session Manager基于memcache缓存的session共享.即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cache DB中,当应用服务器发生故障时,调度器会遍历寻找可用节点,分发请求,当应用服务器发现session不在本机内存时,则去cacheDB中查找,如果找到则复制到本机,这样实现session共享和高可用。

memcached是缓存服务器,不是web服务器,不具备web功能,所以我们不能通过在浏览器中输入memcached所在的服务器的ip地址去访问memcached

# 0.准备一个memcache服务

# 1.安装memcached
	 yum install -y memcached

# 2.启动memcached
	memcached一安装完成之后会直接在系统中形成一个memcached的服务,我们可以直接使用memcached指令去启动
	memcached

	memcached -p 11211 -vvv -u root

	其中 -p 是指定memcached的端口,memcached默认的端口是 11211
	-vvv 是显示memcached的启动日志,-u代表作为root用户启动
	memcached是内存级产品,是不允许让其他用户启动的,因为它会占用
	生产上一定的内存,根据Linux权限的设计,在占用大内存时需要root用户,
	在启动时需要明确加一个 -u root 参数

# 3.tomcat安装的lib目录中放入与memcache整合jar包

	在tomcat中配置一些tomcat的信息然后让tomcat自动的把session数据交给memcached管理就可以了
	配置tomcat去连接到memcached,memcached是用c语言写的,而tomcat是用java写的,通过java
	操作memcached需要去引入tomcat与memcached的整合的一些依赖jar包
	不同版本的tomcat使用的依赖jar包是不一样的,这里我使用的tomcat8版本的依赖jar包
	将这些jar包放入tomcat目录中的lib目录中

		cp tom8-msm/*.jar tomcat1/lib/
		cp tom8-msm/*.jar tomcat2/lib/
		cp tom8-msm/*.jar tomcat3/lib/

# 4.配置tomcat目录中conf目录中context.xml(所有tomcat均需要配置)

	日后tomcat还需要知道它应该把session信息放到哪个memcached节点上,所以
	还需要在tomcat中配置memcached所在的服务器ip以及端口(每个tomcat都需要配置)
	加入的下面的语句就是整个session管理的配置,其中指明了使用哪个类把session数据
	备份到memcached中,下面的 n1 是memcached结点的名字,名字起什么都可以
	有多个的话中间用逗号隔开,写另外机器的ip和端口
	memcachedNodes="n1:192.168.72.136:11211,nq:192."

	vim tomcat1/conf/context.xml

	把下面的内容复制到配置文件的
	标签的里面

    

启动顺序:memcached --> tomcat --> nginx
关闭顺序;nginx --> tomcat --> memcached

接下来我们来实际操作一下:

在本次搭建Tomcat负载集群中,我使用了三个虚拟机,

一个其中安装的是Ngnix,第二个中安装了三个Tomcat,第三个安装memcached

  1. 安装Ngnix

Ngnix是由c语言写的,之后安装Ngnix要对其进行编译安装,所以我们这里要安装c语言环境

yum install -y gcc pcre-devel zlib-devel

从官网下载下来的是一个源码包,我们要对它进行编译安装

http://nginx.org/en/download.html

将Nginx上传到linux中,并解压缩

tar -zxvf nginx-1.11.1.tar.gz

生成编译文件并检查是否缺少相关依赖并制定编译文件编译的位置

cd nginx-1.11.1
./configure --prefix=/usr/nginx

执行编译文件安装Ngnix

cd nginx-1.11.1
make && make install

启动nginx

cd /usr/nginx/sbin/
./nginx   

补充:关闭Nginx

cd /usr/nginx/sbin/
./nginx -s stop
  1. 启动多个Tomcat

准备多个tomcat,将tomcat压缩包解压三份

tar -zxvf apache-tomcat-8.5.78.tar.gz   #解压缩一个新的tomcat安装包
mv apache-tomcat-8.5.78 tomcat1 			 #将名称改为tomcat1
cp -r tomcat1/ tomcat2								 #复制一份
cp -r tomcat1/ tomcat3                #复制一份

为了使的这三个tomcat可以在一台机器上运行,我们还需要配置这三个tomcat包中的配置文件

修改三个tomcat端口号:(伪分布式)

# 修改tomcat1端口号:(伪分布式)
	vim tomcat1/conf/server.xml

	a.   ---关闭端口

	b.

  c. ---AJP协议端口
  
# 3.修改tomcat2端口号:(伪分布式)
		vim tomcat2/conf/server.xml

  	a.
		b.
   	c.

# 4.修改tomcat3端口号:(伪分布式)
		vim tomcat3/conf/server.xml

  	a.
		b.
   	c.

这里演示一个

将多个tomcat启动

tomcat1/bin/startup.sh 
tomcat2/bin/startup.sh 
tomcat3/bin/startup.sh

将多个tomcat配置到nginx的配置文件中

	vim /usr/nginx/conf/nginx.conf
	
 在server标签的上面加入如下配置:
 
  upstream tomcat-servers { 
        
  server 192.168.72.135:8989;
  server 192.168.72.135:8990;
  server 192.168.72.135:8991;
  }
  

location / { 
        
proxy_pass http://tomcat-servers;
proxy_redirect    off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}

  1. 配置MSM

安装memcached

yum install -y memcached

启动memcached

memcached -p 11211 -vvv -u root

在 tomcat安装的lib目录中放入与memcache整合jar包(上传)

cp tom8-msm/*.jar tomcat1/lib/
cp tom8-msm/*.jar tomcat2/lib/
cp tom8-msm/*.jar tomcat3/lib/

配置tomcat目录中conf目录中context.xml(所有tomcat均需要配置)

vim tomcat1/conf/context.xml

将下面内容放到<Context></Context>标签的里面

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.72.136:11211"
sticky="false"  
sessionBackupAsync="false"  
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

其中n1是memcached节点的名字,后面写memcached结点的ip和端口

启动顺序:memcached --> tomcat --> nginx
关闭顺序;nginx --> tomcat --> memcached

至此,服务器的负载均衡搭建就完成了

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章