GeoServer集羣部署(在linux平臺上應用nginx實現)

什麼是服務器集羣?  
服務器集羣就是指將很多服務器集中起來一起進行同一種服務,在客戶端看來就像是隻有一個服務器,集羣可以利用多個計算機進行並行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常運行。一旦在服務器上安裝並運行了羣集服務,該服務器即可加入集羣。羣集化操作可以減少單點故障數量,並且實現了羣集化資源的高可用性。
爲什麼要實現服務器集羣?  
實現服務器集羣主要是爲了負載均衡(有兩臺以上的服務器或者站點提供服務)服務器服務將來自客戶端的請求,基於某種算法,儘量平分請求到集羣的機器中,從而避免一臺服務器因爲負荷太高而出現故障或導致計算緩慢,集羣部署GEOSERVER能夠提高請求瓦片的響應速度和WFS數據的請求速度。
在這裏插入圖片描述
軟件準備
1.apache-tomcat8
2.geoserver.war
3.nginx軟件
說明:tomcat需要下載linux版本,下載地址
https://tomcat.apache.org/download-80.cgi
在這裏插入圖片描述
geoserver下載實現包
http://geoserver.org/release/stable/
在這裏插入圖片描述
3.nginx軟件可以下載後上傳到服務器,也可以直接用linux命令下載。這裏推薦使用linux命令下載,稍後將會介紹。
部署說明
生產環境下geoserver集羣的部署應該是一個節點一個機器,如nginx服務器,geoserver node1服務器,geoserver node2服務器,geoserver node2服務器,文件服務器,數據庫服務器等來組成linux集羣。但是在本次講解中因爲只有一臺liunx服務器節點,所以我將其都部署在了同一個機器上,用不同的端口號來進行區分,如果你擁有多臺機器,則可以不用修改端口號。
在本次部署中我爲各個節點分配的端口爲:
1.nginx負載均衡服務器-------------9090端口
2.geoserver node1 ------------------9091端口
3.geoserver node2 ------------------9092端口
4.geoserver node3 ------------------9093端口
部署過程
1.準備tomcat,更改服務端口
在linux服務器上適當位置創建目錄“geoserver”,下載三個tomcat8服務器軟件並解壓到目錄中,如下圖所示
在這裏插入圖片描述
此處我已將三個tomcat服務器的名稱重命名爲了佔用端口的名稱
如果不熟悉liunx上tomcat8的部署,參考博客:
Linux系統(Centos)安裝tomcat和部署Web項目
https://blog.csdn.net/qq_21077715/article/details/85541685
更改每一個tomcat服務器的服務端口
以tomcat-9091爲例
在server.xml中
在這裏插入圖片描述
在這裏插入圖片描述
修改這三處端口即可。
爲什麼是+1,這是爲了區分幾個tomcat服務器使用的不同端口,同理,node2是+2,node3是+3。
2.設置tomcat允許跨域
把如下這段,添加在每一個tomcat安裝目錄下 conf > web.xml中,(我是添加在 589行左右)。

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

這麼做是爲了在使用不同源的服務器訪問服務時依然可以正常訪問,不會出現No ‘Access-Control-Allow-Origin’ 的情況,要不要設置,視具體情況而定。
3.嵌入geoserver
將geoserver.war上傳至每個節點下的webapps目錄下。
在這裏插入圖片描述
當tomcat服務器啓動後,會自動將war包解壓爲web項目,此處我之前已經解壓過了一遍,所以“geoserver”已經存在了。
4.啓動三個tomcat服務器
分別在在bin/下執行

sh startup.sh

啓動後會自動將geoserver.war包解壓爲web項目geoserver
在這裏插入圖片描述
5.測試geoserver各個節點是否已經啓動
在瀏覽器中輸入 ip:9091/geoserver/,進入如下頁面則代表成功:
在這裏插入圖片描述
同理去測試另外兩個geoserver子節點。
6.爲三個geoserver子節點配置數據同步
雖然我們現在已經啓動了三個geoserver服務,但是其服務並沒有同步,想要三個子節點同時提供一個服務,還需要去三個geoserver的web管理頁面配置三個相同的服務,如果節點數很多,這是非常麻煩且不方便的。
所以我們要將三個geoserver節點的數據目錄設置爲統一的目錄,不再使用各個節點默認的單獨的目錄。最好的方式是將該目錄設置到一臺NFS文件服務器上,但此處因爲我們只有一臺機器,我們就創建一個統一的數據目錄,命名爲GEOSERVER_DATA_DIR。
在這裏插入圖片描述
我們還需要將每個geoserver的數據目錄重新指定一下:

