Apache和Nginx如何配置负载均衡

Apache配置

两台服务器

1、例如我有127.0.0.1(master)、127.0.0.2(minion)

2、我需要统一入口为127.0.0.1

apache2设置负载均衡

1、方法一(未实践):

1
2
3
4
在http.conf(即/apache2.conf)添加下列代码
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

2、方法二:

1
2
3
4
5
添加软链
sudo ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
sudo ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
sudo ln -s /etc/apache2/mods-available/proxy_balancer.load /etc/apache2/mods-enabled/proxy_balancer.load
sudo ln -s /etc/apache2/mods-available/slotmem_shm.load /etc/apache2/mods-enabled/slotmem_shm.load

修改000-default.conf

在*.80下面添加下列代码

1
2
3
4
5
6
7
8
9
10
11
12
13
ProxyRequests Off 
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080 loadfactor=2 //loadfactor为分配的比例
BalancerMember http://127.0.0.2 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster/ //注意 balancer前面有空格
# 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!
<Location /balancer-manager>
SetHandler balancer-manager
order Deny,Allow
Deny from all
Allow from localhost
</Location>

注:因为2台服务器,所以我上面是通过127.0.0.1的80端口转发到了8080

三台服务器

修改000-default.conf

在*.80下面添加下列代码

1
2
3
4
5
6
7
8
9
10
11
12
13
ProxyRequests Off 
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.2 loadfactor=1
BalancerMember http://127.0.0.3 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster/ //注意 balancer前面有空格
# 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!
<Location /balancer-manager>
SetHandler balancer-manager
order Deny,Allow
Deny from all
Allow from localhost
</Location>

注:此时访问127.0.0.1 你的请求就会被分配到2或者3服务器上面了

Nginx配置

修改127.0.0.1服务器下的server_name.com.conf

添加下列代码

1
2
3
4
5
6
location / {
proxy_pass http://server_name.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X_Forwarded-For $proxy_add_x_forwarded_for;
}

Nginx常见负载均衡策略

修改127.0.0.1服务器下的nginx.conf添加下列代码(DNS轮询)

1
2
3
4
upstream test.com{
server 127.0.0.2;
server 127.0.0.3;
}

Weight

1
2
3
4
upstream test.com{
server 127.0.0.2 weight=3;
server 127.0.0.3 weight=3;
}

权重越高,在被访问的概率越大,如上例,分别是30%,70%。

ip_hash(主要解决session问题)

1
2
3
4
5
upstream test.com{
ip_hash;
server 127.0.0.2;
server 127.0.0.3;
}

fair(第三方)

1
2
3
4
5
upstream test.com{
fair;
server 127.0.0.2;
server 127.0.0.3;
}

127.0.0.2和127.0.0.3服务器下面分别添加server_name.com.conf即可

常见问题

配置不生效

1、查看配置完后是否重启apache或者nginx

2、无法链接服务器,查看防火墙等是否关闭