自上次重新啟動以來,Influxdb 不斷重新啟動

自上次重新啟動以來,Influxdb 不斷重新啟動

自從上次重新啟動以來,我每隔 1-2 分鐘就會看到以下內容:

Aug 02 13:53:00 monitor systemd[1]: influxdb.service: start operation timed out. Terminating.
Aug 02 13:53:00 monitor systemd[1]: influxdb.service: Failed with result 'timeout'.
Aug 02 13:53:00 monitor systemd[1]: Failed to start InfluxDB is an open-source, distributed, time series database.
Aug 02 13:53:00 monitor systemd[1]: influxdb.service: Scheduled restart job, restart counter is at 4.
Aug 02 13:53:00 monitor systemd[1]: Stopped InfluxDB is an open-source, distributed, time series database.
Aug 02 13:53:00 monitor systemd[1]: Starting InfluxDB is an open-source, distributed, time series database...
Aug 02 13:53:00 monitor influxd-systemd-start.sh[3539]: Merging with configuration at: /etc/influxdb/influxdb.conf

於 29/07/2021 influx 更新自1.8.6-11.8.7-1。作業系統是Ubuntu 20.04伺服器。此後第一次重新啟動時問題就開始出現。
最初有權限問題/usr/lib/influxdb/scripts/influxd-systemd-start.sh,導致無法啟動。我將權限更改為 0755 並且它啟動了,但不斷重新啟動。它似乎正在接受重新啟動之間的連接和數據,因為 telegraf 仍在填充資料庫,並且 Grafana 能夠顯示統計信息,只要它與重新啟動不一致。

我也看到留言了

influxd-systemd-start.sh[12171]: [tcp] 2021/08/02 14:21:40 tcp.Mux: Listener at 127.0.0.1:8088 failed failed to accept a connection, closing all listeners

它正在監聽這些端口

root@monitor$ ss -ilpn | grep influx
tcp     LISTEN   0        4096                                        127.0.0.1:8088                                              0.0.0.0:*                      users:(("influxd",pid=15115,fd=3))
tcp     LISTEN   0        4096                                                *:8086                                                    *:*                      users:(("influxd",pid=15115,fd=32))

據我所知,配置沒有改變。沒有活動的防火牆規則。

有人知道它為什麼開始行為不端嗎?

答案1

看起來正在/usr/lib/influxdb/scripts/influxd-systemd-start.sh嘗試進行健康檢查:

 while [ "$result" != "200" ]; do
   sleep 1
   result=$(curl -s -o /dev/null http://$HOST:$PORT/health -w %{http_code})
 done

這是失敗的。從文件日期來看,啟動包裝器是在 7 月 21 日才建立的,因此看起來啟動檢查是新的。

如果我手動嘗試我得到:

root@monitor$ curl https://127.0.0.1:8088/health
curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to 127.0.0.1:8088 

它因多種原因而失敗。

  1. 因為我配置了 TLS,所以需要是 https
  2. 因為我沒有明確定義綁定端口,因為我使用預設值,所以腳本獲取了錯誤的端口。
  3. 因為啟用了 TLS,所以它需要 FQDN,而不是 localhost,否則憑證驗證檢查會失敗。
  4. 預設啟動腳本上的權限也是錯誤的

為了解決這個問題,我編輯了/lib/systemd/system/influxdb.service文件並

  1. 將 Type=forking 改為 Type=simple
  2. 將 ExecStart 更改為: ExecStart=/usr/bin/influxd -config /etc/influxdb/influxdb.conf --pidfile /var/lib/influxdb/influxd.pid $INFLUXD_OPTS

答案2

這是 Influxdb v1.8.7 中引入的錯誤。Github 問題

有多種方法可以解決這個問題你的解決方案是其中一種方式。在我們的例子中,Influx 的啟動時間比啟動腳本允許的 10 秒視窗要長一些,因此我只是將sleep 1檔案中的行更改為/usr/lib/influxdb/scripts/influxd-systemd-start.sh,以便sleep 2為 Influx 提供更多的啟動時間。

相關內容