geoserver/tomcat-9091/webapps/geoserver/WEB-INF/web.xml

編輯web.xml
設置統一的數據目錄

<--
<context-param>
       <param-name>GEOSERVER_DATA_DIR</param-name>
        <param-value>C:\eclipse\workspace\geoserver_trunk\cite\confCiteWFSPostGIS</param-value>
    </context-param> 
   -->
    <context-param>
       <param-name>GEOSERVER_DATA_DIR</param-name>
        <param-value>\GEOSERVER_DATA_DIR</param-value>
    </context-param> 

保存。
重啓三個tomcat服務器。
此時在其中一個節點中發佈了服務,其他節點也會同步服務,因爲他們的數據目錄是一致的。
比如說我在9091節點上發佈了圖層aerial,在9092,9093上都會同步。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
至此,三個geoserver節點的配置完成。
7.配置nginx集羣
7.1安裝依賴包

//一鍵安裝上面四個依賴
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

7.2.下載並解壓安裝包

//創建一個文件夾
cd /usr/local
mkdir nginx
cd nginx
//下載tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz

7.3.安裝nginx

//進入nginx目錄
cd /usr/local/nginx
//進入目錄
cd nginx-1.13.7
//執行命令
./configure
//執行make命令
make
//執行make install命令
make install

7.4.配置nginx.conf

# 打開配置文件
vi /usr/local/nginx/conf/nginx.conf

將端口號改成9090

localhost修改爲你服務器ip地址。
如下所示,其中server節點指向真實的GeoServer地址

upstream mygeoserver {

		ip_hash;
		server 服務器ip:9091;
		server 服務器ip:9092;
		server 服務器ip:9093;

	}

    server {
        listen       9090;
        server_name  服務器ip;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://mygeoserver;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

其中“ip_hash”的作用是支持session,使其能夠訪問同一個地址,如果您部署的集羣服務有多個GeoServer,但始終在各GeoServer登錄頁跳來跳去,而無法進入管理頁面,那麼就是缺少“ip_hash”。
設置了“ip_hash”後,會固定該用戶訪問的節點ip。

然後在http的server節點中添加location配置,如下所示,其中proxy_pass配置路徑轉發:

location / {

	proxy_pass http://mygeoserver;

}
7.5.啓動nginx

/usr/local/nginx/sbin/nginx -s reload

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看nginx進程是否啓動:

ps -ef | grep nginx

在這裏插入圖片描述
安裝完成一般常用命令

進入安裝目錄中,

命令: cd /usr/local/nginx/sbin

啓動,關閉,重啓,命令:

./nginx 啓動

./nginx -s stop 關閉

./nginx -s reload 重啓
7.6檢查nginx是否正常佔用9090端口

lsof -i:9090

出現如下內容,則表示正常啓動
在這裏插入圖片描述
如果什麼也沒出現,則表示配置文件沒有生效,nginx默認佔用80端口。檢查nginx.conf文件。
7.7用nginx訪問geoserver web管理頁面
瀏覽器輸入
http://服務器ip:9090/geoserver
進入geoserver web管理頁面,刷新幾次沒有問題,則可以驗證用nginx反向代理的geoserver集羣配置成功。
在這裏插入圖片描述
8.發佈wms服務,並用nginx反向代理服務器的地址提供服務
隨機進入一個節點,或者通過nginx進入web管理頁面,發佈一個wms服務。
在前端頁面中編寫如下代碼(cesium調用wms服務)

var aerial = new Cesium.WebMapServiceImageryProvider({
                    url: 'http://服務器ip:9090/geoserver/cluster_test/wms',//使用nginx代理
                    layers: 'cluster_test:aerial',
                    parameters: {
                        service: 'WMS',
                        format: 'image/png',
                        transparent: true
                    }
       });
viewer.imageryLayers.addImageryProvider(aerial);

前端頁面正常訪問服務
在這裏插入圖片描述
未完待續。
數據庫節點和文件服務器還沒說。
用geoserver發佈各種服務也還沒說。

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