现在我们遇到了一个服务器集群的问题,无法解决!========================================================================
具体如下:
客户 的 Apache服务下, 管理了4台服务器(假设每台服务器的端口配置如下:8081~8085),每台服务器的Resin下都 部署了我们的项目.我们的工程已被Apache服务集群管理并同步,但是项目涉及的相关资源,却无法被Apache同步,具体如下:
========================================================================
CMS工程下:#publish目录
#存放发布中心(首页及内容中心)所发布的照片\\resin-3.0.14\webapps\CMS\publish#meidiaFiles目录
#存放发布中心(视听)所发布的照片\\resin-3.0.14\webapps\CMS\mediaFiles#UserFiles目录
#存放FCKEditor上发布的照片
\\resin-3.0.14\webapps\CMS\UserFiles#blog目录
#存放博客首页所发布的图片
\\resin-3.0.14\webapps\CMS\blog
Website工程下:
#与工程同级别的(webapps目录)下:#upload目录
#存放发布中心(新闻发布)所发布的资源
\\resin-3.0.14\webapps\magUpload#UserFiles目录
#存放FCKEditor上发布的照片
\\resin-3.0.14\webapps\Website\UserFiles========================================================================也就是说,假设编辑访问 http://www.123.com/CMS/, 假如 随机地跳到端口号是8084的服务器,也就是相当于访问了http://www.123.com:8084/CMS/, 并在次服务器上,编辑了新闻,发布了图片,那么就会在此服务器下的
\\resin-3.0.14\webapps\CMS\publish(#publish目录#存放发布中心(首页及内容中心)所发布的照片)内发了相关的图片,数据当然是存到了Oracle数据库里了,这个不用担心.问题是: 别的用户访问这个新闻的时候,他输入的是 http://www.123.com/Website/, 加入随机跳到端口号是8084的服务器,那么他很幸运,他不但可以看到那个新闻的文字,还可以看到新闻的图片.(因为编辑发布这片新闻和图片是,存放的图片就是8084这台服务器下的)
但是,如果Apache 让他 随机跳到端口号是8085的服务器,那么他只能看到新闻的文字, 无法看到新闻的图片!(因为8085的 \\resin-3.0.14\webapps\CMS\publish(#publish目录#存放发布中心(首页及内容中心)所发布的照片)下,是没有那张图片的资源的;)
现在就是如何解决这个资源在Apache 服务下集群同步的 问题;)
还有就是 FCKeditor,编辑时,用到的图片等资源的同步
(#UserFiles目录
#存放FCKEditor上发布的照片
\\resin-3.0.14\webapps\CMS\UserFiles)
这个路经是在web.xml里配置的:
    <servlet>
      <servlet-name>Connector </servlet-name>
      <servlet-class>
          com.fredck.FCKeditor.connector.ConnectorServlet
      </servlet-class>
      <init-param>
          <param-name>baseDir </param-name>
          <param-value>/UserFiles/ </param-value>
      </init-param>
      <init-param>
          <param-name>debug </param-name>
          <param-value>false </param-value>
      </init-param>
      <load-on-startup>6 </load-on-startup>
  </servlet><servlet>
      <servlet-name>SimpleUploader </servlet-name>
      <servlet-class>
          com.fredck.FCKeditor.uploader.SimpleUploaderServlet
      </servlet-class>
      <init-param>
          <param-name>baseDir </param-name>
          <param-value>/UserFiles/ </param-value>
      </init-param>
  </servlet> 

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【oliver_java】截止到2008-06-26 10:31:49的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:20                 
    结贴数:0                  结贴分:0                  
    未结数:1                  未结分:20                 
    结贴率:0.00  %            结分率:0.00  %            
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    麻烦一点的解决办法就是:上传文件的同时将文件地址写入数据库,当需要显示已上传的文件时先从数据库查出地址,再将此地址写入链接。
    (1) 这个改动也比较大,CMS发布,博客、圈子等,还有FCK Edit的图片,都要改动,改动范围较大
    (2) 且如果资源分布在不同的服务器上(8084,8085等),各个资源交叉调用,后期维护都会带来麻烦;)
    (3)    Apache平衡负载,集群服务就失去了意义;) 
      

  3.   

    最简单的一个解决办法就是:上传文件的功能不做集群。
    比如:任何需要上传文件的功能都提交到8084,任何需要显示已上传的文件的地方都链接到8084对应的地址。(1)这个要解决 非8084端口的其他服务器,把图片等相关资源 上传到 8084端口的服务器的问题,CMS发布,博客、圈子等,还有FCK Edit的图片,都要改动,改动范围较大,且Unix服务器提供的接口,和安全问题都是未知的。
    (2)且如果所有资源都放到8084,那么Apache平衡负载,集群服务就失去了意义;) 
      

  4.   

        原来他们把flash\图片等都放到某台服务器,然后用Apache集群,平衡负载,与其他服务器同步, 我们把项目部署在resin下,这个resin  可否支持同步? 至少我们可以指定resin 下的某些文件夹
    (存放相关资源的文件夹)同步~~~ 这样可以吗?