我正在反思這一點。
問: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
}
}
});
上[這]任何建議(http://stackoverflow.com/q/43872852/2404470)? – xameeramir