2020系统综合实践 第4次实践作业

1.使用Docker-compose实现Tomcat+Nginx负载均衡

(1)配置文件

  • 在主目录下创建一个tomcat文件夹,并在里面添加如下文件

  • docker-compose.yml

  • nginx里面是一个default.conf文件

  • 另外三个文件里面均为一个html文件,内容设置不一样,能区分就行,下图为例

  • 查看树结构

  • 运行docker-compose

  • 查看运行的容器

  • 访问网页,点击刷新会逐步出现之前设置的三个html里面的内容


(2)负载均衡测试

A.轮询测试

  • 在主目录添加一个testTomcat.py的python文件代码如下
import requests

url="http://localhost"

for i in range(0,10):
	reponse=requests.get(url)
	print(reponse.text)
  • 运行该python文件

B.权重测试

  • 修改default.conf里面的内容

  • 添加一个testTomcat.py的文件,代码如下

import requests

url="http://localhost"

context={}
for i in range(0,100):
	response=requests.get(url)
	
	if response.text in context:
		context[response.text]+=1
	else:
		context[response.text]=1

print(context)
  • 运行python文件,三个tomcat出现的概率刚好为之前设置的5:3:2

2.使用Docker-compose部署javaweb运行环境

(1)确实不会javaweb,用老师给的例子来完成本次实验

  • 按照给定的步骤更改数据库ip

  • 创建并启动容器 sudo docker-compose up -d

  • 在web上访问

  • 进行一些简单的操作

(2)添加nginx反向代理服务,实现负载均衡

  • docker-compose.yml
version: "3"   #版本
services:     #服务节点
  tomcat:     #tomcat 服务
    image: tomcat    #镜像
    hostname: hostname       #容器的主机名
    container_name: tomcat00   #容器名
    ports:      #端口
     - "5050:8080"
    volumes:  #数据卷
     - "./webapps:/usr/local/tomcat/webapps"
     - ./wait-for-it.sh:/wait-for-it.sh
    networks:   #网络设置静态IP
      webnet:
        ipv4_address: 15.22.0.15
  mymysql:  #mymysql服务
    build: .   #通过MySQL的Dockerfile文件构建MySQL
    image: mymysql:test
    container_name: mymysql
    ports:
      - "3309:3306" 
#红色的外部访问端口不修改的情况下,要把Linux的MySQL服务停掉
#service mysql stop
#反之,将3306换成其它的
    command: [
            '--character-set-server=utf8mb4',
            '--collation-server=utf8mb4_unicode_ci'
    ]
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    networks:
      webnet:
        ipv4_address: 15.22.0.6
  nginx:
      image: nginx
      container_name: "nginx-tomcat"
      ports:
          - 8080:8080
      volumes:
          - ./default.conf:/etc/nginx/conf.d/default.conf # 挂载配置文件
      tty: true
      stdin_open: true
      networks:
       webnet:
        ipv4_address: 15.22.0.7
networks:   #网络设置
 webnet:
   driver: bridge  #网桥模式
   ipam:
     config:
      - 
       subnet: 15.22.0.0/24   #子网

-Dockerfile

#  这个是构建MySQL的dockerfile
FROM registry.saas.hand-china.com/tools/mysql:5.7.17
# mysql的工作位置
ENV WORK_PATH /usr/local/
# 定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
#复制gropshop.sql到/usr/local 
COPY grogshop.sql  /usr/local/
#把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
COPY docker-entrypoint.sh  $AUTO_RUN_DIR/
#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/docker-entrypoint.sh
# 设置容器启动时执行的命令
#CMD ["sh", "/docker-entrypoint-initdb.d/import.sh"]

-default.conf

upstream tomcat123 {
    server tomcat00:8080;
}

server {
    listen 8080;
    server_name localhost;

    location / {
        proxy_pass http://tomcat123;
    }
}
  • 查看树结构

  • 重新启动容器sudo docker-compose up -d

  • 再次访问网页

3.使用Docker搭建大数据集群环境

(1)创建build文件,创建并运行容器

