ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Docker部署Nginx+Tomcat实现负载均衡

2022-05-27 19:03:52  阅读:151  来源: 互联网

标签:容器 tomcat Tomcat nginx -- Nginx conf Docker docker


docker部署nginx+tomcat实现负载均衡

1,部署一台Nginx和三台Tomcat服务器

2,Ngnix需要实现三种策略:

1)轮询;

2)权重,三台服务器的权重为1,3,5;

3)IP Hash。

最终实现的效果是,本地电脑通过网页访问云服务器时,网页能够体现Ngnix三种策略的结果。

1 申请华为云服务器并配置环境

1.1 申请服务器

本实验申请的版本是1vCPUs, 内存1Gib,运行系统为Ubuntu 18.04的服务器

在申请后使用ssh进行登录

![image-20220526232213855](实验11 - 副本/image-20220526232213855.png)

1.2 安装Docker

安装Docker的步骤主要参考官方文档:https://docs.docker.com/engine/install/ubuntu/

# 1. Update the apt package index and install packages to allow apt to use a repository over HTTPS:
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 2. Add Docker’s official GPG key:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 3. Use the following command to set up the stable repository. 
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. install docker engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后可以查看一下docker的版本

docker --version

image

1.3 拉取nginx和tomcat镜像

docker pull nginx
docker pull tomcat

查看已经拉取到的镜像

image

2 创建nginx和tomcat容器

2.1 创建1个nginx容器

在创建nginx容器之前,我们先在本地创建用于放置nginx配置的文件夹~/docker/nginx

mkdir docker
cd docker
mkdir nginx

启动nginx容器,将配置文件复制到文件夹中

docker cp 0c025fba7dc5:/etc/nginx/nginx.conf ~/docker/nginx/
docker cp 0c025fba7dc5:/etc/nginx/conf.d/default.conf  ~/docker/nginx/

然后停掉并删除容器

docker stop 0c025fba7dc5
docker rm 0c025fba7dc5

然后重新启动nginx容器,并将配置挂载到容器上

docker run --name myNginx -p 80:80 -v ~/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v ~/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf -itd nginx

2.2 创建3个tomcat容器

创建三个tomcat容器myTomcat1,myTomcat2,myTomcat3,端口号分别为8081,8082,8083。

docker run -itd --name myTomcat1 -p 8081:8080 tomcat
docker run -itd --name myTomcat2 -p 8082:8080 tomcat
docker run -itd --name myTomcat3 -p 8083:8080 tomcat

查看已经创建的容器:

image

创建好的tomcat,还要设置webapps文件夹用于访问,进入每个tomcat容器,然后执行下面的命令就行

cp -r webapps.dist/* ./webapps
rm -rf webapps.dist

添加防火墙的端口:

firewall-cmd --zone=public --add-port=80/tcp --permanent # 这个是nginx的端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --zone=public --add-port=8083/tcp --permanent

然后reload

firewall-cmd --reload

查看结果

firewall-cmd --list-all

image

为了能够访问华为云服务器的8081,8082,8083端口,需要对服务器添加入口规则(80端口已经默认有了就不用添加了):

image

添加完成后就能访问tomcat了:

image

为了区分不同的tomcat容器,我们创建3个index.jsp文件,内容分别为this is tomcat1this is tomcat2this is tomcat3,然后复制到tomcat容器中

docker cp index1.jsp myTomcat1:/usr/local/tomcat/webapps/ROOT/index.jsp
docker cp index2.jsp myTomcat2:/usr/local/tomcat/webapps/ROOT/index.jsp
docker cp index3.jsp myTomcat3:/usr/local/tomcat/webapps/ROOT/index.jsp

这样我们就能区分不同的tomcat容器了:

image

image

image

3 nginx负载均衡

3.1 轮询方式

在本地目录创建容器中nginx.conf文件的副本nginx1.conf,修改后再挂载到容器中,下面是对nginx1.conf所做的修改:

image

这种方式默认就会使用轮询的方式访问3个tomcat容器

用nginx1.conf作为配置启动nginx:

docker run --name myNginx -p 80:80 -v ~/docker/nginx1.conf:/etc/nginx/nginx.conf  -itd nginx

然后访问nginx服务器,发现会轮询地对3个tomcat容器进行访问:

image

image

image

image

使用shell脚本每隔一秒对nginx服务器访问的结果,可以更清楚地看到负载均衡的方式

while true; do wget -O - -q http://120.46.179.205;sleep 1; done

image

3.2 权重,三台服务器的权重为1,3,5

创建文件nginx2.conf,nginx2.conf在nginx1.conf基础上做了如下修改

image

即增加了权重处理,每个server被访问的频率与weight成正比

将nginx2.conf挂载到容器并启动nginx:

docker run --name myNginx -p 80:80 -v ~/docker/nginx2.conf:/etc/nginx/nginx.conf  -itd nginx

还是使用上面的脚本观察结果:

while true; do wget -O - -q http://120.46.179.205;sleep 1; done

可以看到三个tomcat1,tomcat2, tomcat3被访问的频率近似为1:3:5

image

3.3 IP Hash

IP Hash会按照IP进行访问,这样每个访客固定访问一个后端服务器,可以解决session问题

nginx3.conf在轮询(nginx1.conf)的基础上只要加上ip_hash就能实现IP hash访问:

image

nginx3.conf文件挂载到nginx容器中并启动nginx容器:

docker run --name myNginx -p 80:80 -v ~/docker/nginx3.conf:/etc/nginx/nginx.conf  -itd nginx

访问nginx服务器,无论怎么刷新都只会访问tomcat1

image

总结

通过这次实验,我学会了在云端用docker部署nginx和tomcat实现负载均衡的三种策略:轮询、权重和IP hash。熟悉了服务器,docker的操作和使用。

参考文档

标签:容器,tomcat,Tomcat,nginx,--,Nginx,conf,Docker,docker
来源: https://www.cnblogs.com/huihao/p/16318746.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有