第4次实践作业

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

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

(1)nginx反向代理原理

客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

(2)nginx代理tomcat集群

docker-compose.yml

 

nginx配置default.conf

sudo docker-compose up -d --build

 

 

 访问localhost

(3)nginx的负载均衡策略

 轮询策略测试负载均衡

 

 

 频率相同

 修改default.conf

 

重启

 

 

 权重策略测试负载均衡

 

 

 

 可以看出频率最大为tomcat3,其次tomcat2,最后tomcat1.

 

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

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

(1)项目结构

 参考了这篇博客

 

docker-compose.yml

version: "3"   #版本
services:     #服务节点
  tomcat00:     #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
  tomcat01:     #tomcat 服务
    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" 
#红色的外部访问端口不修改的情况下,要把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
      depends_on:
          - tomcat00
          - tomcat01
      networks:
       webnet:
        ipv4_address: 15.22.0.7
networks:   #网络设置
 webnet:
   driver: bridge  #网桥模式
   ipam:
     config:
      - 
       subnet: 15.22.0.0/24   #子网

docker-entrypoint.sh

 

 

 Dockerfile

 

 

 

 

default.conf

 

 

(2)修改连接数据库的IP

 

 

(3)启动容器

 

 

 

(4)浏览器访问

 

输入账号sa,密码123,登录

 

 

 

 

查询数据库

 

 

 

 

三、使用Docker搭建大数据集群环境

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

(1)在Docker安装Ubuntu系统

 

 

 创建build文件 运行容器,进入容器换源

 

 

 更新系统软件源

安装vim和ssh

 

 

 

 

开启ssh服务器

 

 

 在.bashrc的最后一行加入/etc/init.d/ssh start

 

配置ssh

 

 

 

 

 

(2)安装Java

 安装jdk

apt install openjdk-8-jdk 
vim ~/.bashrc       # 在文件末尾添加以下两行,配置Java环境变量:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc # 使~/.bashrc生效

 

 

 

 

 

 java安装成功

 

 

 保存镜像文件

 

(3)安装Hadoop

 开启保存的镜像

sudo docker run -it -v /home/cy/build:/root/build --name ubuntu-jdk8 ubuntu/jdk8

下载hadoop压缩包到/home/cy/build,解压安装

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

配置并测试安装

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

安装成功

 

 

(4)配置Hadoop集群

修改hadoop_env.sh的环境变量

cd /usr/local/hadoop-3.1.3/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-3.1.3/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.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/name</value>
    </property>
    <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/data</value>
    </property>
    <property>
                <name>dfs.permissions.enabled</name>
                <value>false</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.1.3</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.1.3</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.1.3</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>
        <property>
               <name>yarn.nodemanager.vmem-pmem-ratio</name>
               <value>2.5</value>
        </property>
</configuration>

修改start-dfs.sh和stop-dfs.sh

cd /usr/local/hadoop-3.1.3/sbin
#加入下面的内容
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集群

保存镜像

sudo docker commit 容器id ubuntu/hadoopinstalled

运行三个终端

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

三个终端分别打开/etc/hosts,修改ip

vim /etc/hosts
172.17.0.4      master
172.17.0.5      slave01
172.17.0.6      slave02

检测是否连接成功

ssh slave01
exit
ssh slave02
exit 

修改slaves的主机名

vim etc/hadoop/workers
slave01
slave02

(6)启动并测试Hadoop集群

cd /usr/local/hadoop-3.1.3
bin/hdfs namenode -format   
sbin/start-all.sh              #启动所有服务

jps查看

 

 

 

 

 

(7)运行Hadoop实例程序

 master上创建用户输入目录

bin/hdfs dfs -mkdir -p /user/hadoop/input

把输入的xml文件传到input

bin/hdfs dfs -put ./etc/hadoop/*.xml /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/*

 

四、遇到的问题和解决方法

在运行javaweb项目时报错如下

按照提示删除相应的容器即可解决

 

 

五、感想和所花时间

好难,花了一整天。。。

 

posted @ 2020-05-19 00:17  11111111111  阅读(168)  评论(0编辑  收藏  举报