负载均衡部分

安装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>

 

By charlie

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注