Redis集群分析(36)

2021-10-19 17:27:52 字數 1462 閱讀 4403

1、 自動分割槽

在文件(23)到文件(35)中,我們分析了redis的哨兵模式,詳細介紹的該模式下的各個功能與原始碼。接下來我們繼續分析redis的自動分割槽,即cluster模式。

cluster模式

如同之前文件所分析的那樣。哨兵模式主要是對主從模式的擴充套件,而主從模式主要解決的是單點壓力,單點故障的問題。這就導致了主從模式下,所有的機器都儲存相同的資料。但是在cluster模式下需要解決的問題便是資料儲存問題。為了解決這個問題cluster會將資料分割槽,不同分割槽的資料會儲存到不同的機器上。所以在cluster模式下不同機器儲存的資料可能不同。

分割槽的方式

對資料的分割槽一種常用的方法是hash取模。利用hash演算法將資料的key值轉換成數值,然後再以集群中機器的數量為模數對該數值進行取模操作,最後得到的值便是該資料被儲存的機器的編號。

但是這種方式不利於擴容。在這種情況下想要擴容需要先將集群中所有的資料取出,然後再擴容,最後再將資料儲存回去。所以cluster在設計分割槽方式的時候新增了乙個hash槽的概念。它相當於在上述流程中再新增了一層,將hash取模的模數和集群的機器數進行了解耦合。在cluster模式下其取模的模數為hash槽的槽數,這個數固定為16384。在集群初始化的時候需要保證所有的hash槽都被集群裡的機器認領,當有槽位未被認領的時候集群不會對外提供服務。

配置cluster模式

配置cluster模式下的最少選項如下:

port 7000 

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

配置好上述檔案後,需要將該檔案分發到集群的其他機器上,然後使用redis-server和該配置檔案啟動redis服務。如果是初次啟動那麼這時只是啟動的多台redis伺服器而已,這些伺服器還未聯絡在一起,組成乙個集群。這時需要為每台機器分配槽位,建立集群。redis提供了乙個工具: redis-trib來完成這些操作。這個檔案位於src資料夾下,它可以用來完成建立新集群, 檢查集群, 或者對集群進行重新分片(reshared)等工作。

假設現在有六台redis伺服器,需要組成乙個三主三從的集群。那麼操作的命令如下:

.

/redis-trib.rb create --replicas 1

127.0

.0.1

:7000

127.0

.0.1

:7001 \ 127.0

.0.1

:7002

127.0

.0.1

:7003

127.0

.0.1

:7004

127.0

.0.1

:7005

其中create表示建立集群,–replicas 1表示為每個主節點建立乙個從節點,之後的便是集群內的redis服務的ip與port。

Redis集群原理分析

redis集群的原理主要是圍繞著 槽 的概念展開的,先來理解集群中 槽 的概念。reids集群是通過將所有的key進行分割槽來實現的,redis集群最多有16384個分割槽 也可以稱作 槽 英文 slot 然後在集群節點中指定分割槽範圍來實現。例如 集群中的節點a負責0 10000,節點b負責 10...

Redis集群分析(11)

1 redis的主從模式 在之前的文件中,我們介紹了redis的集群主要有兩種模式 哨兵模式和分片模式。而哨兵模式又是對主從模式的加強版,所以在分析哨兵模式前需要先分析主從模式。而主從模式最關鍵的地方在於將主伺服器的資料同步到從伺服器,保證集群內部資料的一致性。而資料同步又分為兩部分 伺服器中已經存...

redis搭建集群(偽集群)

1 建立6個資料夾 2 複製redis.conf檔案,並修改redis.conf 配置檔案 3 建立集群 4 連線客戶端 5 檢視狀態 建立 6個資料夾來存放redis.conf,因為redis集群最小需要的是,三組三從,每個資料夾代表一台伺服器,6007跟6008可忽略 先複製乙個到6001資料夾...