2020系统综合实践 第4次实践作业
1.使用Docker-compose实现Tomcat+Nginx负载均衡
(1)配置文件
-
在主目录下创建一个tomcat文件夹,并在里面添加如下文件
-
docker-compose.yml
-
nginx里面是一个default.conf文件
-
另外三个文件里面均为一个html文件,内容设置不一样,能区分就行,下图为例
-
查看树结构
-
运行docker-compose
-
查看运行的容器
-
访问网页,点击刷新会逐步出现之前设置的三个html里面的内容
(2)负载均衡测试
A.轮询测试
- 在主目录添加一个testTomcat.py的python文件代码如下
import requests
url="http://localhost"
for i in range(0,10):
reponse=requests.get(url)
print(reponse.text)
- 运行该python文件
B.权重测试
-
修改default.conf里面的内容
-
添加一个testTomcat.py的文件,代码如下
import requests
url="http://localhost"
context={}
for i in range(0,100):
response=requests.get(url)
if response.text in context:
context[response.text]+=1
else:
context[response.text]=1
print(context)
- 运行python文件,三个tomcat出现的概率刚好为之前设置的5:3:2
2.使用Docker-compose部署javaweb运行环境
(1)确实不会javaweb,用老师给的例子来完成本次实验
-
按照给定的步骤更改数据库ip
-
创建并启动容器 sudo docker-compose up -d
-
在web上访问
-
进行一些简单的操作
(2)添加nginx反向代理服务,实现负载均衡
- docker-compose.yml
version: "3" #版本
services: #服务节点
tomcat: #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
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
networks:
webnet:
ipv4_address: 15.22.0.7
networks: #网络设置
webnet:
driver: bridge #网桥模式
ipam:
config:
-
subnet: 15.22.0.0/24 #子网
-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"]
-default.conf
upstream tomcat123 {
server tomcat00:8080;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://tomcat123;
}
}
-
查看树结构
-
重新启动容器sudo docker-compose up -d
-
再次访问网页
3.使用Docker搭建大数据集群环境
(1)创建build文件,创建并运行容器
sudo docker run -it -v /home/hadoop/build:/root/build --name ubuntu ubuntu
-
首先安装JDK,解压预先准备好的压缩包
-
输入ls /usr/lib/jvm查看是否成功
-
JDK环境配置,输入命令vim ~/.bashrc进行如下图环境变量的配置(vim 中:i 进入输入模式,esc 进入命令模式,:进入末行模式)
-
使用:wq保存退出后查看输入java -version查看是否配置成功,结果如下图,已配置成功
-
安装Hadoop及其环境配置,将安装包解压到目标目录下,并查看是否成功
-
输入vim ~/.bashrc进入如下配置,操作方法同上
-
查看hadoop版本,出现下图,则证明配置成功。
-
免密登录配置,指令输入,期间一直按回车就行
-
新开一个终端,保存该配置好的镜像
udo docker commit 容器id ubuntu:jdk8 #保存说明是jkd8版本的ubuntu
-
利用配置好的镜像创建运行一个新的容器
sudo docker run -it -v /home/badoop/build:/root/build --name ubuntu-jdk8 ubuntu:jdk8
(2)配置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>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop-3.1.3/tmp</value> <description>A base for other temporary derectories.</description> </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.namenode.data.dir</name> <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/data</value> </property> </configuration>
-
mapred-site.xml
<configuration> <property> <!--使用yarn运行MapReduce程序--> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <!--jobhistory地址host:port--> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <!--jobhistory的web地址host:port--> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <!--指定MR应用程序的类路径--> <name>mapreduce.application.classpath</name> <value>/usr/local/hadoop-3.1.3/share/hadoop/mapreduce/lib/*,/usr/local/hadoop-3.1.3/share/hadoop/mapreduce/*</value> </property> </configuration>
-
yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.5</value> </property> </configuration>
(3)运行Hadoop集群
- 新开三个终端分别运行ubuntu_hadoop镜像,表示Hadoop集群中的master,slave01和slave02
`
第一个终端
sudo docker run -it -h master --name master ubuntu_hadoop
第二个终端
sudo docker run -it -h slave01 --name slave01 ubuntu_hadoop
第三个终端
sudo docker run -it -h slave02 --name slave02 ubuntu_hadoop
`
- 三个终端分别打开/etc/hosts,根据各自ip修改为如下形式
- 在master结点测试ssh;连接到slave结点
ssh slave01 ssh slave02 exit # 退出
- 修改master上workers文件,将localhost修改为如下所示
vim /usr/local/hadoop-3.1.3/etc/hadoop/workers slave01 slave02
(4)测试Hadoop集群
-
启动hdfs 初次启动需要格式化
cd /usr/local/hadoop-3.1.3 bin/hdfs namenode -format #首次启动Hadoop需要格式化 sbin/start-all.sh #启动所有服务
-
输入jps查看三个终端,如果出现下图则证明启动成功,未出现则需要切查看日志排除原因
-
建立hdfs文件夹
cd /usr/local/hadoop-3.1.3 bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/root bin/hdfs dfs -mkdir input
-
在master终端上vim一个测试样例test.txt,内容随意字符串,上传到input文件下
bin/hdfs dfs -put ~/test.txt input
-
运行功能为计算字符串个数的jar包
bin/hadoop jar /usr/local/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount input output
-
cat查看output文件夹结果显示
./bin/hdfs dfs -cat output/*
-
验证完成,关闭hdfs,这条指令在每次完成实验都需要执行
sbin/stop-all.sh
4.遇到的问题
在做第二个实验的时候,配置完成去访问网页的时候出现如下问题
经同学指正我连接的是数据库而不是tomcat,端口更正后即可成功访问
5.经验和感想
由于之前未接触过这类知识,做起来本就比较坎坷,再加上本次实验量非常多,花费了更多时间去学习和操作。感谢那些提前做好的同学供我们参考,以及群里积极回答我们困难的同学。
6.完成作业所花的时间
本次实验经过学习,动手操作,改正问题,解决疑难,写博客,共花费了15小时左右。