如何在主动 - 被动设置中设置两个Nginx容器作为反向代理并进行故障转移?

时间:2016-12-29 12:07:04

标签: nginx docker

我在Linux-EC2服务器上设置了一个Nginx容器。我的Nginx配置文件如下:

server {
    listen      80;
    server_name     client-dev.com;
    location / {
        proxy_pass         http://dev-client.1234.io:5001/;
        proxy_redirect     off;

        ##proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}
server {
    listen      80;
    server_name     client-test.com;
    location / {
        proxy_pass         http://test-client-1234.io:5005/;
        proxy_redirect     off;

        ##proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

它将具有不同端口的请求传递到端口80.现在,我需要在主动 - 被动模式下创建冗余Nginx。如果Nginx容器停止/停止。

为此,我需要在同一台服务器中设置另一个Nginx容器吗?如果是这样,应该如何设置自动进行故障转移?

我看过"上游"选项,但正如我发现,它不适用于这种情况。我拥有的proxy_pass是外部和动态的,我使用docker-cloud中的脚本获取它们。

还有另一种名为" docker-gen"但是,我不确定它会有多大用处,如果有的话我更喜欢用另一种方式?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我可以考虑以下选项:

  1. Kubernetes:您可以为nginx设置创建部署并使用活跃性探针。 Kubernetes将使用您提供的http请求/间隔探测nginx容器,如果pod不健康,它将被终止并重新创建。使用kubernetes集群中的多节点,您甚至可以缓解节点故障。

  2. Docker Swarm:使用具有多个节点的docker swarm模式,您可以缓解节点故障,但应该通过可以使用bash和{{1}完成的外部自定义脚本来检查nginx运行状况}。

  3. 使用keepalived的独立主机:这是使用keepalived的传统nginx主动/被动群集。您也可以将它与docker一起使用,但它会很脏。因为所有容器在一台主机上都是被动的。