sudo docker run -it -v /home/hadoop/build:/root/build --name ubuntu ubuntu

  • 首先安装JDK,解压预先准备好的压缩包

  • 输入ls /usr/lib/jvm查看是否成功

  • JDK环境配置,输入命令vim ~/.bashrc进行如下图环境变量的配置(vim 中:i 进入输入模式,esc 进入命令模式,:进入末行模式)

  • 使用:wq保存退出后查看输入java -version查看是否配置成功,结果如下图,已配置成功

  • 安装Hadoop及其环境配置,将安装包解压到目标目录下,并查看是否成功

  • 输入vim ~/.bashrc进入如下配置,操作方法同上

  • 查看hadoop版本,出现下图,则证明配置成功。

  • 免密登录配置,指令输入,期间一直按回车就行

  • 新开一个终端,保存该配置好的镜像
    udo docker commit 容器id ubuntu:jdk8 #保存说明是jkd8版本的ubuntu

  • 利用配置好的镜像创建运行一个新的容器
    sudo docker run -it -v /home/badoop/build:/root/build --name ubuntu-jdk8 ubuntu:jdk8

(2)配置Hadoop集群

  • hadoop-env.sh
    cd /usr/local/hadoop-3.1.3/etc/hadoop #进入配置文件存放目录 vim hadoop-env.sh export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ # 在任意位置添加

  • core-site.xml
    <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop-3.1.3/tmp</value> <description>A base for other temporary derectories.</description> </property> </configuration>

  • hdfs-site.xml
    <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/name</value> </property> <property> <name>dfs.namenode.data.dir</name> <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/data</value> </property> </configuration>

  • mapred-site.xml
    <configuration> <property> <!--使用yarn运行MapReduce程序--> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <!--jobhistory地址host:port--> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <!--jobhistory的web地址host:port--> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <!--指定MR应用程序的类路径--> <name>mapreduce.application.classpath</name> <value>/usr/local/hadoop-3.1.3/share/hadoop/mapreduce/lib/*,/usr/local/hadoop-3.1.3/share/hadoop/mapreduce/*</value> </property> </configuration>

  • yarn-site.xml
    <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.5</value> </property> </configuration>

(3)运行Hadoop集群

  • 新开三个终端分别运行ubuntu_hadoop镜像,表示Hadoop集群中的master,slave01和slave02
    `

第一个终端

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
`

  • 三个终端分别打开/etc/hosts,根据各自ip修改为如下形式
  • 在master结点测试ssh;连接到slave结点
    ssh slave01 ssh slave02 exit # 退出
  • 修改master上workers文件,将localhost修改为如下所示
    vim /usr/local/hadoop-3.1.3/etc/hadoop/workers slave01 slave02

(4)测试Hadoop集群

  • 启动hdfs 初次启动需要格式化
    cd /usr/local/hadoop-3.1.3 bin/hdfs namenode -format #首次启动Hadoop需要格式化 sbin/start-all.sh #启动所有服务

  • 输入jps查看三个终端,如果出现下图则证明启动成功,未出现则需要切查看日志排除原因


  • 建立hdfs文件夹
    cd /usr/local/hadoop-3.1.3 bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/root bin/hdfs dfs -mkdir input

  • 在master终端上vim一个测试样例test.txt,内容随意字符串,上传到input文件下
    bin/hdfs dfs -put ~/test.txt input

  • 运行功能为计算字符串个数的jar包
    bin/hadoop jar /usr/local/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount input output

  • cat查看output文件夹结果显示
    ./bin/hdfs dfs -cat output/*

  • 验证完成,关闭hdfs,这条指令在每次完成实验都需要执行
    sbin/stop-all.sh

4.遇到的问题

在做第二个实验的时候,配置完成去访问网页的时候出现如下问题

经同学指正我连接的是数据库而不是tomcat,端口更正后即可成功访问

5.经验和感想

由于之前未接触过这类知识,做起来本就比较坎坷,再加上本次实验量非常多,花费了更多时间去学习和操作。感谢那些提前做好的同学供我们参考,以及群里积极回答我们困难的同学。

6.完成作业所花的时间

本次实验经过学习,动手操作,改正问题,解决疑难,写博客,共花费了15小时左右。

原文地址:https://www.cnblogs.com/rxdd/p/12912180.html