關於Redis集羣部署和持久化的相關問題

關於Redis集羣部署和持久化的相關問題

Q1:請問Redis集羣假如用三臺物理機做,每臺運行2個實例,如何保障每臺物理機的實例不是互爲主從的?

A1 : 這個問題其實我們通常情況下大家也都會遇到。第一點如果你是使用物理機來做,並且你每臺機器上面運行兩個實例,三臺機器每個機器上面運行2個實例,一共有6個實例。這6個實例你是否可以保證它每個互相都不爲主從的,其實是可以直接保證。

唯一的問題就是假如說這是一個集羣,然後發生故障轉移,發生節點的主動切換,就非常有可能存在你的主從發生了變更。其實這個地方的話其實我更加建議,如果你發現了這種問題的話,你手動去做切換,因爲物理機環境去做這個事情,目前我還沒看到有什麼特別好的解決辦法。

Q2 : 請問k8s 中擴容時,如何增加新節點。擴容和分配slot的步驟如何自動化的進行?

A2 : 我們分開兩步來講,第一部分是增加新節點,增加新節點的話,剛纔我其實在過程裏頭已經提到了,增加完新的節點之後,首先你一定要讓它能夠和集羣去做通信,然而這個地方就是需要你去修改集羣的配置文件,然後你需要他有一個NodeIP,因爲之間是通過IP去做通信的,所以你需要去修改它的配置文件,把它的 NodeIP加進去,這樣子他纔可以和集羣當中的其他節點去做通信,然而這個部分的話,我更推薦的是用operator去做。

Q3 : 請問如果不用Redis operator,也不使用分佈式存儲,k8s如何部署cluster集羣呢?

A3 : 不用Redis operator其實也是可以的,剛纔我也介紹過,有兩種模式,一種模式就是用StatefulSets,這種模式的話相對來說會比較穩妥一些。同時它的最主要的部分仍然是修改配置,你需要在你的Redis的容器鏡像當中,你可以給它加一個init容器,然後可以在這個部分先給他做一次修改配置的操作,這是可以的。修改完配置的操作之後,再把它給拉起來,這樣子他纔可以加入到集羣當中。

Q4 : 請問網絡延遲在不同網絡模型下有什麼區別?

A4 : 如果我們直接使用物理機的網絡,通常來講,我們不認爲這種方式有延遲,就是主機網絡一般情況下我們會忽略掉它的延遲,但是如果你使用的是overlay的這種網絡模型的話,因爲它是覆蓋層的網絡,所以你在去做發包解包的時候,當然是會有不同的資源的損耗,性能的損耗都是有的。

Q5 : 請問一般建議公司公用一個Redis集羣,還是各系統獨立集羣?

A5 : 這個問題當然是建議各個系統獨立集羣了,我們來舉一個最簡單的例子,比如說你在其中用到了list,我們都知道Redis就有一個ziplist的配置項,他其實跟你的存儲和你的性能是有關係的。如果你是公司的所有的東西都用同一個集羣,那你修改了Redis集羣的配置的話,很可能會影響到所有的服務。但如果你是每個系統獨立用一個Redis羣的話,彼此之間互不影響,也不會出現某一個應用不小心把集羣給打掛了,然後造成連鎖反應的情況。

Q6 : 請問Redis持久化,在生產中如何考慮呢?

A6 : 這部分東西我是這樣想的。如果你真的需要去做持久化,一方面Redis提供了兩種核心,一種是 RDB,另外一種是AOF,如果說你的數據很多的話,相應你的RDB可能會變得很大。如果你是去做持久化,我通常建議就是兩個裏頭去做一次權衡。因爲通常來講,即使你是使用物理機的環境,我也建議你的存儲目錄可以放到一個獨立的盤裏頭,或者說你可以去掛在一個分佈式的存儲,但是前提是你需要保證它的性能,因爲你不能因爲它的寫入性能而拖累你的集羣,所以更加推薦的就是你可以全都把它們打開,但是如果你數據其實沒那麼重要,你可以你只開AOF。

Q7 : 請問生產級別的ceph可靠不?

A7 : 其實ceph的可靠性這個問題,很多人都討論過,就我個人而言,ceph 的可靠性是有保證的。我這邊在用的 ceph 很多,並且存了很多比較核心的數據,ceph 的可靠性是 ok 的。

重點在於說你能不能搞得定他,而且有一家公司其實大家可能有所瞭解,叫做SUSE,就是一個Linux的一個發行版,這家公司其實提供了一個企業級的存儲解決方案,並且它的底層其實還是用的ceph,其實這也是正常的,只要有專人去搞這個事情,然後把它解決掉,我覺得ceph足夠穩定的。

順便提一下,如果你使用的是 k8s 的話,現在有一個項目叫做 rook,它其實提供了一個 ceph 的 operator,這種方案其實現在已經算是相對來說比較很穩定的了,推薦大家嘗試一下。

Q8: 請問申請內存、限制內存、還有本身Redis內存怎麼配置比較好?

A8: 這裏需要考慮幾個問題,首先我們先說Redis本身的內存,其實要看你的實際業務的使用場景,或者說你業務的實際需求,你肯定不可能讓你的Redis的實例或者Redis集羣的內存都佔滿。

如果是佔滿的話,你就需要開啓lru去做驅逐之類的事情,這是一方面。另一方面就是申請內存,其實我理解你這個地方要問的問題應該是指,在k8s環境下面,在k8s下面一個是request的,一個是limit,limit肯定是你的可用限制的內存,限制內存你一定需要考慮到Redis本身還要用到的一些內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章