1.使用Docker-compose实现Tomcat+Nginx负载均衡
1.1 nginx 反向代理原理
原理:以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
1.2 nginx 代理tomcat集群,代理2个以上 tomcat
-
文档结构
├── docker-compose.yml ├── nginx │ └── default.conf ├── webapps │ └── index.jsp └── list4.py
-
nginx配置文件default.conf
upstream tomcats {
server tomcat1:7070;
server tomcat2:7071;
server tomcat3:7072;
}
server {
listen 2420;
server_name localhost;
location / {
proxy_pass http://tomcats; # 请求转向tomcats
}
}
-
docker-compose.yml
version: "3.8" services: nginx: image: nginx container_name: ex4ngx ports: - 80:2420 volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # 挂载配置文件 depends_on: - tomcat01 - tomcat02 - tomcat03 tomcat01: hostname: tomcat01 image: tomcat container_name: tomcat1 volumes: - ./webapps:/usr/local/tomcat/webapps/ROOT # 挂载web目录 tomcat02: hostname: tomcat2 image: tomcat container_name: tomcat2 volumes: - ./webapps:/usr/local/tomcat/webapps/ROOT # 挂载web目录 tomcat03: hostname: tomcat03 image: tomcat container_name: tomcat3 volumes: - ./webapps:/usr/local/tomcat/webapps/ROOT # 挂载web目录
-
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.net.InetAddress" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Nginx+Tomcat负载均衡</title> </head> <body> <% InetAddress addr = InetAddress.getLocalHost(); out.println("主机地址:"+addr.getHostAddress()); out.println("主机名:"+addr.getHostName()); %> </body> </html>
1.3了解nginx的负载均衡策略,并至少实现nginx的2种负载均衡策略
-
爬虫代码
import requests import re url = 'http://localhost/index.jsp' for i in range(0,6): res = requests.get(url) text = re.findall('tomcat[0-9]{2}',res.text,re.S) print(text)
-
轮询策略:
默认就是轮询算法
-
权重策略:
修改default.conf
2.使用Docker-compose部署javaweb运行环境
文件目录
├── docker-compose.yml
├── default.conf
├── docker-entrypoint.sh
├── Dockerfile
├── drogshop.sql
└── webapps
-
docker-compose.yml
version: "3" #版本 services: #服务节点 tomcat01: #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 tomcat02: #tomcat 服务 image: tomcat #镜像 container_name: tomcat01 #容器名 ports: #端口 - "5051:8080" volumes: #数据卷 - "./webapps:/usr/local/tomcat/webapps" networks: #网络设置静态IP webnet: ipv4_address: 15.22.0.16 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 #子网
-
default.conf
upstream tomcat123 { server tomcat00:8080; server tomcat01:8080; } server { listen 8080; server_name localhost; location / { proxy_pass http://tomcat123; } }
-
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"]
-
docker-entrypoint.sh
#!/bin/bash mysql -uroot -p123456 << EOF source /usr/local/grogshop.sql;
-
jdbc.properties
根据路径找到
/webapps/ssmgrogshop_war/WEB-INF/classes/jdbc.properties
并进行编辑,其中192.168.1.11应改为本机的ip地址,端口号不变
-
创建容器
输入
docker-compose up -d --build
创建容器 -
检验结果
-
对数据库进行增加操作
3.使用Docker搭建大数据集群环境
3.1拉取 ubuntu 镜像
输入docker pull ubuntu
来拉取ubuntu镜像
3.2运行 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共享;
3.3更新系统软件源
输入apt-get update
,对系统软件源进行更新
3.4安装 vim
vim用以对文本文件进行编辑,输入apt-get install vim
进行安装
3.5安装和配置 sshd
输入apt-get install ssh
进行安装 ssh
并且输入vim ~/.bashrc
对文件进行编辑,在文件最后一行插入以下内容,以便可以自动启动sshd服务:
/etc/init.d/ssh start
输入ssh-keygen -t rsa
获取密钥,运行过程中一直回车即可
接着输入cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将密钥导入文件,然后就可以无密码访问本地sshd服务了
3.6安装 JDK
把hadoop的安装包放在~/目录下,然后执行以下代码安装hadoop:
cd /usr/lib/
mkdir ./jvm
3.7安装 hadoop
cd /root/build
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local
输入vim ~/.bashrc
,把以下内容加到文件末尾,以编辑环境变量:
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
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/java-1.11.0-openjdk-amd64"
3.8检查是否安装成功
java -version
cd /usr/local/hadoop-3.1.3
./bin/hadoop version
3.9配置文件编写
内容均在<configuration></configuration>
之间
-
core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> </configuration>
-
hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/namenode_dir</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/datanode_dir</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>
-
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> </configuration>
-
保存镜像
-
查看 ip 并复制填写,测试连通
172.17.0.3 master
172.17.0.4 slave01
172.17.0.5 slave02
-
配置workers文件
hadoop集群配置的最后一步,就是在master目录
/usr/local/hadoop-3.1.3/etc/hadoop/
中输入vim workers
编辑workers文件
将其中的localhost替换为slave01 slave02
3.10运行实例grep
-
在 hdfs 上创建一个目录
输入
./bin/hdfs dfs -mkdir -p /user/hadoop/input
-
拷贝文件
dfs -put ./etc/hadoop/*.xml /user/hadoop/input
-
验证结果
dfs -ls /user/hadoop/input
-
执行程序
输入
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input output 'dfs[a-z.]+'