什麼是服務器集羣?
服務器集羣就是指將很多服務器集中起來一起進行同一種服務,在客戶端看來就像是隻有一個服務器,集羣可以利用多個計算機進行並行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常運行。一旦在服務器上安裝並運行了羣集服務,該服務器即可加入集羣。羣集化操作可以減少單點故障數量,並且實現了羣集化資源的高可用性。
爲什麼要實現服務器集羣?
實現服務器集羣主要是爲了負載均衡(有兩臺以上的服務器或者站點提供服務)服務器服務將來自客戶端的請求,基於某種算法,儘量平分請求到集羣的機器中,從而避免一臺服務器因爲負荷太高而出現故障或導致計算緩慢,集羣部署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發佈各種服務也還沒說。