第4次实践作业

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

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

(1)nginx反向代理原理

客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

(2)nginx代理tomcat集群

docker-compose.yml

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

 

nginx配置default.conf

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

sudo docker-compose up -d --build

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

 

 

 访问localhost

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

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

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

(3)nginx的负载均衡策略

 轮询策略测试负载均衡

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

 

 

 频率相同

 修改default.conf

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

重启

 

 

 权重策略测试负载均衡

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

 

 

 可以看出频率最大为tomcat3,其次tomcat2,最后tomcat1.

 

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

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

(1)项目结构

 参考了这篇博客

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

 

docker-compose.yml

version: "3"   #版本
services:     #服务节点
  tomcat00:     #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
  tomcat01:     #tomcat 服务
    image: tomcat    #镜像
    hostname: hostname       #容器的主机名
    container_name: tomcat01   #容器名
    ports:      #端口
     - "5055:8080"
    volumes:  #数据卷
     - "./webapps:/usr/local/tomcat/webapps"
     - ./wait-for-it.sh:/wait-for-it.sh
    networks:   #网络设置静态IP
      webnet:
        ipv4_address: 15.22.0.16
  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
      depends_on:
          - tomcat00
          - tomcat01
      networks:
       webnet:
        ipv4_address: 15.22.0.7
networks:   #网络设置
 webnet:
   driver: bridge  #网桥模式
   ipam:
     config:
      - 
       subnet: 15.22.0.0/24   #子网

docker-entrypoint.sh

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

 

 

 Dockerfile

 

 

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

 

default.conf

 

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

(2)修改连接数据库的IP

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

 

 

(3)启动容器

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

 

 

(4)浏览器访问

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

 

输入账号sa,密码123,登录

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

 

 

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

 

查询数据库

 

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

 

 

 

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

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

(1)在Docker安装Ubuntu系统

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

 

 

 创建build文件 运行容器,进入容器换源

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

 

 

 更新系统软件源

安装vim和ssh

 

 

 

 

开启ssh服务器

 

 

 在.bashrc的最后一行加入/etc/init.d/ssh start

 

配置ssh

 

 

 

 

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

(2)安装Java

 安装jdk

apt install openjdk-8-jdk 
vim ~/.bashrc       # 在文件末尾添加以下两行,配置Java环境变量:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc # 使~/.bashrc生效

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

 

 

 

 

 

 java安装成功

 

 

 保存镜像文件

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

(3)安装Hadoop

 开启保存的镜像

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

下载hadoop压缩包到/home/cy/build,解压安装

cd /root/build
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local

配置并测试安装

cd /usr/local/hadoop-3.1.3
vim ~/.bashrc  
export HADOOP_HOME=/usr/local/hadoop-3.1.3
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin
source ~/.bashrc # 使.bashrc生效
hadoop version

安装成功

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

 

 

(4)配置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


           
                  hadoop.tmp.dir
                  file:/usr/local/hadoop-3.1.3/tmp
                  Abase for other temporary directories.
          
          
                  fs.defaultFS
                  hdfs://master:9000
          

修改hdfs-site.xml


        
                dfs.replication
                1
        
        
                dfs.namenode.name.dir
                file:/usr/local/hadoop-3.1.3/tmp/dfs/name
    
    
                dfs.datanode.data.dir
                file:/usr/local/hadoop-3.1.3/tmp/dfs/data
    
    
                dfs.permissions.enabled
                false
        

修改mapred-site.xml


    
        mapreduce.framework.name
        yarn
    
    
        yarn.app.mapreduce.am.env
        HADOOP_MAPRED_HOME=/usr/local/hadoop-3.1.3
    
    
        mapreduce.map.env
        HADOOP_MAPRED_HOME=/usr/local/hadoop-3.1.3
    
    
        mapreduce.reduce.env
        HADOOP_MAPRED_HOME=/usr/local/hadoop-3.1.3
    

修改yarn-site.xml



        
               yarn.nodemanager.aux-services
               mapreduce_shuffle
        
        
               yarn.resourcemanager.hostname
               Master
        
        
               yarn.nodemanager.vmem-pmem-ratio
               2.5
        

修改start-dfs.sh和stop-dfs.sh

cd /usr/local/hadoop-3.1.3/sbin
#加入下面的内容
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

(5)运行Hadoop集群

保存镜像

sudo docker commit 容器id ubuntu/hadoopinstalled

运行三个终端

# 第一个终端
sudo docker run -it -h master --name master ubuntu/hadoopinstalled
# 第二个终端
sudo docker run -it -h slave01 --name slave01 ubuntu/hadoopinstalled
# 第三个终端
sudo docker run -it -h slave02 --name slave02 ubuntu/hadoopinstalled

三个终端分别打开/etc/hosts,修改ip

vim /etc/hosts
172.17.0.4      master
172.17.0.5      slave01
172.17.0.6      slave02

检测是否连接成功

ssh slave01
exit
ssh slave02
exit 

修改slaves的主机名

vim etc/hadoop/workers
slave01
slave02

(6)启动并测试Hadoop集群

cd /usr/local/hadoop-3.1.3
bin/hdfs namenode -format   
sbin/start-all.sh              #启动所有服务

jps查看

 

 

 

 

 

(7)运行Hadoop实例程序

 master上创建用户输入目录

bin/hdfs dfs -mkdir -p /user/hadoop/input

把输入的xml文件传到input

bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input

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

 

 执行

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 output/*

 

四、遇到的问题和解决方法

在运行javaweb项目时报错如下

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

按照提示删除相应的容器即可解决

 

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

五、感想和所花时间

好难,花了一整天。。。

 

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