zoukankan      html  css  js  c++  java
  • 系统综合实践第四次作业

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

    参考资料
    拉取镜像

    创建如下目录文件

    docker-compose.yml

    version: "3"
    services:
        nginx:
            image: nginx:latest
            ports:
                - "80:80"
            volumes:
                - ./nginx/default.conf:/etc/nginx/conf.d/default.conf 
            depends_on:
                - tomcat1
                - tomcat2
                - tomcat3
    
        tomcat1:
            image: tomcat:latest
            container_name: tomcat1
            volumes:
                - ./tomcat1:/usr/local/tomcat/webapps/ROOT 
    
        tomcat2:
            image: tomcat:latest
            container_name: tomcat2
            volumes:
                - ./tomcat2:/usr/local/tomcat/webapps/ROOT
    
        tomcat3:
            image: tomcat:latest
            container_name: tomcat3
            volumes:
                - ./tomcat3:/usr/local/tomcat/webapps/ROOT
    

    default.conf

    upstream tomcats {
        server tomcat1:8080; 
        server tomcat2:8080; 
        server tomcat3:8080; 
    }
    
    server {
        listen 80;
        server_name localhost;
    
        location / {
            proxy_pass http://tomcats; # 请求转向tomcats
        }
    }
    

    运行docker-compose

    sudo docker-compose up -d
    

    浏览器查看

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

    1.负载均衡策略:轮询策略
    编写test.py文件

    import requests
    
    for i in range(0,10):
        reponse=requests.get("http://localhost")
        print(reponse.text)
    

    运行test.py查看

    2.负载均衡策略:权重策略
    修改default.conf

    upstream tomcats {
        server tomcat1:8080 weight=3; 
        server tomcat2:8080 weight=2; 
        server tomcat3:8080 weight=1; 
    }
    
    server {
        listen 80;
        server_name localhost;
    
        location / {
            proxy_pass http://tomcats; # 请求转向tomcats
        }
    }
    

    重启docker-compose

    sudo docker restart tomcat_nginx_1
    

    运行test.py查看:可以明显看到比例tomcat1:tomcat2:tomcat3=3:2:1

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

    参考资料

    文件目录

    docker-compose.yml

    version: "3"   
    services:    
      tomcat00:     
        image: tomcat    
        hostname: hostname       
        container_name: tomcat00   
        ports:      
         - "5050:8080"          #后面访问网页的时候要选择对应的端口号5050
        volumes:  #数据卷
         - "./webapps:/usr/local/tomcat/webapps"
         - ./wait-for-it.sh:/wait-for-it.sh
        networks:   #网络设置静态IP
          webnet:
            ipv4_address: 15.22.0.15
      tomcat01:     
        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" 
    
        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   #子网
    

    default.conf

    upstream tomcat {
        server tomcat00:8080;
        server tomcat01:8080;
    }
    
    server {
        listen 8080;
        server_name localhost;
    
        location / {
            proxy_pass http://tomcat;
        }
    }
    

    docker-entrypoint.sh

    #!/bin/bash
    mysql -uroot -p123456 << EOF
    source /usr/local/grogshop.sql;
    

    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"]
    

    修改连接数据库的IP:
    通过ip config -a查看本机ip地址,inet对应的即为结果
    修改jdbc.properties对应的ip地址和之前设置的对应端口号

    启动容器

    sudo docker-compose up -d
    

    进入浏览器访问

    查看数据库

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

    参考资料

    1.环境搭建

    Dockerfile

     FROM ubuntu
     #基础镜像
     maintainer lin
     #维护者信息
    

    创建并运行容器

    sudo docker build -t ubuntu:18.04 .
    sudo docker run -it --name ubuntu ubuntu:18.04
    

    环境初始化

    apt-get update # 更新系统源
    apt-get install vim # 用于修改配置文件
    apt-get install ssh # 安装sshd,因为在开启分布式Hadoop时,需要用到ssh连接slave:
    /etc/init.d/ssh start # 运行脚本即可开启sshd服务器
    

    设置ssh免密登录

    使用 rsa 算法生成私钥 id_rsa 和公钥 id_rsa.pub,中间过程有提示的地方直接按回车;

    将生成的公钥追加到授权 authorized_keys 中;

    可以免密登录了

    2.JDK安装

    之前已经安装过JDK,这是环境变量配置,通过vim ~/.bashrc进入按i插入

    3.Hadoop安装

    通过压缩包安装,直接查看安装是否成功

    4.配置Hadoop集群

    core-site.xml

    hdfs-site.xml

    mapred-site.xml

    yarn-site.xml

    进入脚本目录

    cd /home/lin/hadoop/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
    

    5.运行Hadoop

    打开三个终端,分别表示Hadoop集群中的master,slave01和slave02

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

    配置master,slave01和slave02的地址信息:vim /etc/hosts

    172.17.0.3      master
    172.17.0.4      slave01
    172.17.0.5      slave02
    



    测试ssh

    ssh slave01
    ssh slave02
    


    master主机上修改workers

    vim /home/lin/hadoop/hadoop-3.1.3/etc/hadoop/workers
    

    localhost修改为:

    slave01
    slave02
    

    执行命令 jps 验证是否成功启动Hadoop


    运行grep实例
    用户主目录中新建 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/*
    

    (4)总结

    所花时间:

    学习:3小时
    实践:6小时
    写博客:2小时
    总计:11小时

    心得:

    Hadoop实验下虚拟机内存2G有点不够用,建议3G。因为上大数据课程刚做过Hadoop实验,所以本次第三个实验做起来也比较快,就是运行在docker环境下。当然也有不会的地方,多亏了先做完的大佬抬了一手。

  • 相关阅读:
    git命令行clone指定分支、更新、冲突解决、提交代码步骤
    row_number() over() 一句话概括,以及max()函数的一种查询分组中最大值的用法
    在实体类中对与记录数量的属性进行修改时,定义相关方法在实体类中,进行修改时方便
    JQuery 获取多个select标签option的text内容
    Mybatis&orcale update语句中接收参数为对象
    zTree异步加载展开第一级节点
    zTree获取当前节点的下一级子节点数
    Mybatis报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'parentCode' not found. Available parameters are [0, 1, param1, param2]
    ztree插件异步加载 使用RESTEasy报错 Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
    Mybatis 报错 There is no getter for property named '***' in 'class java.lang.String'
  • 原文地址:https://www.cnblogs.com/hurricane1/p/12910840.html
Copyright © 2011-2022 走看看