基於Nginx反向代理的SparkUI的訪問
spark集群部署的情況下,只有Master有公網IP,Worker機器沒有公網IP,此時要如果要訪問Run在Master機器上的SparkUI,並且需要查看Worker機器上的日誌時,就會有無法存取的問題。此時的一個解決方案就是採用 Nginx+SSH Tunnel 端口重定向的方式,將不同機器不同端口的請求全部導向到Master機器的80端口,然後由Nginx做反向代理轉發。
在Master機器上部署Nginx,並修改$NGINX_HOME/conf/nginx.conf文件,加入Work和Master機器的反向代理邏輯,例如:
<code>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; } } } </code>
採用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端口。指令如下:
<code>ssh -N -f -L 8081:127.0.0.1:80 username@ip ssh -N -f -L 8080:127.0.0.1:80 username@ip ssh -N -f -L 80:127.0.0.1:80 username@ip </code>
5.此時存取 127.0.0.1:8080連接埠即可開啟遠端機器的SparkUI,並且可以存取任一台Worker機器的日誌了。
PS:其實SSH 連接埠轉送也可以採用Master機器做為代理,將請求轉送到Worker機器上,網路通路和Nginx的反向代理一致,但是SSH埠轉送只能做到4層也就是傳輸層的轉發,不能像Nginx那樣做到7層的轉發(能夠識別機器名,並根據機器名做轉發),所以僅僅通過SSH的端口轉發,還不能做到同樣的效果。
以上就介紹了基於Nginx反向代理的SparkUI的訪問,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。