摸鱼一号选手

导航

 

(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环境下。当然也有不会的地方,多亏了先做完的大佬抬了一手。

posted on 2020-05-18 17:16  摸鱼一号选手  阅读(167)  评论(0编辑  收藏  举报