apache +tomcat 群集 组播路由丢失.
自定义apache的发布目录: 通过修改Apache的配置文件%APACHE2_HOME%/conf/httpd.conf可以定置自己的Apache服务器。注意修改该配置文件前要先停止正在运行的Apache服务器。在相应位置增加以下行可以定义自己的文件系统容器,设置自己的本地文件系统到网络空间的映射:Alias /homepage "D:/heavyz/homepage"<Directory "D:/heavyz/homepage"> Options Indexes FollowSymLinks -ExecCGI DirectoryIndex index.php index.html home/index.php home/index.html Order allow,deny Allow from all Deny from enpc.fr</Directory> 分析:以上语句通过<Directory>标签定义了一个文件系统容器,并使用Alias指令把该容器映射到/homepage的URL上去。通过这里的设置,不会影响原来的DocumentRoot,或其它的已自定义的文件系统容器。在该文件系统容器中还定义了一系列属性。对上述配置的解释如下: * <Directory "D:/heavyz/homepage"> and </Directory> : 定义本地文件系统容器,该容器位于D:/heavyz/homepage中。 * Alias /homepage "D:/heavyz/homepage" : 当URL中的路径名为/homepage时,将映射到该文件系统容器中。 * Options Indexes FollowSymLinks -ExecCGI : 当搜索不到默认首页时,允许列出目录的内容;允许目录中的符号链;不允许执行CGI脚本。 * DirectoryIndex index.php index.html home/index.php home/index.html : 按照列出的四个本地URL搜索默认首页,最先找到的文件作为首页返回。(即若URL:http://localhost/homepage,则会先搜索默认首页,若查不到相应的默认首面,则根据第二点配置,显示homepage当前目录的文件列表) * Order allow,deny : Order规定了HTTP客户的访问权限。先允许再禁止(allow,deny)表明allow中允许的访问权限优先级低于deny中禁止的访问权限。 * Allow from all : 先允许来自任何地方的HTTP客户的访问请求。 * Deny from enpc.fr : 再禁止域名为enpc.fr的HTTP客户的访问请求(国立路桥学校ENPC的主机不允许访问该页面),对于这些客户,服务器返回403 Forbidden信息。注意Order中定义了deny的优先级高于allow,故该指令将生效。假设在本地文件系统上存在文件D:\heavyz\homepage\index.html,重新启动Apache服务器,并访问页SEVERE: Unable to start cluster.java.net.SocketException: No such device at java.net.PlainDatagramSocketImpl.join(Native Method) at java.net.PlainDatagramSocketImpl.join(PlainDatagramSocketImpl.java:172) at java.net.MulticastSocket.joinGroup(MulticastSocket.java:276) at org.apache.catalina.cluster.mcast.McastServiceImpl.start(McastServiceImpl.java:221) at org.apache.catalina.cluster.mcast.McastService.start(McastService.java:323) at org.apache.catalina.cluster.mcast.McastService.start(McastService.java:261) at org.apache.catalina.cluster.tcp.SimpleTcpCluster.start(SimpleTcpCluster.java:781) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1004) at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:448) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) at org.apache.catalina.startup.Catalina.start(Catalina.java:552) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)Oct 2, 2010 3:12:37 PM org.apache.catalina.startup.Catalina startSEVERE: Catalina.start: LifecycleException: java.net.SocketException: No such device at org.apache.catalina.cluster.tcp.SimpleTcpCluster.start(SimpleTcpCluster.java:797) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1004) at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:448) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) at org.apache.catalina.startup.Catalina.start(Catalina.java:552) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)以上原因为:组播路由丢失. route add -net 228.0.0.4 netmask 255.255.255.255 dev eth0 <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="5000" selectorTimeout="100" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/></Channel>tomcat集群和负载均衡的实现(session同步)补充 因为tomcat的session同步功能需要用到组播,windows默认情况下是开通组播服务的,但是linux默认情况下并没有开通,可以通过指令打开route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0,如果需要服务器启动时即开通组播需在/etc/sysconfig/static-routes文件内加入eht0 net 224.0.0.0 netmask 240.0.0.0。具体组播概念请查阅CCNP相关内容。