Apache集群

我知道如何在一台Apache服务器下运行两个或更多的tomcat。 我想知道如何在群集中运行两个或多个apache服务器并运行我的应用程序。 我知道这是可能的。 有人可以build议一个简单的教程? 有很多关于apache-tomcat集成的文章,但不适用于apache集群。 :(如果你们提供了一个基本的教程,那将是非常棒的。

得到一个软件或硬件负载平衡器,并把它放在Apache服务器的前面。

简单的教程:

1)从http://www.inlab.de/balance-3.42.tar.gz安装免费的负载均​​衡器:“balance”

2)运行:balance -f 80 server1:80 server2:80 server3:80

高级教程:上述解决scheme的问题是它引入了单点故障。 如果你的“平衡”服务器死亡,那么你不能访问它后面的任何东西。

如果你想使用本地化的解决schemeGPL,那么你需要运行“vvrpd”,“heartbeat”或其他一些故障转移群集解决scheme(或google:linux负载平衡)。

如果您想要使用软件解决scheme,但要有钱,则可以查看Redat群集,Veritas群集或其他供应商群集软件。

尽pipe你最好/最可靠的解决scheme是获得一对硬件负载平衡器(这将自动进行故障切换)。

我假设你想要在多台机器上运行(在一台机器上运行多个Apache实例,这是毫无意义的)。

不幸的是,你不能findHA集群的简单教程,因为它不是一个简单的主题。 您有很多不同的概念,从低级networking到共享数据存储等特定于应用程序的项目。

我在http://linuxvirtualserver.org/开始了我的集群冒险。 您可能想从http://www.linuxvirtualserver.org/architecture.html开始并从那里开始。

看一对硬件电器肯定是一个好的开始。 您可以用软件来完成,但是您可能会发现您的networking团队(如果有的话)可能会反对您在未经批准的设备上执行与networking相关的function – 这可能会限制故障转移技术。

Apache(httpd)本身并不知道集群httpd实例。 因此,您应该有一种方法(即脚本)将configuration从一个节点同步到其他工作节点。 我假设你的httpd实例是作为一个反向代理工作的,尽pipe这不一定是这种情况)。

你当然想要投入一些时间和精力来集中logging,为此我发现ELK栈非常有用。 这是一个相当扩展的CustomLog声明 – 在那里的所有内容已被certificate是有用的。

# Note also that httpd will escape " to \", plus various others... (see the docs), # which conveniently matches up with JSON's requirements. # (well, almost; it doesn't do Unicode correctly) # # THINGS TO NOTE/CHECK/ADD/REMOVE: # Any session cookies are good to log # Example: JSESSION (change/remove as required) # Any particular HTTP request headers (particularly for servers behind a reverse proxy) # my_application_stack # Set this to something obvious for the stack you're working on (eg. 'main_website') # # Also, you'll want to remove the ### comments below, and ensure that the \ is the last character on each line # LogFormat "{ \ \"@timestamp\":\"%{%FT%T%z}t\", \ \"client_ip\":\"%a\", \ \"client_port\":\"%{remote}p\", \ \"server_ip\":\"%A\", \ \"X-Forwarded-For\":\"%{X-Forwarded-For}i\", \ \"user\":\"%u\", \ ### Note: probably not useful unless Apache is doing auth (eg. Basic auth) \"JSESSIONID\":\"%{JSESSIONID}C\", \ ### CHANGE \"pid\":\"%p\", \ \"protocol\":\"%H\", \ \"http_method\":\"%m\", \ \"vhost\":\"%{Host}i\", \ \"service_port\":\"%p\", \ \"path\":\"%U\", \ \"query_string\":\"%q\", \ \"referer\":\"%{Referer}i\", \ \"user_agent\":\"%{User-agent}i\", \ \"response_code\":\"%>s\", \ \"response_location\":\"%{Location}o\", \ \"Content-Type\":\"%{Content-Type}o\", \ \"bytes_in\":\"%I\", \ \"bytes_out\":\"%O\", \ \"keepalive\":\"%X\", \ \"duration_micros\":\"%D\", \ \"my_application_stack\":\"change_me\", \ ### CHANGE \"my_environment\":\"prod\" \ ### CHANGE }" my_logstash_json CustomLog logs/access_log.logstash_json my_logstash_json 

在Apache 2.2中loggingcaching命中/未命中(这在2.4中更好,但我们不使用它):

 SetEnv CACHE_MISS 1 

然后在您的LogFormat中包含%{CACHE_MISS}e

不要忘记一个logrotate规则:

 /var/log/httpd/access_log.logstash_json { rotate 1 # We do reload httpd after each rotation, so we don't want it to be # too frequent, so set to a reasonably chunky value size 10M nocompress missingok notifempty sharedscripts postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript } 

然后你需要select一个日志发送者(有很多可以select的),这将会使日志文件尾随并发送给ELK栈。

请注意,有时比较configuration是非常有用的做…或者,而不是审核差异,或只是找出设置的东西。 为此,我写了一个名为httpd-dump-config的工具 ,在我们的反向代理configuration中configuration超过1000行时,我经常使用它。

如果您有多个IP地址,请使用DNS轮循机制,

否则,我会鼓励你使用Pacemaker + Corosync的IP和Apache故障转移

如何在CentOS 7上使用Pacemaker设置Apache主被动群集