Nginx反向代理机制:简而言之就是Nginx服务器与服务商众多个web服务器造成一个总体,用户在向服务器发送请求后,Nginx服务器给web服务器代理这些请求,而后选择某个web服务器交互,而后将应答返回给用户。而这些过程是对用户透明的。
upstream tomcats {
server nt-tomcat1:8080 ; #tomcat服务器
server nt-tomcat2:8080 ;
server nt-tomcat3:8080 ;
ip_hash;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/nginx-3/html ;
index index.html index.htm ;
proxy_pass http://tomcats ; #请求tomcats
}
version: "3" services: nginx: image: nginx container_name: nt-nginx ports: - "80:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - tomcat1 - tomcat2 - tomcat3 tomcat1: image: tomcat container_name: nt-tomcat1 volumes: - ./tomcat1:/usr/local/tomcat/webapps/ROOT tomcat2: image: tomcat container_name: nt-tomcat2 volumes: - ./tomcat2:/usr/local/tomcat/webapps/ROOT tomcat3: image: tomcat container_name: nt-tomcat3 volumes: - ./tomcat3:/usr/local/tomcat/webapps/ROOT
一、轮询方式(默认):对客户端请求,nginx服务器与每一个服务器逐个交互html
upstream tomcats { server tomcat1:8080 ; server tomcat2:8080 ; server tomcat3:8080 ; }
二、给服务器设定权重:多个请求下每一个服务器占不一样服务次数的比例java
upstream tomcats { server tomcat1:8080 weight=1; server tomcat2:8080 weight=2; server tomcat3:8080 weight=3; }
三、iphash:相同客户端ip只访问一个服务器node
upstream tomcats { server tomcat1:8080 ; server tomcat2:8080 ; server tomcat3:8080 ; ip_hash; }
#docker-compose.yml
version: '2' services: tomcat1: image: tomcat:7 container_name: nmt-tomcat1 ports: - "5050:8080" volumes: - "$PWD/webapps:/usr/local/tomcat/webapps" networks: webnet: ipv4_address: 15.22.0.17 tomcat2: image: tomcat:7 container_name: nmt-tomcat2 ports: - "5051:8080" volumes: - "$PWD/webapps:/usr/local/tomcat/webapps" networks: webnet: ipv4_address: 15.22.0.16 mymysql: build: . image: mymysql:test container_name: nmt-mysql ports: - "3306: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: nmt-nginx ports: - "8080:8080" volumes: - ./default.conf:/etc/nginx/conf.d/default.conf networks: webnet: driver: bridge ipam: config: - subnet: 15.22.0.0/24 gateway: 15.22.0.2
#nginx的配置文件default.conf
upstream tomcats { server nmt-tomcat1:8080 weight=1; server nmt-tomcat2:8080 weight=2; } server { listen 80; server_name localhost; location / { proxy_pass http://tomcats ; }
以上参考大佬的思路,理解一下就是再建立一个tomcat容器做为web服务器运行webapp,而后nginx容器做为反向代理服务器来代理两个tomcat服务器,策略为权重询问。python
ssh-keygen -t rsa 获取密钥
#core-site.xml <configuration> <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> </configuration>
hdfs-site.xml <configuration> <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> </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.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> </configuration>
#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
cd /usr/local/hadoop-3.1.3 bin/hdfs namenode -format #格式化 sbin/start-all.sh #所有打开
jps #查看节点是否所有打开
——以上过程参考前面大佬标答和docker配置hadoop集群教程 ,因为中途过多bug致使截图省略。。。mysql
可以使用grep功能测试数据:nginx
bug1:web
卡住跑不动,修改过yarn的虚拟物理内存比例的配置了也不行。。。logs下面全部的日志文件看过去看不出明显的bugsql
怪本身菜把,可能前面配置时候出了一些bug补完仍是遗存错误吧docker
重作一遍,bug2:ubuntu
一开始显示跑一半链接失败connection refuse,而后nadenode也关闭了。
重启容器(hosts会被格式化,但hadoop的缓存依然还在),重写hosts文件后继续跑样例忽然能跑还流畅了。。。但忽然疯狂重连而后失败。。。
重试n次以后:忽然成功
作崩了...
前两个实验如今看来,虽然刚接触nginx反向代理和tomcat轻量级web服务器,但显然第一个实验对于学习nginx反向代理的大体理念-代理服务器,和负载均衡的简单应用是能够接受的。
但对于最后一个hadoop集群,一开始觉得以前作过大数据hadoop从单机、伪分布、彻底式分布的相关再到文件系统的流畅的使用,但显然docker镜像下的hadoop集群架构着实有一些坑点会给人带来困难。
一开始不知道为什么ubuntu镜像不能拉取openjdk8,因而拉去default-jdk(教程上的),忽然就下了个openjdk11,想说大不了后面一些环境变量改一改就行,呵呵版本不兼容
而后若是是你,确定以为卸载重装一下呗?呵呵,按着网上教程去卸载重装,你会发现删不干净!好吧即便我最后删完已经能够显示java版本1.8,但java list下依然还有jdk11
而后硬着头皮跑到最后,发现如上bug1:卡住了!群里老师解答:yarn-site.xml下的虚拟内存和物理内存比例配置——哦~我好像忘了写...从新配置,fail again。。。
最后,干脆从新用原生镜像一步一步仔细地作,作到最后彷佛还很顺利,bug2 is coming~slave02主机请求master一直会链接失败,第一次失败后master内的hdfs断连,namenode关闭,重启start-all.sh节点有从新恢复正常,继续跑...失败如是
而后忽然一次死机,重开机后从新配置,感受彷佛好起来了,mapredure开跑了!而后仍是会产生断连...数次以后离奇成功。
总结经验:照着大佬的教程都能失败?菜要认可,挨打站稳
再附:
居然继一次开头彩后,wordcount也能跑成功了。。。