服务器故障与迁移

因此,托管我 Discourse 网站的 DigitalOcean 服务器出现了某种问题,DigitalOcean 正尝试将我的网站迁移到另一台服务器。我已就此事与他们取得联系,但我想问问 Discourse 社区中是否有人曾遇到过类似问题。

对此情况大家有什么建议吗?他们通常会在迁移完成后通知您吗?他们尚未回复我的邮件。我的网站已经完全停服了几天,这对我的社区来说非常不利。我没有对 Discourse 进行任何更改,因此我知道问题是由 DigitalOcean 服务器故障引起的。我这边需要做些什么特别的事情吗?还是应该再等一等?

我已关闭并重新启动了 droplet,并使用 ./launcher rebuild app 重新构建了 Discourse。重新构建后,我遇到了以下错误

Error response from daemon: driver failed programming external connectivity on endpoint app (fd1221330787160dee95f94a1256ca0dc8ddb8be2bc3c4d576ab54d3b768613a): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.

来自 DigitalOcean 的邮件:

我们已发现托管您一个或多个 Droplet 的物理机存在问题,相关 Droplet 列表如下。为尽量减少中断,我们将把这些 Droplet 迁移到更健康的物理机上。在迁移过程中,控制面板和 API 事件(包括:关机、调整大小以及尝试销毁 Droplet)将针对受影响的 Droplet 无法成功执行。

为尽量减少停机时间,我们将尽可能尝试执行实时迁移。实时迁移不会导致停机,但在网络切换到新物理主机时,磁盘 I/O 性能可能会有轻微下降,并可能出现不到一秒的数据包丢失。

如果我们无法对某个 Droplet 执行实时迁移,我们将执行离线迁移,在此期间该 Droplet 将被关机并在窗口期内离线迁移。

我猜 Digital Ocean 的问题与此无关,可能是你的服务器上安装或运行了其他 Web 服务器。是否安装了 Apache 或 Nginx?即使 Discourse 未运行,你的站点上是否仍有某个 Web 服务器在运行?

我最初设置时使用的是 DigitalOcean 的 Discourse 自动安装程序,它基于 Ubuntu 及其默认打包的其他组件。这个 Droplet 上没有其他网站。看起来 Nginx 正在运行并处于活动状态,而 Apache 的状态返回了错误。

当在 Firefox 中访问我的网站时,显示如下内容:

错误 521 Ray ID: 5c686964ad310d1a • 2020-08-22 00:17:35 UTC
Web 服务器已关闭

浏览器 - Cloudflare - 主机
正常 - 正常 - 错误

我运行了命令 systemctl status apache2 来检查 Apache 是否正在运行,结果显示:

    ● apache2.service - The Apache HTTP Server
       Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
      Drop-In: /lib/systemd/system/apache2.service.d
               └─apache2-systemd.conf
       Active: failed (Result: exit-code) since Fri 2020-08-21 16:16:24 UTC; 7h ago
      Process: 912 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILUR
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: AH0055
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: (98)Ad
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: (98)Ad
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: no lis
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: AH0001
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: Action
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 apachectl[912]: The Ap
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 systemd[1]: apache2.se
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 systemd[1]: apache2.se
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 systemd[1]: Failed to 
lines 1-17/17 (END)

我还运行了 systemctl status nginx 命令来检查 Nginx,结果显示:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
   Active: active (running) since Fri 2020-08-21 16:16:24 UTC; 8h ago
     Docs: man:nginx(8)
  Process: 972 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=
  Process: 917 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process o
 Main PID: 976 (nginx)
    Tasks: 2 (limit: 1108)
   CGroup: /system.slice/nginx.service
           ├─976 nginx: master process /usr/sbin/nginx -g daemon on; master_proc
           └─977 nginx: worker process

Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 systemd[1]: Starting A
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 systemd[1]: nginx.serv
Aug 21 16:16:24 discourse-beta-ubuntu-s-1vcpu-1gb-nyc1-01 systemd[1]: Started A
lines 1-15/15 (END)

查看那封邮件,似乎你可以先等等看他们会有什么反应。不过,我建议你务必做好异地备份,以防万一!

一般来说,使用官方安装方法要好得多。除非你在这个 Droplet 上还运行其他服务(不仅仅是 Discourse),我的建议是借此机会从头开始,创建一个新的 Droplet,并按照官方支持的安装指南进行安装:discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

之后,你可以从旧实例下载备份,然后上传到新实例,这样就能重新运行起来,并且使用的是官方支持的实例,后续维护也会更加轻松。