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


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

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

    理解nginx反向代理原理

    正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理人的角色 ,称之为代理服务器,于是客户端把请求发给代理服务器,由代理服务器获得目标服务器的数据并返回给客户端。客户端是清楚目标服务器的地址的,而目标服务器是不清楚来自客户端,它只知道来自哪个代理服务器,所以正向代理可以屏蔽或隐藏客户端的信息。
    反向代理:从上面的正向代理,你会大概知道代理服务器是为客户端作代理人,它是站在客户端这边的。其实反向代理就是代理服务器为服务器作代理人,站在服务器这边,它就是对外屏蔽了服务器的信息,常用的场景就是多台服务器分布式部署,像一些大的网站,由于访问人数很多,就需要多台服务器来解决人数多的问题,这时这些服务器就由一个反向代理服务器来代理,客户端发来请求,先由反向代理服务器,然后按一定的规则分发到明确的服务器,而客户端不知道是哪台服务器。常常用nginx来作反向代理。
    Nginx的负载均衡:
    负载:就是Nginx接受请求
    均衡:Nginx将收到的请求按照一定的规则分发到不同的服务器进行处理

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

    创建如下

    编写docker-compose.yml

    编写nginx的默认配置文件

    编写index.html分别为01/02/03

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

    这里选择测试默认的轮询算法和指定权重算法
    运行yml文件

    sudo docker-compose up -d --build
    


    轮询算法
    可以通过浏览器访问localhost发现是可以成功访问之前设置的index.html界面,刷新界面会轮询
    用以下指令可以可以看出

    权重算法
    更改default.conf文件

    重新执行

    sudo docker-compose up -d --build
    

    测试

    可以看出2>3>1

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

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

    文件配置
    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
      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 tomcats {
        server tomcat00:5050; 
    
    }
    
    server {
        listen 8080
        server_name localhost;
    
        location / {
            proxy_pass http://tomcat123;
            proxy_set_header   Host    $host; 
            proxy_set_header   X-Real-IP   $remote_addr; 
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    
        }
    }
    

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

    通过指令ifconfig -a查询本机IP 修改文件

    启动容器

    docker-compose up -d --build
    


    访问网页,登陆

    http://172.19.0.1:5050/ssmgrogshop_war
    

    可以进行一系列数据库操作

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

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

    要求:
    完成hadoop分布式集群环境配置,至少包含三个节点(一个master,两个slave);
    成功运行hadoop 自带的测试实例。

    环境搭建
    拉取ubantu镜像

    docker pull ubantu
    

    创建dockerfile文件

    FROM ubuntu
    maintainer yuqiancha
    

    进入ubantu容器

    docker build -t ubuntu .
    docker run -it --name ubuntu ubuntu
    

    更新系统软件源
    更新系统源命令如下:

    apt-get update
    

    安装vim

    apt-get install vim
    

    安装sshd
    接着安装sshd,因为在开启分布式Hadoop时,需要用到ssh连接slave:

    apt-get install ssh
    

    然后运行如下脚本即可开启sshd服务器:

    /etc/init.d/ssh start
    

    但是这样的话,就需要每次在开启镜像时,都需要手动开启sshd服务,因此我们把这启动命令写进~/.bashrc文件,这样我们每次登录Ubuntu系统时,都能自动启动sshd服务;

    vim ~/.bashrc
    

    在该文件中最后一行添加如下内容:

    /etc/init.d/ssh start
    

    配置sshd
    安装好sshd之后,我们需要配置ssh无密码连接本地sshd服务,如下命令:

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

    执行完上述命令之后,即可无密码访问本地sshd服务;

    安装JDK
    根据官方文档,最好下载java8

    apt install openjdk-8-jdk
    

    安装好后需要配置环境变量

    vim ~/.bashrc  #打开配置文件
    #在最后添加使~/.bashrc生效
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
    export PATH=$PATH:$JAVA_HOME/bin
    source ~/.bashrc  
    

    安装Hadoop

    tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local
    cd /usr/local/hadoop-3.2.1
    ./bin/hadoop version
    


    配置Hadoop集群
    进入配置文件存放目录:

    cd /usr/local/hadoop-3.2.1/etc/hadoop
    

    修改环境变量

    vim hadoop-env.sh
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ 
    

    修改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>
        <property>
            <name>yarn.app.mapreduce.am.env</name>
            <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1</value>
        </property>
        <property>
            <name>mapreduce.map.env</name>
            <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1</value>
        </property>
        <property>
            <name>mapreduce.reduce.env</name>
            <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1</value>
        </property>
    </configuration>
    

    修改yarn-site.xml
    添加

    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
    </configuration>
    

    修改脚本
    进入脚本文件存放目录:

    cd /usr/local/hadoop-3.2.1/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
    

    运行Hadoop集群
    在三个终端上开启三个容器运行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

    vim /etc/hosts
    

    修改为

    172.17.0.2      master
    172.17.0.3      slave01
    172.17.0.4      slave02
    

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

    ssh slave01
    ssh slave02
    exit #退出
    


    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                            #分别查看三个终端
    

    运行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.2.1.jar grep /user/hadoop/input output 'dfs[a-z.]+'
    bin/hdfs dfs -cat output/*
    

    (4)实验总结

    实验的工作量还是挺大的,中间也遇见了很多问题。实验还是需要去理解原理,认真细心些还是为好。也真的学到了很多东西,还是很有用的。
    记录完成作业所花的时间
    第一个实验还是挺轻松的,很快。
    第二和第三个实验很麻烦,大概用了一晚上加一下午的时间。

  • 相关阅读:
    app测试点
    【Android自动化打包】03. APK的数字签名
    【转】测试架构师团队的管理
    【转】用户体验质量的测试方法论-“你的风扇方案”
    【转】大数据本质与测试
    jquery 获取下拉框值与select text
    js获取下拉,单选
    jquery插件
    加密
    plsql 只能识别32位的oracle解决办法
  • 原文地址:https://www.cnblogs.com/spongebobyjh/p/12911263.html
Copyright © 2020-2023  润新知