3

我很困惑如何通過Node.js連接到AWS的ElastiCache Redis。我成功通過node_redis NPM設法連接到主要主機(001),但我無法使用ioredis的羣集功能,因爲顯然ElastiCache沒有實現CLUSTER命令。通過Node.js連接到ElastiCache羣集

我認爲必須有另一種方式,但AWS SDK for Node只具有管理ElastiCache的命令,而不是實際連接到它。

如果不使用CLUSTER,我擔心如果主節點失敗,我的應用程序將無法進行故障切換,因爲我無法回退到其他集羣。我也從我的Redis客戶端,Error: READONLY You can't write against a read only slave.當主交換機,我不知道如何處理優雅的錯誤。

我是否在推翻這個?我發現有關使用Node.js的ElastiCache Redis集羣的信息非常少。

+0

上[這]任何建議(http://stackoverflow.com/q/43872852/2404470)? – xameeramir

回答

5

我正在反思這一點。

問:Amazon ElastiCache for Redis提供哪些節點故障選項?

Amazon ElastiCache for Redis將通過獲取新的服務資源來修復節點,然後將重定向節點的現有DNS名稱以指向新的服務資源。因此,Redis節點的DNS名稱保持不變,但Redis節點的IP地址可能隨時間而改變。如果您有一個具有一個或多個只讀副本的複製組並且啓用了多可用區,則在發生主節點故障時,ElastiCache將自動檢測到該故障,選擇一個副本並將其提升爲新的主節點。它還會傳播DNS,以便您可以繼續使用主要端點,並在升級之後將其指向新提升的主要端點。有關更多詳細信息,請參閱本FAQ中的多可用區部分。在禁用多可用區的情況下選擇Redis複製選項時,如果發生主節點故障,您將可以選擇啓動故障切換到只讀副本節點。故障轉移目標可以位於同一個區域或另一個區域中。要故障回覆到原始區域,請將原始區域中的只讀副本提升爲主區域。您可以選擇構建應用程序以強制Redis客戶端庫重新連接到修復的Redis服務器節點。這可以幫助一些Redis庫在遇到通信錯誤或超時時無限期地停止使用服務器。

解決方案是隻連接到主要主節點,而不使用客戶端上的任何集羣。當主設備發生故障時,從設備將被升級並更新DNS,以便從設備將成爲主節點,而無需主機在客戶端進行更改。

爲了防止臨時連接錯誤時的故障發生時,你可以添加一些配置ioredis:

var client = new Redis(port, host, { 
    retryStrategy: function (times) { 
    log.warn('Lost Redis connection, reattempting'); 
    return Math.min(times * 2, 2000); 
    }, 

    reconnectOnError: function (err) { 
    if (err.message.slice(0, targetError.length) === 'READONLY') { 
     // When a slave is promoted, we might get temporary errors saying 
     // READONLY You can't write against a read only slave. Attempt to 
     // reconnect if this happens. 
     log.warn('ElastiCache returned a READONLY error, reconnecting'); 
     return 2; // `1` means reconnect, `2` means reconnect and resend 
     // the failed command 
    } 
    } 
});