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


    作业链接

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

    1.1 nginx 反向代理原理

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

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

    • 文档结构

      ├── docker-compose.yml
      ├── nginx
      │   └── default.conf
      ├── webapps
      │   └── index.jsp
      └── list4.py
      
    • nginx配置文件default.conf

    upstream tomcats {
             server tomcat1:7070;
             server tomcat2:7071;
             server tomcat3:7072;
        }
    
        server {
            listen 2420;
            server_name localhost;
    
            location / {
                proxy_pass http://tomcats; # 请求转向tomcats
            }
        }
    
    • docker-compose.yml

      version: "3.8"
      services:
        nginx:
          image: nginx
          container_name: ex4ngx
          ports:
            - 80:2420
          volumes:
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # 挂载配置文件
          depends_on:
            - tomcat01
            - tomcat02
            - tomcat03
      
        tomcat01:
          hostname: tomcat01
          image: tomcat
          container_name: tomcat1
          volumes:
            - ./webapps:/usr/local/tomcat/webapps/ROOT # 挂载web目录
      
      
        tomcat02:
          hostname: tomcat2
          image: tomcat
          container_name: tomcat2
          volumes:
            - ./webapps:/usr/local/tomcat/webapps/ROOT # 挂载web目录
      
      
        tomcat03:
          hostname: tomcat03
          image: tomcat
          container_name: tomcat3
          volumes:
            - ./webapps:/usr/local/tomcat/webapps/ROOT # 挂载web目录
      
    • index.jsp

      <%@ page language="java" contentType="text/html; charset=utf-8"  import="java.net.InetAddress"  
                  pageEncoding="utf-8"%>  
              <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
              <html>  
              <head>  
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
              <title>Nginx+Tomcat负载均衡</title>  
              </head> 
              <body>  
                   <%  
                       InetAddress addr = InetAddress.getLocalHost();  
                       out.println("主机地址:"+addr.getHostAddress());  
                       out.println("主机名:"+addr.getHostName());   
                    %>  
              </body>  
              </html>
      

    1.3了解nginx的负载均衡策略,并至少实现nginx的2种负载均衡策略

    • 爬虫代码

      import requests
      import re
      
      url = 'http://localhost/index.jsp'
      for i in range(0,6):
          res = requests.get(url)
          text = re.findall('tomcat[0-9]{2}',res.text,re.S)
          print(text)
      
    • 轮询策略:
      默认就是轮询算法

    • 权重策略:

      修改default.conf

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

    文件目录

    ├── docker-compose.yml
    ├── default.conf
    ├── docker-entrypoint.sh
    ├── Dockerfile
    ├── drogshop.sql
    └── webapps
    
    • docker-compose.yml

      version: "3"   #版本
      services:     #服务节点
        tomcat01:     #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
        tomcat02:     #tomcat 服务
          image: tomcat    #镜像
          container_name: tomcat01   #容器名
          ports:      #端口
           - "5051:8080"
          volumes:  #数据卷
           - "./webapps:/usr/local/tomcat/webapps"
          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
            networks:
             webnet:
              ipv4_address: 15.22.0.7
      networks:   #网络设置
       webnet:
         driver: bridge  #网桥模式
         ipam:
           config:
            - 
             subnet: 15.22.0.0/24   #子网
      
    • default.conf

      upstream tomcat123 {
          server tomcat00:8080;      
          server tomcat01:8080;
      }
      
      server {
          listen 8080;      
          server_name localhost;
      
          location / {
              proxy_pass http://tomcat123;
          }
      }
      
    • 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"]
      
    • docker-entrypoint.sh

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

      根据路径找到/webapps/ssmgrogshop_war/WEB-INF/classes/jdbc.properties
      并进行编辑,其中192.168.1.11应改为本机的ip地址,端口号不变

    • 创建容器

      输入docker-compose up -d --build创建容器

    • 检验结果

    • 对数据库进行增加操作

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

    3.1拉取 ubuntu 镜像

    输入docker pull ubuntu来拉取ubuntu镜像

    3.2运行 ubuntu 容器

    执行指令docker run -it -v ~/:/root/build --name ubuntu ubuntu

    这里的/home/usr/local/hadoop-3.1.3指本地目录,而/root/build指容器目录,-v 表示docker内部的ubuntu系统/root/build目录与本地/home/hadoop/build共享;

    3.3更新系统软件源

    输入apt-get update,对系统软件源进行更新

    3.4安装 vim

    vim用以对文本文件进行编辑,输入apt-get install vim进行安装

    3.5安装和配置 sshd

    输入apt-get install ssh进行安装 ssh

    并且输入vim ~/.bashrc对文件进行编辑,在文件最后一行插入以下内容,以便可以自动启动sshd服务:
    /etc/init.d/ssh start

    输入ssh-keygen -t rsa获取密钥,运行过程中一直回车即可
    接着输入cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys将密钥导入文件,然后就可以无密码访问本地sshd服务了

    3.6安装 JDK

    把hadoop的安装包放在~/目录下,然后执行以下代码安装hadoop:

    cd /usr/lib/
    mkdir ./jvm
    

    3.7安装 hadoop

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

    输入vim ~/.bashrc,把以下内容加到文件末尾,以编辑环境变量:

    export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
    export JRE_HOME=$JAVA_HOME/jre
    export HADOOP_HOME=/usr/local/hadoop-3.1.3
    export CLASSPATH=.:$JAVA_HMOE/lib:$JRE_HOME/lib
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin
    

    并输入source ~/.bashrc使~/.bashrc生效

    在目录/usr/local/hadoop-3.1.3/etc/hadoop下,更改hadoop-env.sh文件,在其中新增export JAVA_HOME="/usr/lib/jvm/java-1.11.0-openjdk-amd64"

    3.8检查是否安装成功

    java -version
    
    cd /usr/local/hadoop-3.1.3
    ./bin/hadoop version
    

    3.9配置文件编写

    内容均在<configuration></configuration>之间

    • core-site.xml

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

      <configuration>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>file:/usr/local/hadoop/namenode_dir</value>
          </property>
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/usr/local/hadoop/datanode_dir</value>
          </property>
          <property>
              <name>dfs.replication</name>
              <value>3</value>
          </property>
      </configuration>
      
    • mapred-site.xml

      <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
          </property>
        </configuration>
      
    • yarn-site.xml

      <configuration>
        <!-- Site specific YARN configuration properties -->
            <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
            </property>
            <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
            </property>
        </configuration>
      
    • 保存镜像

    • 查看 ip 并复制填写,测试连通

      172.17.0.3 master

      172.17.0.4 slave01

      172.17.0.5 slave02


    • 配置workers文件

      hadoop集群配置的最后一步,就是在master目录/usr/local/hadoop-3.1.3/etc/hadoop/中输入vim workers编辑workers文件
      将其中的localhost替换为

      slave01
      slave02
      

    3.10运行实例grep

    • 在 hdfs 上创建一个目录

      输入./bin/hdfs dfs -mkdir -p /user/hadoop/input

    • 拷贝文件

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

    • 验证结果

      dfs -ls /user/hadoop/input

    • 执行程序

      输入./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input output 'dfs[a-z.]+'

  • 相关阅读:
    信息收集与扫描
    流密码
    信息安全面临的威胁
    .net core Web应用启动类
    .net core 1.0 Web MVC 自定义认证过程
    彻底脱离循环与结束当下循环
    Java多线程:Thread中的实例方法
    memcached安装问题
    五月的仓颉
    json时间格式化方法
  • 原文地址:https://www.cnblogs.com/huaranmeng/p/12894205.html
Copyright © 2020-2023  润新知