我在配置 nginx 时遇到了麻烦。
我使用 nignx 作为反向代理。我想将所有请求发送到我的第一个服务器。如果第一个服务器宕机,我想将请求发送到第二个服务器。
简而言之,如果没有负载平衡,如何实现故障转移解决方案?
答案1
您需要的是主动+被动设置。以下是 nginx conf 代码片段示例,可帮助您入门:
upstream backend {
server 1.2.3.4:80 fail_timeout=5s max_fails=3;
server 4.5.6.7:80 backup;
}
server {
listen 80;
server_name whatevs.com;
location / {
proxy_pass http://backend;
}
}
因此,通常情况下,所有请求都会转到主机 1.2.3.4。如果该主机出现三次故障,则 4.5.6.7 将接管。
答案2
扩展 chrskly 的答案,您可能需要配置 3 个标志/配置。
- 失败超时:失败尝试的总时间,并将服务器标记为关闭。如果是 5 秒,则将尝试最大失败次数在 5 秒内尝试,如果仍然失败,则将该服务器标记为 DOWN 5 秒。
- 最大失败次数:最大尝试次数
- 代理连接超时:等待连接的时间。
在以下 GRPC 示例中,如果主服务器在 7 秒内无法连接,则切换到备份服务器并将主服务器标记为关闭 6000 秒:
upstream grpcservers {
server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1; # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
server 192.168.0.XX:9999 backup;
}
location / {
grpc_pass grpc://grpcservers;
grpc_connect_timeout 7s; # If conn cant be made in 7sec, switch to backup
}
答案3
nginx 中的负载平衡非常简单,我们只需在上游范围内配置服务器名称,在那里我们编写用于负载平衡的服务器列表。nginx
默认支持不同的负载平衡算法,它是循环的,但我们用不同的键来配置它,如 ip_hash...
http{
upstream servername{
ip_hash//for sticky hash
least_conn//FOR least connection
sever localhost:1001;
sever localhost:1002;
sever localhost:1003;
}