相關文章:
時序數據庫 InfluxDB(一)
時序數據庫 InfluxDB(二)
時序數據庫 InfluxDB(三)
時序數據庫 InfluxDB(四)
時序數據庫 InfluxDB(五)
時序數據庫 InfluxDB(六)數據庫
InfluxDB 開源的社區版本面臨的最大的問題就是單點故障和容災備份,有沒有一個簡單的方案去解決這個問題呢?segmentfault
既然有單點故障的可能,那麼索性寫入多個節點,同時也解決了容災備份的問題:併發
一、在不一樣的機器上配置多個 InfluxDB 實例,寫入數據時,直接由客戶端併發寫入多個實例。(爲何不用代理,由於代理自身就是個單點)。異步
二、當某個 InfluxDB 實例故障而致使寫入失敗時,記錄失敗的數據和節點,這些失敗的數據能夠臨時存儲在數據庫、消息中間件、日誌文件等等裏面。spa
三、經過自定義的 worker 拉取上一步記錄的失敗的數據而後重寫這些數據。代理
四、多個 InfluxDB 中的數據最終一致。日誌
固然你須要注意的是:code
一、因爲是併發寫入多個節點,且不一樣機器的情況不一,因此寫入數據應該設置一個超時時間。中間件
二、寫入失敗的數據必需要與節點相對應,同時你應該考慮如何去定義失敗的數據:因爲格式不正確或者權限問題致使的 4xx 或者 InfluxDB 自己異常致使的 5xx ,這些與 InfluxDB 宕機等故障致使的失敗顯然是不一樣的。blog
三、因爲失敗的數據須要臨時存儲在一個數據容器中,你應該考慮所使用的數據容器可否承載故障期間寫入的數據壓力,以及若是數據要求不可丟失,那麼數據容器也須要有對應的支持。
四、失敗數據的重寫是一個異步的過程,因此寫入的數據應該由客戶端指定明確的時間戳,而不是使用 InfluxDB 寫入時默認生成的時間戳。
五、故障期間多個 InfluxDB 可能存在數據不一致的狀況。