Fork me on GitHub

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的下载安装也很花时间。

posted @ 2020-05-18 00:21  xbrucken  阅读(193)  评论(0编辑  收藏  举报