我有一个应用程序在 Web 服务器 (ws1) 上运行,并连接到应用服务器 (as1)。我在另一个 Web 服务器 (ws2) 和另一个应用服务器 (as2) 上运行同一个应用程序。但我只有一个反向代理服务器。所以我的设置类似于
因此,目前我正在这些服务器之间进行负载平衡。我的 Nginx 配置如下:
http {
upstream myapp1 {
server ws1.example.com;
server ws2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
但是,使用 Nginx 进行负载平衡还是进行 HA 设置更好?如果我进行 HA 设置,是否应该将 Web 服务器和应用服务器进行集群?
答案1
对服务器进行负载平衡非常好,但是,如果提供负载平衡的服务器发生故障,则其他两台服务器都将无法访问。
解决这个问题的一种方法是建立一个 HA 安排,这样如果负载平衡器掉线,另一台服务器将立即接替它。
为了提供 HA,你可以使用类似保持活跃它使用 VRRP 协议来提供高可用性 Internet 地址。事实上,它工作得很好。类似下面的配置就可以工作。
假设你希望某个服务在 10.10.10.100 上可见
创建两台机器,一台的 IP 为 10.10.10.101,另一台的 IP 为 10.10.10.102,在两台机器上安装 keepalived 服务。记得在两台机器的 sysctl.conf 中设置:net.ipv4.ip_nonlocal_bind = 1。
按照描述设置 nginx 配置。
第一个节点keepalived.conf:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass secretpass
}
virtual_ipaddress {
10.10.10.100
}
}
第二个节点:
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass secretpass
}
virtual_ipaddress {
10.10.10.100
}
}
现在会发生的情况是,当主机运行时,它将提供虚拟 IP 10.10.10.100。如果您停止这台机器,另一台机器将接管该 IP。