一、使用Docker-compose实现Tomcat+Nginx负载均衡
要求:
理解nginx反向代理原理;
nginx代理tomcat集群,代理2个以上tomcat;
了解nginx的负载均衡策略,并至少实现nginx的2种负载均衡策略;
1.nginx反向代理原理;
反向代理方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。Nginx 反向代理的指令不需要新增额外的模块,默认自带 proxy_pass 指令,只需要修改配置文件就可以实现反向代理。
多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理,此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx 扮演的就是一个反向代理角色。
2.nginx代理tomcat集群
-
nginx的负载均衡
负载均衡,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。 -
编写docker-compose.yml
version: "3"
services:
nginx:
image: nginx
container_name: tomcat_nginx
ports:
- "80:2060"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf # 挂载配置文件
depends_on:
- tomcat01
- tomcat02
- tomcat03
tomcat01:
image: tomcat
container_name: tomcat_1
volumes:
- ./tomcat1:/usr/local/tomcat/webapps/ROOT # 挂载web目录
tomcat02:
image: tomcat
container_name: tomcat_2
volumes:
- ./tomcat2:/usr/local/tomcat/webapps/ROOT
tomcat03:
image: tomcat
container_name: tomcat_3
volumes:
- ./tomcat3:/usr/local/tomcat/webapps/ROOT
- 编写三个index.html
HTML页面
tomcat 1
#其余两个分别是tomcat 2和tomcat 3
- 在当前文件夹运行以下命令
sudo docker-compose up -d --build
- 实现nginx的2种负载均衡策略
轮询算法
while true; do wget -O - -q http://192.168.2.11;sleep 3; done
权重方式
二、使用Docker-compose部署javaweb运行环境
要求:
分别构建tomcat、数据库等镜像服务;
成功部署Javaweb程序,包含简单的数据库操作;
为上述环境添加nginx反向代理服务,实现负载均衡。
参考资料
sudo docker-compose up -d --build
- 访问页面
http://192.168.2.11:5050/ssmgrogshop_war/Login/tologin.do
三、使用Docker搭建大数据集群环境
要求:
直接用机器搭建Hadoop集群,会因为不同机器配置等的差异,遇到各种各样的问题;也可以尝试用多个虚拟机搭建,但是这样对计算机的性能要求比较高,通常无法负载足够的节点数;使用Docker搭建Hadoop集群,将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。
- 实验环境
操作系统:Linux-- Ubuntu18.04;
Hadoop 版本:3.1.3;
JDK 版本:1.8;
1.环境配置
- 拉取Ubuntu镜像
sudo docker pull ubuntu
- 创建运行容器
sudo docker build -t ubuntu .
sudo docker run -it --name ubuntu ubuntu
- 更新和安装
apt-get update
apt-get install vim
apt-get install ssh
/etc/init.d/ssh start #用vim ~/.bashrc命令进入后添加,可以实现ssd自启动
ssh-keygen -t rsa
cd ~/.ssh
- 安装jdk
apt-get install openjdk-8-jdk
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ #进入添加
export PATH=$PATH:$JAVA_HOME/bin #添加后保存退出
source ~/.bashrc #运行生效
java -version #检查版本
- 保存当前镜像
sudo docker commit 容器id ubuntu/jdk
- 安装配置hadoop环境
sudo docker run -it -v /home/c/build:/root/build --name ubuntu-jdk ubuntu/jdk #建立一个新终端共享文件
sudo cp /home/c/Desktop/hadoop/build/hadoop-3.1.3.tar.gz /home/c/build #再建一个新终端复制文件
cd /root/build #回到第二个容器下进入目录
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local #解压文件
cd /usr/local/hadoop-3.1.3/etc/hadoop
vim ~/.bashrc # 进行配置如下图
source ~/.bashrc #配置好后使之生效
2.配置hadoop集群
- 修改各个文件
cd /usr/local/hadoop-3.1.3/etc/hadoop
vim 文件名称
-
在目录cd /usr/local/hadoop-3.1.3/sbin下,在start-dfs.sh和stop-dfs.sh中添加
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
- 在start-yarn.sh和stop-yarn.sh中添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
- 新建一个终端,保存当前镜像
docker commit 容器ID ubuntu/hadoop
3.运行镜像
- 再开三个新终端,分别运行
# 第一个终端
sudo docker run -it -h master --name master ubuntu/hadoop
# 第二个终端
sudo docker run -it -h slave01 --name slave01 ubuntu/hadoop
# 第三个终端
sudo docker run -it -h slave02 --name slave02 ubuntu/hadoop
- 查看各个终端的ip
cat /etc/hosts
- 打开/etc/hosts,更改ip映射关系(三个终端都要改)
vim /etc/hosts
vim /usr/local/hadoop-3.1.3/etc/hadoop/workers
4.运行测试hadoop集群
- Master 节点上启动HDFS和YARN
#如果是第一次运行则需要执行cd /usr/local/hadoop-3.1.3
#bin/hdfs namenode -format来格式化
start-dfs.sh
start-yarn.sh
4.运行实例(grep测试)
- 创建 input 文件夹
bin/hdfs dfs -mkdir -p /user/hadoop/input
- 上传文件
bin/hdfs dfs -put /usr/local/hadoop-3.1.3/etc/hadoop/*.xml /user/hadoop/input
- 执行实例
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep /user/hadoop/input output 'dfs[a-z.]+'
- 查看结果
bin/hdfs dfs -cat /user/hadoop/output/*
四、主要问题和解决方法
- docker 部署 nginx 错误导致启动出错
原因在于路径的问题,改正后就可以了
- 在Master终端实例测试时输入指令出错
先启动ha集群,jps确认没有namenode后,再重新单独启动namenode
start-all.sh #启动ha集群
hadoop-daemon.sh start namenode #挂掉的namenode节点执行
五、花费时长
名称 | 时长(分) |
---|---|
下载Docker compose | 30 |
查找资料 | 70 |
编写文件 | 110 |
操作运行 | 150 |
检查错误 | 100 |
整理博客 | 80 |
六、感想
这次实验又了解了更多nginx的相关知识,虽然中途遇到了一些问题,但是通过搜索发现很多种解决的方法,在不断尝试中学习了很多。