2015-05-06 24 views
0

我們有一個設置:
2 PHP服務器
2個Redis的服務器上運行的主/從
1登錄服務器,存儲所有類型的日誌中elastcisearch

Redis的定點實施

我們要爲redis服務器實現自動故障轉移,現在在php服務器redis主地址ir硬編碼。

而在logstash配置中,日誌服務器中的logstash實例與來自master的redis輸入也進行了編碼。

我們在兩個redis服務器上安裝了redis sentinel,它工作正常。

但問題是,如何讓主人在PHP和logstash或者說是不正確的做法。

對於PHP,我發現這個客戶包裝https://github.com/Sparkcentral/PSRedis

但還沒有找到logstash什麼,我quess說我只是在錯誤的方向

所以,問題是,如果搜索如果不是有人能指出我的話,這是正確的方向。

回答

5

爲了與哨兵的工作記住,你需要三個實例,所以在你的設置確保在日誌服務器上安裝一個哨兵例如,一個在每個Redis的服務器實例爲好。 Sentinel的三個副本應該運行在相互獨立的計算機/虛擬機上(因此同一臺物理主機中的多個虛擬機並不是一個好主意)。

這就是說,爲了給哨兵工作,你的客戶需要實現哨兵協議如下規定:http://redis.io/topics/sentinel-clients

https://github.com/Sparkcentral/PSRedis頁面我無法找到他們正在實現什麼的任何暗示,他們是否實現了我上面消息中指定的最新Sentinel協議?我會打開一個問題,詢問他們是否實施了記錄的Sentinel協議:如果不是,他們應該,如果是的話,他們應該在自述文件中記錄它們。

顯然Predis本身還沒有實現支持哨兵:https://github.com/nrk/predis/issues/131

如果你有時間去消費,我建議:

  1. 問PSRedis他們究竟落實。
  2. 熟悉Sentinel文檔中描述的協議,它是非常基本的東西
  3. 檢查自己,如果PSRedis以正確的方式實現它,如果不是,提供拉請求。

快樂黑客。

+0

現在predis一直支持Redis的前哨(https://github.com/nrk/predis):對於主 - 支持從屬複製設置和redis-sentinel。 – MingalevME

-3

在Python如果你想知道你的Redis是主做:

import redis 

R = redis.Redis() 
role = R.info()['role'] 
if role=='master': 
    print 'I am master' 
else: 
    print 'I am slave' 
+0

嗨。問題被標記爲[tag:php]。請根據標籤寫下您的答案。謝謝! :) –