如果您正在使用的是 Smartbi Spreadsheet 电子表格版本,下文中所有涉及到 smartbi、smartbi.war 名称的地方需要全部替换为 spreadsheet、spreadsheet.war。千万注意! |
在配置集群应用前要对集群环境有一个良好的设计,下面就是我们这次配置的集群信息,在同一网段内的不同机器上配置集群。
操作系统 | 硬件配置(IP、端口) | 角色 | 描述 |
---|---|---|---|
Win2003 Server | IP:192.168.1.8 ,PORT:8003 | Proxy Server | 负载均衡服务器,负责请求分发。 |
Win2003 Server | IP:192.168.1.8 ,PORT:8001 | Smartbi Server1 | Smartbi 服务器1。 |
Win2003 Server | IP:192.168.1.9 ,PORT:8001 | Smartbi Server2 | Smartbi 服务器2。 |
文件名 | 作用说明 |
---|---|
smartbi.war | Smartbi 服务器手工部署包,该文件不建议改名。 |
代理分发包,负责 Smartbi 所有请求的转发。 |
在各个机器上分别部署和配置 Smartbi 服务器,具体步骤如下。
在集群环境中的一台机器上部署负载均衡包,由其将请求分发到各个节点上。
该问题如下图所示:
说明:此问题有可能原因是:
1)集群缓存没有配置好,所以需要测试缓存是否成功同步,可以通过以下步骤测试,如果集成缓存同步正常,进行2)操作,如果测试不正常,需要重新配置缓存文件。
测试集群缓存是否生效,详细步骤如下:
1、分别在不同机器上用浏览器访问不同的smartbi节点。
2、在节点1和节点2上都展示“ 资源定制 ”目录。
3、在节点1的“资源定制”目录下新建一个目录。
4、在节点2上,选择“资源定制”目录,右键刷新,然后查看是否有节点1上新建好的目录存在,若是不存在,就说明集群缓存已经同步不成功。
5、同理,按照以上方法测试各个节点之间的缓存是否能正常同步。
2)确定缓存正常同步,确定各个节点的服务器时间是否一致(要求各个服务器的时间必须同步,只要打印了截图上的日志信息,表示两个服务器之间的时间相差有点大,不太推荐 )
3)以上方式无法解决,可采取在config文件中增加log4j.logger.org.quartz=ERROR这个参数,设置完之后重启服务器,后台将不会再输出WARN/INFO日志信息。
请使用如下方法确认集群是否部署成功了。
假如有1、2、3、4四个节点。直接登录节点1的Smartbi,在目录树上创建一个新目录。然后再分别登录到节点2、3、4的Smartbi,如果能看到刚才在节点1上创建的目录,就表明集群部署成功了。
或者,还可以查看缓存信息。打开“系统监控”页面,点击左侧的“缓存”项,打开缓存信息。查看POJO这一行,如果右侧的“Peers”列中显示出其他三个节点的信息,则表明集群配置成功。如果为null或者为空,则表明集群未部署成功。
执行 hostname -i 命令 如果返回的结果127.0.0.1或者其他的ip地址而不是本地真实的IP,那么则需要修改 /etc/hosts 文件, 添加本地ip地址和机器名的映射,否则也会导致同步无法成功
2、查看jvm启动参数中是否有 -Djava.rmi.server.hostname=127.0.0.1
通过ps -ef|grep java 查看启动的进程是否有 -Djava.rmi.server.hostname 这样的参数配置 如果有则需要删除掉,否则也会导致同步无法成功。
3、端口的开放
RMI实际上是分开两套端口的,一个端口(比如说wiki上指定的40000),用于列出绑定信息的端口;另一个端口是真实绑定用于远程访问的通讯的端口,而通常情况这个端口是RMI随机产生端口通讯,若是用户环境需要配置的防火墙策略,而每次重启smartbi 通讯端口都是随机的,这时候就会出现端口通讯问题。
netstat -an|grep 192.168.199.115 查看本机与集群服务器通讯的端口;
这个是只开放40000端口时,smartbi后台报缓存同步连接超时,如下:
为了避免每次RMI随机产生端口通讯,可以在方案二中的ehcache.xml 文件增加一个参数remoteObjectPort=41001(添加多一个属性remoteObjectPort等于指定了原本RMI随机产生端口),其他配置信息和原本的方案二配置一样,体如下:
这样设置后,进入系统监控--》缓存界面的peer信息上可以看到,对应的节点通讯端口已经是固定的了,而不是随机的。
有时候部署集群后,系统启动后登陆进去都非常缓慢,看线程会发现大家都在等待缓存同步,这时候导致大家都在等待,此时可以考虑把缓存改成异步的。
查找name为Internal_Object_CACHE的cache配置,将replicateAsynchronously=true。