基于nginx反向代理的sparkui的访问
场景和方案spark集群部署的情况下,只有master有公网ip,worker机器没有公网ip,此时要如果要访问run在master机器上的sparkui,并且需要查看worker机器上的日志时,就会存在不能访问的问题。此时的一个解决方案就是采用 nginx+ssh tunnel 端口重定向的方式,将不同机器不同端口的请求全部导向到master机器的80端口,然后由nginx做反向代理转发。
步骤分解部署spark集群,将sparkui在master上run起来。在master机器上部署nginx,并修改$nginx_home/conf/nginx.conf文件,添加work和master机器的反向代理逻辑,例如:
worker_processes 1;error_log logs/error.log;error_log logs/error.log notice;error_log logs/error.log info;pid logs/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type pplication/octet-stream; sendfile off; keepalive_timeout 20; gzip on; proxy_intercept_errors off; upstream server_spark_master { server 127.0.0.1:8080; } upstream server_jyvhyguguiu-slave-0 { server 10.110.1.1:8081; } upstream server_jyvhyguguiu-slave-1 { server 10.110.1.2:8081; } server { listen 80; server_name spark_master; location / { proxy_pass http://server_spark_master; } } server { listen 80; server_name jyvhyguguiu-slave-0; location / { proxy_pass http://server_jyvhyguguiu-slave-0; } } server { listen 80; server_name jyvhyguguiu-slave-1; location / { proxy_pass http://server_jyvhyguguiu-slave-1; } } }
采用nginx的机器名映射的原理,来做反向代理。
3.将master机器和worker机器通过修改hosts文件的方式全部绑定到127.0.0.1.
4.采用ssh支持的端口转发原理,将sparkui用到的端口全部转发到远程的监听nginx服务的80端口。例如sparkui会用到worker机器的8081端口,master机器的8080端口和master机器的80端口,那么就将这3个本地端口(因为master和worker机器全部绑定到了lo网卡)全部转发到远程的80端口。命令如下:
ssh -n -f -l 8081:127.0.0.1:80 username@ipssh -n -f -l 8080:127.0.0.1:80 username@ipssh -n -f -l 80:127.0.0.1:80 username@ip
5.此时访问 127.0.0.1:8080端口即可打开远程机器的sparkui,并且可以访问任意一台worker机器的日志了。
ps:其实ssh 端口转发也可以采用master机器做为代理,将请求转发到worker机器上,网络通路和nginx的反向代理一致,但是ssh端口转发只能做到4层也就是传输层的转发,不能像nginx那样做到7层的转发(能够识别机器名,并根据机器名做转发),所以仅仅通过ssh的端口转发,还不能做到同样的效果。
以上就介绍了基于nginx反向代理的sparkui的访问,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
