在 ubuntu 上使用 keepalived 和 nginx 实现高可用性

问题描述

我有两个相同的 linux 服务器通过 Nginx 提供相同的内容。我想通过keepalived通过故障转移获得高可用性,即1号服务器总是尽可能服务Nginx内容,如果它崩溃,服务器2(备份)将开始服务Nginx内容内容不会因服务器而异到服务器)。当我停止服务器 1 时,一切似乎都正常工作,它通过服务器 2 上配置的内部 IP 提供服务,但是如何使该内容通过最终端点提供给外部?也就是说,客户端连接到“domain.externo.com”并在服务器 2 关闭时提供服务器 2 的内容

基本基础架构如下所示:

infrastructure photo

为此,我在主服务器上使用了具有以下配置的 keepalived 工具(“/etc/keepalived/keepalived.conf”):

#        script "/usr/bin/curl -k https://172.31.12.20" #Slave
        script "/usr/bin/curl -k https://172.31.11.251" # Master
        interval 2
        weight 2
        fall 2
        rise 2
}
vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 1
        priority 101                    # 101 on master,100 on backup
        advert_int 1
        virtual_ipaddress {
            172.31.100.100/24
        }
        track_script {
            chk_Nginx
        }
}

在slave配置中("/etc/keepalived/keepalived.conf")

vrrp_script chk_Nginx {
        script "/usr/bin/curl -k https://172.31.12.20" #Slave
#        script "/usr/bin/curl -k https://172.31.11.251"        # Master
        interval 2
        weight 2
        fall 2
        rise 2
}
vrrp_instance VI_1 {
        interface eth0
        state SLAVE
        virtual_router_id 1
        priority 100                    # 101 on master,100 on backup
        advert_int 1
        virtual_ipaddress {
            172.31.100.100/24
        }
        track_script {
            chk_Nginx
        }
}

我有Master的Nginx配置(Slave很相似,不是为了加长帖子):

    listen       80;
    listen  [::]:80;
    server_name  domain.externo.com;

    location / {
        rewrite ^ https://$host$request_uri? permanent;
    }

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/Nginx/html;
    }
}
server {
    listen       443 ssl http2;
    listen  [::]:443 ssl http2;

    server_name domain.externo.com;

    ssl_certificate /etc/certs/domain.externo.com/fullchain.pem;
    ssl_certificate_key /etc/certs/domain.externo.com/domain.externo.com.key;
    ssl_trusted_certificate /etc/certs/domain.externo.com/domain.externo.com.ca.crt;

    include /etc/Nginx/conf.d/ssl.conf;
    location ~ / {
      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      # # Fix the “It appears that your reverse proxy set up is broken" error.
#      proxy_pass          https://172.31.100.100;
      proxy_read_timeout  90;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/Nginx/html;
    }
}

我在之前的配置文件“/etc/keepalived/keepalived.conf”中尝试过在指令中引入域:

...
virtual_ipaddress {
           # 172.31.100.100/24
           domain.externo.com
...
        }

这行不通。我在 Nginx 或 KeepAlived 配置中缺少什么?我希望有一个人可以帮助我。预先非常感谢您

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)