第4次实践作业

一、使用Docker-compose实现Tomcat+Nginx负载均衡

要求:
理解nginx反向代理原理;
nginx代理tomcat集群,代理2个以上tomcat;
了解nginx的负载均衡策略,并至少实现nginx的2种负载均衡策略;

1.nginx反向代理原理;

反向代理方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。Nginx 反向代理的指令不需要新增额外的模块,默认自带 proxy_pass 指令,只需要修改配置文件就可以实现反向代理。
多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理,此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx 扮演的就是一个反向代理角色。
第4次实践作业_第1张图片

2.nginx代理tomcat集群

  • nginx的负载均衡
    负载均衡,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

  • 新建文件夹编写default.conf
    第4次实践作业_第2张图片

  • 编写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

第4次实践作业_第3张图片

  • 实现nginx的2种负载均衡策略
    轮询算法
while true; do wget -O - -q http://192.168.2.11;sleep 3; done

第4次实践作业_第4张图片

权重方式

  • 更改权重

  • 然后再次运行

  • 可以看到出现的概率依据权重而定
    第4次实践作业_第5张图片

二、使用Docker-compose部署javaweb运行环境

要求:
分别构建tomcat、数据库等镜像服务;
成功部署Javaweb程序,包含简单的数据库操作;
为上述环境添加nginx反向代理服务,实现负载均衡。

参考资料

  • 新建如下目录
    第4次实践作业_第6张图片
  • 修改连接数据库的IP
    第4次实践作业_第7张图片
  • 启动容器
sudo docker-compose up -d --build

  • 访问页面
http://192.168.2.11:5050/ssmgrogshop_war/Login/tologin.do

第4次实践作业_第8张图片

  • 可以进行数据库的操作
    第4次实践作业_第9张图片

三、使用Docker搭建大数据集群环境

要求:
直接用机器搭建Hadoop集群,会因为不同机器配置等的差异,遇到各种各样的问题;也可以尝试用多个虚拟机搭建,但是这样对计算机的性能要求比较高,通常无法负载足够的节点数;使用Docker搭建Hadoop集群,将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。

  • 实验环境

操作系统:Linux-- Ubuntu18.04;
Hadoop 版本:3.1.3;
JDK 版本:1.8;

1.环境配置

  • 拉取Ubuntu镜像
sudo docker pull ubuntu

第4次实践作业_第10张图片

  • 创建运行容器
sudo docker build -t ubuntu .
sudo docker run -it --name ubuntu ubuntu

第4次实践作业_第11张图片

  • 更新和安装
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

第4次实践作业_第12张图片
第4次实践作业_第13张图片

  • 安装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 #配置好后使之生效

第4次实践作业_第14张图片

2.配置hadoop集群

  • 修改各个文件
cd /usr/local/hadoop-3.1.3/etc/hadoop
vim 文件名称
  • 修改core-site.xml
    第4次实践作业_第15张图片

  • 修改hdfs-site.xml
    第4次实践作业_第16张图片

  • 修改cmapred-site.xml
    第4次实践作业_第17张图片

  • 修改yarn-site.xml
    第4次实践作业_第18张图片

  • 在目录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

第4次实践作业_第19张图片

  • 测试ssh
    第4次实践作业_第20张图片
    第4次实践作业_第21张图片
  • 在Master上修改主机名
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次实践作业_第22张图片
第4次实践作业_第23张图片

  • jps查看

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.]+'

第4次实践作业_第24张图片

  • 查看结果
bin/hdfs dfs -cat /user/hadoop/output/*

四、主要问题和解决方法

  • docker 部署 nginx 错误导致启动出错
    第4次实践作业_第25张图片
    原因在于路径的问题,改正后就可以了
    第4次实践作业_第26张图片
  • 在Master终端实例测试时输入指令出错

    先启动ha集群,jps确认没有namenode后,再重新单独启动namenode
start-all.sh #启动ha集群
hadoop-daemon.sh start namenode  #挂掉的namenode节点执行

第4次实践作业_第27张图片

五、花费时长

名称 时长(分)
下载Docker compose 30
查找资料 70
编写文件 110
操作运行 150
检查错误 100
整理博客 80

六、感想

这次实验又了解了更多nginx的相关知识,虽然中途遇到了一些问题,但是通过搜索发现很多种解决的方法,在不断尝试中学习了很多。

你可能感兴趣的:(第4次实践作业)