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

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


  • 理解nginx反向代理原理

    • 理解nginx反向代理原理

      反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

      2020系统综合实践 第4次实践作业_第1张图片

    • nginx代理tomcat集群

      下载tomcat

      sudo docker pull tomcat 
      

      目录结构

      2020系统综合实践 第4次实践作业_第2张图片

      配置文件

      default.conf

      upstream tomcat_client{
      	server t01:8080;
      	server t02:8080;
      	server t03:8080;
      } 
      server {
      	server_name localhost;
      	listen 2504;
      	location / {
      		proxy_pass http://tomcat_client;
      	}
      }
      

      docker-compose.yml

      version: "3"
      services:
        tomcat001:
          image: tomcat:8.5.0
          ports:
            - "8081:8080"
          restart: "always"
          container_name: tomcat001
          volumes:
            - ./tomcat1:/usr/local/tomcat/webapps/ROOT # 挂载web目录
        tomcat002:
          image: tomcat:8.5.0
          ports:
            - "8082:8080"
          container_name: tomcat002
          restart: "always"
          volumes:
            - ./tomcat2:/usr/local/tomcat/webapps/ROOT
        tomcat003:
          image: tomcat:8.5.0
          ports:
            - "8083:8080"
          container_name: tomcat003
          restart: "always"
          volumes:
            - ./tomcat3:/usr/local/tomcat/webapps/ROOT
        nginx:
          image: nginx
          volumes:
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
          ports:
            - "80:2504"
          container_name: ngx_lr
          links:
            - tomcat001:t01
            - tomcat002:t02
            - tomcat003:t03
      

      启动docker-compose之前日常service apache2 stop 关闭占用端口80的apache2

      启动docker-compose

      sudo docker-compose up -d
      

      查看容器

      sudo docker ps -a
      

      2020系统综合实践 第4次实践作业_第3张图片

      访问localhost

      2020系统综合实践 第4次实践作业_第4张图片
      2020系统综合实践 第4次实践作业_第5张图片
      2020系统综合实践 第4次实践作业_第6张图片

    • 检查负载均衡

      • 轮询

        2020系统综合实践 第4次实践作业_第7张图片

      • 权重

        在轮询的基础上指定轮询概率(weight),访问与权重成正比

        upstream tomcats_client {
            server t01:8080 weight=1;
            server t02:8080 weight=2;
            server t03:8080 weight=3;
        }
        



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

使用参考的教程

目录结构

2020系统综合实践 第4次实践作业_第8张图片

docker-compose.yml

2020系统综合实践 第4次实践作业_第9张图片

default.conf

2020系统综合实践 第4次实践作业_第10张图片

jdbc.properties

运行后进入http://10.0.2.15:5050/ssmgrogshop_war

进行简单的数据库操作

2020系统综合实践 第4次实践作业_第11张图片




###使用Docker搭建大数据集群环境
  • pull ubuntu 镜像

    sudo docker pull ubuntu
    dokcer images #查看镜像
    cd ~
    mkdir build
    sudo docker run -it -v /home/hadoop/build:/root/build --name ubuntu ubuntu
    
  • 容器初始化

    安装必要工具:

    sudo apt-get update
    sudo apt-get install vim      
    

    安装sshd

    sudo apt-get install ssh
    

    开启sshd服务器,将命令写入~/.bashrc最后一行实现登录自启

    /etc/init.d/ssh start
    

    配置ssh无密码连接本地服务

    ssh-keygen -t rsa #一直按回车键即可
    cat id_dsa.pub >> authorized_keys
    

    安装jdk

    直接从官方或其他途径下载java jdk压缩包解压或者使用指令sudo apt-get install default-jdk直接安装(用时较长);

    在文件~/.bashrc添加 JAVA_HOME、PATH配置;

    通过指令 source ~/.bashrc 生效;通过 java -version 检查配置是否成功

    保存镜像文件

  • 在Docker内部的容器做的修改是不会自动保存到镜像的。因此我们需要保存当前的配置;为了达到复用配置信息,我们在每个步骤完成之后,都保存成一个新的镜像,然后开启保存的新镜像即可

    保存到镜像

    sudo docker commint 容器id [name]
    
  • 安装hadoop

    开启保存的ubuntu/jdkinstalled镜像

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

    把hadoop压缩包放在共享文件夹/home/hadoop/build下面

    安装hadoop

    docker cp ./build/hadoop-3.1.3.tar.gz 容器ID:/root/build
    cd /root/build
    tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local
    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 #检测hadoop安装成功
    
  • 配置hadoop集群

    进入配置目录

    cd /usr/local/hadoop-3.1.3/etc/hadoop   
    

    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
            
    
    

    进入脚本目录
    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
    

    利用构建好的镜像运行主机

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



    三个终端分别打开/etc/hosts,根据各自ip修改为如下形式

    172.17.0.3      master
    172.17.0.4      slave01
    172.17.0.5      slave02
    

    2020系统综合实践 第4次实践作业_第12张图片

    2020系统综合实践 第4次实践作业_第13张图片

    2020系统综合实践 第4次实践作业_第14张图片

    在master结点测试ssh;连接到slave结点

    ssh slave01
    ssh slave02
    exit #退出
    

    2020系统综合实践 第4次实践作业_第15张图片

    2020系统综合实践 第4次实践作业_第16张图片

    master主机上修改workers
    vim /usr/local/hadoop-3.1.3/etc/hadoop/workers

    slave01
    slave02
    

    测试Hadoop集群

    #在master上操作
    cd /usr/local/hadoop-3.1.3
    bin/hdfs namenode -format      #首次启动Hadoop需要格式化
    sbin/start-all.sh              #启动所有服务
    jps                            #分别查看三个终端  ![img](https://img2020.cnblogs.com/blog/1466638/202005/1466638-20200517003757898-1869774780.png)
    

    2020系统综合实践 第4次实践作业_第17张图片
    ...
    ...

    运行Hadoop实例程序

    bin/hdfs dfs -mkdir -p /user/hadoop/input
    bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input
    bin/hdfs dfs -ls /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 output/*
    

    2020系统综合实践 第4次实践作业_第18张图片


  • 总结

    ​ 这次实验量较大,做的比较崎岖,尤其最后一个实验,前前后后大概花了12个小时左右,从中碰到很多问题,也解决了很多问题,收获了很多。

    ​ 第一个实验相对比较顺利,第二个实验用了老师的参考程序大体上也没碰到什么问题。最后一个实验相对量比较大,好在有之间昨晚的同学的参考,加上大数据实践课上学习,相对之前几次实践少踩了些坑。

你可能感兴趣的:(2020系统综合实践 第4次实践作业)