在地图服务器中,随着数据量的不断增大,可能会存在原有的存储设备空间不够的情况,或无法承受高并发请求的情况。
此时,我们就可以通过横向扩展部署,增加新的设备来进行分担缓减,从而达到动态扩展存储设备以及动态对高并发请求进行分流的目的。
这里就来讲解一下横向扩展部署的具体实施方法,并以新增服务器的操作系统为Linux为例,目的主要是为了解决存储空间不足的问题。
挂载文件系统
当存储空间不足时,首先就需要对原有的数据进行拆分,先将旧的设备挂载到新的设备上(反之也可以,只要能够实现数据传输即可)。
当然,采取移动硬盘直接拷贝也是可以的,但是考虑到数据的大小(至少几十个TB),采取直接让两台机器实现数据传输是更好的选择,具体的操作可以参考下面的命令:
sudo mount -t nfs [NFS服务器地址]:[共享路径] [本地挂载点]
sudo 获取管理员权限
mount 挂载命令
-t nfs 指定挂载设备类型为远程NFS服务器
操作示例:
sudo mount -t nfs 192.168.3.100:vol1 /home/rivermap/288T_vol1
挂载后的文件系统
数据拷贝
由于新的服务器是Linux操作系统,我们通过命令进行拷贝,如果是Windows操作系统,直接拷贝即可。
根据对数据大小的估计,这里我们将原服务器上编号4-512的文件夹拷贝到新的服务器上,使用-r选项递归复制,通过正则表达式(表示需要拷贝的文件夹名称),具体的操作参考命令如下:
cp [选项] [数据目录]{开始..结束} [目标目录]
选项:
-r 或 --recursive:递归复制目录及其内容。
-i 或 --interactive:在复制之前进行交互式确认,避免覆盖现有文件。
-u 或 --update:仅复制比目标文件更新的源文件。
-v 或 --verbose:显示详细的复制过程。
-p 或 --preserve:保留源文件的属性,包括所有者、权限和时间戳。
-f 或 --force:强制复制,覆盖现有的目标文件。
-n 或 --no-clobber:不要覆盖现有的目标文件。
-s 或 --symbolic-link:创建符号链接而不是复制实际文件。
-l 或 --link:创建硬链接而不是复制实际文件。
--backup:在复制时创建备份文件。
通配符操作:
*:匹配任意字符序列(包括空字符),例如,*.txt 匹配所有以 .txt 结尾的文件。
?:匹配单个字符,例如,file?.txt 匹配类似于 file1.txt、fileA.txt 的文件。
[...]:匹配方括号内的任意单个字符,例如,file[123].txt 匹配 file1.txt、file2.txt、file3.txt。
[!...] 或 [^...]:匹配除方括号内指定字符之外的任意单个字符,例如,file[!12].txt 匹配除了 file1.txt 和 file2.txt 之外的文件。
操作示例:
cp -r /home/rivermap/288T_vol1/G2120west/West/{4..512} /media/rivermap/96T/West512
拷贝命令
启用mod_proxy和mod_proxy_balancer模块
为了实现服务分流,需要启用mod_proxy和mod_proxy_balancer这两个模块,模块启用需修改\Apache24\conf\httpd.conf文件,删除两个模块前面的#,去掉注释即可。
启用模块
启用虚拟主机
除了开启模块之外,还需要启用虚拟主机配置,同样的还是去掉注释的#号即可,如下图所示。
启用虚拟主机配置
添加虚拟主机
一个Apache可以监听多个端口,可以通过虚拟主机监听指定端口的服务,添加监听端口方法如下图所示。
添加监听端口
打开\Apache24\conf\extra\httpd-vhosts.conf 文件,添加虚拟主机并分别绑定8085端口和8080端口。
操作示例:
<VirtualHost *:8085>
</VirtualHost>
<VirtualHost *:80>
</VirtualHost>
添加反向代理服务
上一步完成了虚拟主机的添加,现在为虚拟主机添加反向代理:
<VirtualHost *:8085>
ProxyRequests Off
# 反向代理的配置
ProxyPass 收到的请求地址 转发的代理服务器
</VirtualHost>
ProxyPass 将收到的请求转发到指定的服务器上去
ProxyRequests off 开启反向代理服务 on 开启代理服务
操作示例:
<VirtualHost *:8085>
ProxyRequests Off
# 反向代理的配置
Proxy /WeServer/ http://localhost:8080
</VirtualHost>
上面的操作表示将8085收到的请求中带有/WeServer/的url转发到8080服务上去
添加负载均衡服务器
添加完反向代理之后,在上一步的基础上添加一个负载均衡服务器。
<VirtualHost *:8085>
ProxyRequests Off
<Proxy 负载均衡服务器名字>
BalancerMember 后端服务器成员 负载均衡配置
ProxySet 负载均衡算法
</Proxy>
ProxyPass 收到的请求地址 转发的代理服务器
ProxyPassReverse 收到的请求地址 转发的代理服务器
</VirtualHost>
Proxy 负载均衡器:
BalancerMember 负载均衡器的成员(后端服务器)以及其配置
ProxySet 负载均衡算法:
lbmethod=byrequests:按请求数进行负载均衡。根据每个后端服务器收到的请求数来分配请求。
lbmethod=bytraffic:按流量进行负载均衡。根据每个后端服务器处理的数据流量来分配请求。
lbmethod=bybusyness:按繁忙程度进行负载均衡。根据每个后端服务器的当前负载情况来分配请求。
lbmethod=heartbeat:使用心跳检测进行负载均衡。通过监视后端服务器的心跳信号来确定其可用性,并根据可用性分配请求。
操作示例:设置一个名为balancer://mycluster/的负载均衡器,将8085上收到的请求转发到该负载均衡器上,负载均衡器中有两个服务,请求会按照1:1的转发到两个服务器上。
<VirtualHost *:8085>
ProxyRequests Off
# 反向代理的配置
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
<Proxy balancer://mycluster>
# 后端服务器成员的配置
BalancerMember http://backend1.example.com loadfactor=1
BalancerMember http://backend2.example.com loadfactor=1
# 其他负载均衡相关的配置
ProxySet lbmethod=roundrobin
</Proxy>
</VirtualHost>
添加分流
上一步添加了一个负载均衡服务器后,再增加一个负载均衡服务器来分流:
<VirtualHost *:8085>
ProxyRequests Off
<Proxy 负载均衡服务器1>
BalancerMember 后端服务器成员 负载均衡配置
ProxySet 负载均衡算法
</Proxy>
<Proxy 负载均衡服务器2>
BalancerMember 后端服务器成员 负载均衡配置
ProxySet 负载均衡算法
</Proxy>
<LocationMatch 正则表达式>
ProxyPass / 负载均衡服务器2
ProxyPassReverse / 负载均衡服务器2
</LocationMatch>
ProxyPass / 负载均衡服务器1
ProxyPassReverse / 负载均衡服务器1
</VirtualHost>
LocationMatch用于匹配请求 URL 路径,当获取的请求满足后面的正则表达的时候,就会启用他下面的配置,否则就使用下面的默认配置。
操作示例:
该虚拟主机上存在两个服务,分别占用9010端口和9015端口,如果收到的url中带有wmts就转发给9010端口的服务,否则就转发给9015的服务。
<VirtualHost *:8085>
<Proxy balancer://mycluster2>
BalancerMember http://127.0.0.1:9010/WeServer/
</Proxy>
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:9015/WeServer/
</Proxy>
<LocationMatch "/wmts/.*">
ProxyPass / balancer://mycluster2
ProxyPassReverse / balancer://mycluster2
</LocationMatch>
ProxyPass /balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>
结果验证
打开\Apache24\conf\httpd.conf文件,启用log_config_module模块(去掉注释的#号),如下图所示。
启用log_config_module模块
找到CustomLog "logs/access.log" combined,取消注释,开放请求信息日志,如下图所示。
开放请求信息日志
CustomLog请求可以设置日志请求信息显示格式,也可以使用系统预定义的日志格式
common:常用的日志格式,包含常见的请求信息。
combined:综合的日志格式,包含更详细的请求信息,如来源 IP、请求时间、请求方法、请求 URL 等。
完成以上步骤后重启Apache服务,就可以在\Apache24\logs\access.log中看到该服务收到请求,以此判断数据分流时评是否正确,如果分流正确但是没有图,也可检查是否是因为分流时字符拼接错误。
免费从网盘下载的卫星影像和高程DEM如何使用?
只需10分钟,给你全世界!水经注全球三维离线GIS系统
(本文首发于“水经注GIS”公号,关注公号免费领取地图数据)