首先声明一下这里的nginx是负载均衡器,而不是web服务器!它是作为web服务器前端来用的!
第一种:单纯的nginx负载均衡:(只列出相关nginx.conf配置)
...........
upstream backserver
{
//这里可以定义负载均衡的方法,默认为轮询
web server1; //要负载均衡的两台服务器
web server2;
}
server
{
location / {
..............
proxy_pass //名字要与前面的对应,当访问"/"时就会跳转到 backserver那个负载均衡集去了
}
}
这种方法有一个很大的缺陷,就是当nginx服务器宕机时,那么所有服务器都无法访问了,也就是没有我们常说的高可用性!
第二种:nginx(master)+nginx(backup)+keepalived+1vip
这种方法nginx配置与前面的一样,跟前面不同的关键地方是多了keepalived,他主要是实现nginx的高可用性,当master的nginx宕机时还有backup的nginx替换,确保web服务器正常工作!
列出相关keepalived.conf配置:
nginx(master)
vrrp_initstance VI_1
{
state MASTER
................
}
nginx(backup)
vrrp_initstance VI_1
{
state BACKUP
.......................
}
第三种:nginx(master+backup)+nginx(master+backup)+keepalived+2vip+dns轮询
这个方法主要实现nginx的负载,也就是两台nginx服务器都会实现一般工作,而且当一台nginx宕机时,另外一台nginx也会接管它的工作.这种nginx负载很明显是通过2vip+dns轮询实现的,其实也不能说负载均衡了,只是个分配问题.
列出相关keepalived.conf配置:
nginx 1
vrrp_initstance VI_1
{
state MASTER
priority 100
................
virtual_ipaddress{
192.168.100.1 //vip1
}
}
vrrp_initstance VI_2
{
state BACKUP
priority 99
................
virtual_ipaddress{
192.168.100.2 //vip2
}
}
这样nginx1对于vip1是出于master地位,同时作为vip2的替补
nginx 2
vrrp_initstance VI_1
{
state BACKUP
priority 99
................
virtual_ipaddress{
192.168.100.1 //vip1
}
}
vrrp_initstance VI_2
{
state MASTER
priority 100
................
virtual_ipaddress{
192.168.100.2 //vip2
}
}
而nginx2在vip2出于master地位,同时作为vip1的替补
一般来说采用第二种方法已经很好了,但如果想最求更完美的话就花点心思做第三种方法了!