第四次系统综合实践

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

反向代理:代理服务器

应用app部署在两个tomcat上,用户访问的是Nginx所在的机器,Nginx会将请求转发到Tomcat001或者Tomcat002上

文件创建

首先在docker-compose文件夹中创建以下文件

配置文件编写

在docker-compose.yml文件中编写

version: "3.3"
services:
    nginx:
        image: nginx
        container_name: docker-exam4
        ports:
            - 80:2537
        volumes:
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # 挂载配置文件
        depends_on:
            - tomcat01
            - tomcat02
            - tomcat03

    tomcat01:
        image: tomcat
        container_name: ctc1
        volumes:
            - ./tomcat1:/usr/local/tomcat/webapps/ROOT # 挂载web目录

    tomcat02:
        image: tomcat
        container_name: ctc2
        volumes:
            - ./tomcat2:/usr/local/tomcat/webapps/ROOT

    tomcat03:
        image: tomcat
        container_name: ctc3
        volumes:
            - ./tomcat3:/usr/local/tomcat/webapps/ROOT

nginx的default.conf文件编写

upstream tomcats {
    server ctc1:8080 weight=1;
    server ctc2:8080 weight=1;
    server ctc3:8080 weight=1;
}

server {
    listen 2537;
    server_name localhost;

    location / {
        proxy_pass http://tomcats;
    }
}

index.html

三个index.html直接编写from tomcat1from tomcat2from tomcat3以便于后续查看

检验结果

此处使用的python的repuest包,对http://localhost发送100次请求,可以看到,权重相同的情况下,三个index.html被访问到的次数相当

改变权重

对nginx/default.conf进行编写,更改其权重

并输入docker restart docker-exam4对容器重新运行

再次检验结果

可以看到发送100次请求,三个index.html被访问到的次数比值相当于1:10:5

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

研究中

三、docker-compose与hadoop的史诗级联动

拉取ubuntu镜像

输入docker pull ubuntu来拉取ubuntu镜像

运行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共享;

更新系统软件源

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

安装vim

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

安装sshd

输入apt-get install ssh进行安装

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

配置sshd

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

安装JDK

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

cd /usr/lib/
mkdir ./jvm
tar -zxvf /root/build/jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm

此处环境变量等安装完hadoop之后再一起配置

保存镜像文件

在网站注册账号之后,在终端输入docker login登录,输入docker ps查看容器id,并执行docker commit <容器id> ubuntu/jdkinstalled将其保存成镜像。可以图中可以看到,最后保存成功了

安装hadoop

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

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

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

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
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/jdk1.8.0_162"(问题1)

检验是否安装成功

分别输入
java -version

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

检验是否安装成功

配置文件编写

以下内容均写在<configuration></configuration>之间

core-site.xml

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

hdfs-site.xml

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-3.1.3/namenode_dir</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-3.1.3/datanode_dir</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

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

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

保存镜像

在hadoop配置完成之后,再次保存容器的镜像

查看三个容器系统的ip

输入vim /ect/hosts查看本地IP
172.17.0.3 master
172.17.0.2 slave01
172.17.0.4 slave02
将这三个ip地址写入master的/etc/hosts里

测试连通

利用master输入ssh slave01ssh slave02,测试时候可以连接到两台slave机上

配置workers文件

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

slave01
slave02

运行hadoop并检查其jps



运行Hadoop实例程序grep

在hdfs上创建一个目录

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

复制文件拷贝到hdfs上的目录

查看是否成功

执行程序

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

查看结果

参考博客

实战docker,构建nginx反向代理tomcat,学习link和docker-compose
2020系统综合实践 第4次实践作业

猜你喜欢

转载自www.cnblogs.com/J-J-1008/p/12895772.html