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


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

    1.1 理解nginx反向代理原理

    1.2 nginx代理tomcat集群,代理2个以上tomcat

    • 主目录下创建tomcat文件夹,结构如下
    • docker-compose.yml
    • default.conf
    • 开始构建
    sudo docker-compose up -d 
    
    • 访问localhost:

    1.3 实现nginx的2种负载均衡策略

    • 轮询策略下:(为了显示清楚修改了上一步的html)

    可以看出123出现频率相同

    • 权重策略下:
      修改default.conf

    可以看出权重大的出现频率就高:


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

    *使用老师给的博客例子

    • 主目录下创建javaweb文件夹,结构如下
    • docker-compose.yml
    version: "3"   
    services:     
      tomcat:     
        image: tomcat    #镜像
        hostname: hostname       #容器的主机名
        container_name: tomcatjw   #容器名
        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:  
        build: .   #通过MySQL的Dockerfile文件构建MySQL
        image: mymysql:test
        container_name: mysql_0517
        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   #子网
    
    • docker-entrypoint.sh
    • default.conf
    • Dockerfile
    • 修改/home/javaweb/webapps/ssmgrogshop_war/WEB-INF/classes下的jdbc.properties(改成自己的ip地址 可使用ifconfig查看en开头那一项)
    • 开始构建
    sudo docker-compose up -d 
    
    • 访问网页(两个都可以)账号密码为sa、123
    http://127.0.0.1:8080/ssmgrogshop_war
    
    http://localhost:8080/ssmgrogshop_war
    
    • 登陆成功
    • 增删改查(以增为例 其他类似)

    进入mymysql容器可以查看后台数据变化:

    sudo docker exec -it ID /bin/bash
    mysql -u root -p(密码123456)
    show databases;
    use 某数据库;
    show tables;
    select * from 表名
    

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

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

    3.1 完成hadoop分布式集群环境配置(master+2slave)

    • 主目录下创建javaweb文件夹,结构如下
    • Dockerfile
    • source.list
    • 创建并进入容器ubuntu
    docker build -t ubuntu:18.04 .
    docker run -it --name ubuntu ubuntu:18.04
    
    • Ubuntu系统初始化
    apt-get update #更新系统软件源
    apt-get install vim 
    apt-get install ssh #分布式hadoop通过ssh连接
    
    • 注:centos上更新系统软件源太慢了,卡了几个小时下不去,这步之后就换了个虚拟机
    vim ~/.bashrc 
    
    • 在文件末尾添加/etc/init.d/ssh start,实现ssd开机自启动
    • 配置ssh免密登陆
    ssh-keygen -t rsa 
    cd ~/.ssh        
    cat id_rsa.pub >> authorized_keys 
    
    • 安装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 
    
    • 将hadoop-3.1.3.tar.gz放在挂载目录下
    docker cp ./build/hadoop-3.1.3.tar.gz 容器ID:/root/hadoop-3.1.3.tar.gz
    
    • 安装hadoop
    cd /root
    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 
    
    • 查看版本信息
    hadoop version 
    
    • 进入配置目录使用vim修改如下相关文件
    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
    • hdfs-site.xml
    • mapred-site.xml
    • yarn-site.xml
    • 进入脚本目录修改下列文件
    cd /usr/local/hadoop-3.1.3/sbin
    
    • start-dfs.sh和stop-dfs.sh添加如下配置
    • start-yarn.sh和stop-yarn.sh添加如下配置
    • 保存配置好的镜像并命名,查看是否成功
    docker commit 容器ID ubuntu/hadoop 
    docker images
    
    • 开三个终端运行ubuntu/hadoop镜像,分别表示Hadoop集群中的master、slave01和slave02
    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
    • 在master上测试ssh
    ssh slave01
    exit
    ssh slave02
    exit
    
    • 修改master的workers
    vim /usr/local/hadoop-3.1.3/etc/hadoop/workers
    

    3.2 运行hadoop自带的测试实例

    • 第一次使用,格式化文件系统
    hdfs namenode -format
    
    • 开启服务
    sbin/start-all.sh           #启动所有服务
    
    • jps查看三者的启动情况:
    • 新建文件夹input
    hdfs dfs -mkdir -p /user/root/input
    
    • 将测试用例要用的文件放入
    hdfs dfs -put /usr/local/hadoop-3.1.3/etc/hadoop/*s-site.xml input
    
    • 运行示例程序grep
    hadoop jar /usr/local/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+' 
    
    • 查看结果
    hdfs dfs -cat output/* 
    

    4.总结

    • 相关文件
      见上方截图

    • 问题解决
      问题1:使用Docker-compose实现Tomcat+Nginx负载均衡时nginx容器开启后过几秒就会自动关闭
      解决:检查发现是default.conf文件写错了,改对重新运行up -d就不会消失了

      问题2:运行grep例子时虚拟机卡死
      解决:重启多试几次,可以调大内存

    • 时间记录
      20h左右,配置文件经常写错,错又很难找到,非常耗时。中途还换了一次虚拟机,重新配置了一次docker,jdk和hadoop的下载安装也很花时间。

  • 相关阅读:
    C++中获取高精度时间差
    有关宏的一个问题
    HDU 2504 又见GCD
    .NET中统一的存储过程调用方法(收藏)
    如何让你的SQL运行得更快
    最赚钱的5种成功创业可行方式
    SQL语句优化技术分析
    js document.getElementByID("aa")的位置
    写SQL时尽量不要对字段进行运算操作
    连接池的问题
  • 原文地址:https://www.cnblogs.com/xbrucken/p/12902613.html
Copyright © 2020-2023  润新知