GeoServer集群部署(在linux平台上应用nginx实现)

什么是服务器集群?  
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器,集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。一旦在服务器上安装并运行了群集服务,该服务器即可加入集群。群集化操作可以减少单点故障数量,并且实现了群集化资源的高可用性。
为什么要实现服务器集群?  
实现服务器集群主要是为了负载均衡(有两台以上的服务器或者站点提供服务)服务器服务将来自客户端的请求,基于某种算法,尽量平分请求到集群的机器中,从而避免一台服务器因为负荷太高而出现故障或导致计算缓慢,集群部署GEOSERVER能够提高请求瓦片的响应速度和WFS数据的请求速度。
GeoServer集群部署(在linux平台上应用nginx实现)_第1张图片
软件准备
1.apache-tomcat8
2.geoserver.war
3.nginx软件
说明:tomcat需要下载linux版本,下载地址
https://tomcat.apache.org/download-80.cgi
GeoServer集群部署(在linux平台上应用nginx实现)_第2张图片
geoserver下载实现包
http://geoserver.org/release/stable/
GeoServer集群部署(在linux平台上应用nginx实现)_第3张图片
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行左右)。


  CorsFilter
  org.apache.catalina.filters.CorsFilter
  
    cors.allowed.origins
    *
  


  CorsFilter
  /*

这么做是为了在使用不同源的服务器访问服务时依然可以正常访问,不会出现No ‘Access-Control-Allow-Origin’ 的情况,要不要设置,视具体情况而定。
3.嵌入geoserver
将geoserver.war上传至每个节点下的webapps目录下。
GeoServer集群部署(在linux平台上应用nginx实现)_第4张图片
当tomcat服务器启动后,会自动将war包解压为web项目,此处我之前已经解压过了一遍,所以“geoserver”已经存在了。
4.启动三个tomcat服务器
分别在在bin/下执行

sh startup.sh

启动后会自动将geoserver.war包解压为web项目geoserver
GeoServer集群部署(在linux平台上应用nginx实现)_第5张图片
5.测试geoserver各个节点是否已经启动
在浏览器中输入 ip:9091/geoserver/,进入如下页面则代表成功:
GeoServer集群部署(在linux平台上应用nginx实现)_第6张图片
同理去测试另外两个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集群部署(在linux平台上应用nginx实现)_第7张图片
GeoServer集群部署(在linux平台上应用nginx实现)_第8张图片
GeoServer集群部署(在linux平台上应用nginx实现)_第9张图片
至此,三个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

出现如下内容,则表示正常启动
GeoServer集群部署(在linux平台上应用nginx实现)_第10张图片
如果什么也没出现,则表示配置文件没有生效,nginx默认占用80端口。检查nginx.conf文件。
7.7用nginx访问geoserver web管理页面
浏览器输入
http://服务器ip:9090/geoserver
进入geoserver web管理页面,刷新几次没有问题,则可以验证用nginx反向代理的geoserver集群配置成功。
GeoServer集群部署(在linux平台上应用nginx实现)_第11张图片
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集群部署(在linux平台上应用nginx实现)_第12张图片
未完待续。
数据库节点和文件服务器还没说。
用geoserver发布各种服务也还没说。

你可能感兴趣的:(GIS服务)