基於Nginx反向代理的SparkUI的訪問

基於Nginx反向代理的SparkUI的訪問

場景和方案

spark集羣部署的情況下,只有Master有公網IP,Worker機器沒有公網IP,此時要如果要訪問Run在Master機器上的SparkUI,並且需要查看Worker機器上的日誌時,就會存在不能訪問的問題。此時的一個解決方案就是採用 Nginx+SSH Tunnel 端口重定向的方式,將不同機器不同端口的請求全部導向到Master機器的80端口,然後由Nginx做反向代理轉發。

步驟分解

  1. 部署Spark集羣,將SparkUI在Master上run起來。
  2. 在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@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

5.此時訪問 127.0.0.1:8080端口即可打開遠程機器的SparkUI,並且可以訪問任意一臺Worker機器的日誌了。

PS:其實SSH 端口轉發也可以採用Master機器做爲代理,將請求轉發到Worker機器上,網絡通路和Nginx的反向代理一致,但是SSH端口轉發只能做到4層也就是傳輸層的轉發,不能像Nginx那樣做到7層的轉發(能夠識別機器名,並根據機器名做轉發),所以僅僅通過SSH的端口轉發,還不能做到同樣的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章