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