I 负载均衡部分
安装apache这种事就不讲了,本文以安装在/usr/local/apache2 为例。装完后,在/usr/local/apache2/conf/httpd.conf 编辑如下内容。
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
如果不是http的话,还要加载其它proxy模块,例如mod_proxy_ftp.so
接下来是配置虚拟主机,如果你想直接配在根目录的话,请发挥你的想象力
Listen 9011 <VirtualHost *:9011> ServerAdmin yucanlin@live.cn ProxyRequests Off <Proxy balancer://cluster> BalancerMember http://192.168.8.6:8080 BalancerMember http://192.168.8.6:9012 status=+H </Proxy> ProxyPass / balancer://cluster/ ProxyPassReverse / balancer://cluster/ </VirtualHost>
上文的意思是,当访问9011端口时,流量转到http://192.168.8.6:8080。另一台服务器http://192.168.8.6:9012 后面有 status=+H, 表示只有当其他负载服务器失效的时候,流量才会转到这里。ProxyPass 表示将流量代理到哪里,后面写的是balancer://cluster/,表示转到上面那组表达式中。需要注意的是,上面写的是<Proxy balancer://cluster>,下面是ProxyPass / balancer://cluster/,不要把下面最后的“/”忘了。
II 故障转移部分
很明显, http://192.168.8.6:9012 这台机子就是故障转移用的。这是一个php的站点,所有的请求都返回如下信息。
{"error_code":"50301","path":"system","err_message":"╮(╯_╰)╭ 维护中"}
这个网站只有两个文件,一个是.htaccess,apache用的rewrite文件。用来把所有请求重定向到index.php。内容如下:
<IfModule mod_rewrite.c> RewriteEngine on #不显示index.php RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L] </IfModule>
另一个是index.php文件,内容如下:
<?php header("Content-type:text/json"); $result = array("error_code" => "50301", "path" => "system", "err_message" => "╮(╯_╰)╭ 维护中"); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>
这两个文件被我放在了/usr/local/apache2/htdocs/maintenance目录中,下面是apache关于该PHP网站的虚拟主机配置。
Listen 9012 <VirtualHost *:9012> ServerAdmin yucanlin@live.cn DocumentRoot "/usr/local/apache2/htdocs/maintenance" ServerName localhost ServerAlias localhost ErrorLog "logs/maintenance-error_log" CustomLog "logs/maintenance-access_log" common </VirtualHost> <Directory /usr/local/apache2/htdocs/maintenance> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
这里使用apache的rewrite特性,需要加载相应的动态库。编辑/usr/local/apache2/conf/httpd.conf 如下内容:
LoadModule rewrite_module modules/mod_rewrite.so
III 常规反向代理设置
<VirtualHost *:80> ServerAdmin yucanlin@live.cn ServerName yucanlin.cn ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://192.168.1.189:80/ ProxyPassReverse / http://192.168.1.189:80/ </VirtualHost> <VirtualHost *:80> ServerAdmin yucanlin@live.cn ServerName blog.yucanlin.cn ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://192.168.1.84:9000/ ProxyPassReverse / http://192.168.1.84:9000/ </VirtualHost>