集群部署注意事项?
李小翔
2015-05-22 16:30

内容列表
禁用集群配置 	 # 
主机防火墙配置 	 # 
主机名与IP地址的映射关系 	 # 
共享存储 	 # 
服务地址 	 # 
垂直集群 	 # 
集群配置文件 clusters.properties 	 # 
Config.groovy 配置 	 # 

为了获取更高性能与更高可用性，一些较大的项目常常采用集群的部署方式，本文对集群环境下的部署做一些常见问题与注意事项的说明。

禁用集群配置
默认情况下，集群配置都是默认启用和自动配置的，包括在 web.xml 中生成 distributable 标签以便启用 tomcat 集群、ehcache、cometd 等。
如需禁用集群，可以在 Config.groovy 中如下配置即可：
// 禁用 tomcat 集群
bropen.toolkit.cluster.tomcat.enabled = false
// 禁用 EhCache 的集群同步
bropen.toolkit.cluster.ehcache.enabled = false
// 禁用 CometD 的 Oort 集群
bropen.toolkit.cluster.cometd.enabled = false

主机防火墙配置
如果主机打开了防火墙的话，一般情况下，需要过滤下列端口：
1、HTTP 服务端口，如 80、443
2、Tomcat 端口，如 8080
3、Tomcat 集群端口，如 4000
    通过启动日志检查：Receiver Server Socket bound to
4、EhCache 集群端口（UDP），如 4446
    通过启动日志检查：EhCache multicast port
5、ComedD 集群端口（UDP），如 5577
    通过启动日志检查：CometD oort multicast port

主机名与IP地址的映射关系
EhCache 的同步地址是通过主机名计算的，但是某些 Linux 发行版中（如 Ubuntu），主机名会自动映射到 127.xxx 的地址上，导致缓存无法同步，因此部署时需要检查一下 /etc/hosts 中的主机名映射关系。
如果映射关系有误，可以修改 hosts，或者配置 clusters.properties 来解决该问题。

共享存储
集群环境下，系统附件、模板、ckeditor/ueditor上传的图片需要能通过任意一台服务器均可访问到，因此需要保存到一个共享的存储空间中。
一般可以通过 NAS 设备 + 各种共享协议（如NFS、网络邻居/Samba等）挂载到各个主机上；或者挂载到某台主机上后，通过NFS、网络邻居/Samba共享到其他主机的相同路径。
然后配置各类系统参数资源路径（bropen.framework.resource.XXXX）等。

服务地址
系统配置（不是 Config.groovy）中有一条 grails.serverURL，默认为 http://localhost:8080，集群环境或非集群环境下，需要配置为服务地址和IP，如 http://bpm.bropen.cn，以免导致一些特定场景下生成的 URL 错误。
此外集群环境下，肯定有一个负载均衡的前端进行分发，如 Apache Http Server、NGIX、四层交换等，服务地址应该映射到这些前端上，而不是各个集群节点。

垂直集群
由于我们选择的 EhCache 同步机制的原因，在一台主机上部署垂直集群时，需要将不同的 jvm 绑定到不同的 IP 地址上，因此需要给主机配置多个 IP 地址，同时配置各节点的 clusters.properties 指定对应的 IP 地址。

集群配置文件 clusters.properties
一般情况下，都不需要这个配置文件，但是一些特定的情况下必须配置，比如垂直集群、主机名映射在127.xx地址上等。
详细说明可以直接参考文件中的注释。

Config.groovy 配置
除了本文开头几个启、禁用集群的配置外，还有下面几个配置：
// EhCache: 组播端口，默认为空（自动计算）
bropen.toolkit.cluster.ehcache.multicast.port
// CometD: 应用的默认端口（默认8080），如果是水平集群，可以通过这里进行简单设置，否则从配置文件 clusters.properties 中加载，包括主机名
bropen.toolkit.cluster.cometd.server.port
// CometD: 组播端口，默认为空（自动计算）
bropen.toolkit.cluster.cometd.multicast.port
// 配置文件位置，默认为 { user.dir} /bropen/clusters.properties
bropen.toolkit.cluster.config.file