1. 程式人生 > >Redis學習筆記六——搭建redis叢集(非分散式真正的cluster)

Redis學習筆記六——搭建redis叢集(非分散式真正的cluster)


要讓叢集正常工作至少需要3個主節點,在這裡我們要建立6個redis節點,

其中三個為主節點,三個為從節點,對應的redis節點的ip和埠對應關係如下:

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

1、redis叢集配置:

將redis.conf複製一份作為redis-cluster.conf,修改如下配置:

port 6379
bing  #建議將主機地址127.0.0.1和主機的實際IP或區域網地址都繫結
appendonly yes
daemonize yes #允許以後臺程式允許

跟叢集有關的配置:

cluster-enabled yes
cluster-config-file nodes-6379.conf #(建議以nodes-埠號的形式命名,方便辨識)
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

redis-cluster.conf複製六份到以埠號命名的資料夾下,並將名稱更改為埠號以便於區分。

分別修改如下配置:

port #對應埠號
bing  #對應ip   建議加上127.0.0.1原因後面解釋
cluster-config-file

2、redia叢集環境準備工作

必須安裝的東西:

ruby(用來執行redis-trib.rb指令碼,建立叢集)

rubygems(用來安裝redis)此處安裝不需要重新下載redis

 安裝命令:

redis-cluater的搭建需要執行ruby的指令碼,所以需要ruby的環境

所以先需要安裝ruby的環境,

yum install ruby

然後再使用yum安裝gem

yum install rubygems

然後使用gem 安裝redis 例如我的版本是3.2.1

gem install -l redis-3.2.1.gem

3、叢集啟動和建立

然後就可以進入redis的src目錄執行

./redis-trib.rb  create --replicas 1 127.0.0.1:7000127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

預設是前三個為主,後三個為從

預設情況下不能從slaves讀取資料,但建立連線後,執行一次命令READONLY,該slaves即可讀取資料。

4、客戶端登入

用redis-cli -c -h -p命令登入 

-c是以叢集方式登入; 

-h後跟主機號 ;

-p後跟埠號。

綁定了127.0.0.1則可以省略-h引數。不加-c則客戶端不自動切換。

例如:客戶端登入7000埠的,設定的資料應該存放在7001上則會報錯請轉到7001。而加上-c啟動則會自動切換到7001客戶端儲存。

5、叢集配置解析

預設情況下不能從slaves讀取資料,但建立連線後,執行一次命令READONLY,該slaves即可讀取資料。

否則只能以redis-cli -c -h -p命令登入 -c是以叢集方式

cluster-enabled yes    叢集開關,預設是不開啟叢集模式。

cluster-config-file nodes-6379.conf  叢集配置檔案的名稱,每個節點都有一個叢集相關的配置檔案,持久化儲存叢集的資訊。這個檔案並不需要手動配置,這個配置檔案有 Redis生成並更新,每個Redis叢集節點需要一個單獨的配置檔案,請確保與例項執行的系統中配置檔名稱不衝突。

cluster-node-timeout 15000節點互連超時的閥值。叢集節點超時毫秒數。即節點與叢集其他節點斷開多長時間將被認定為超時。建議稍微大一點

cluster-slave-validity-factor 10在進行故障轉移的時候,全部slave都會請求申請為master,但是有些slave可能與master斷開連線一段時間了,導致資料過於陳舊,這樣的slave不應該被提升為master。該引數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是:比較slave斷開連線的時間和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果節點超時時間為三十秒, 並且slave-validity-factor為10,假設預設的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移

cluster-migration-barrier 1master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個引數若被設為2,那麼只有當一個主節點擁有2個可工作的從節點時,它的一個從節點才會嘗試遷移。

cluster-require-full-coverage yes預設情況下,叢集全部的slot有節點負責,叢集狀態才為ok,才能提供服務。設定為no,可以在slot沒有全部分配的時候提供服務。不建議開啟該配置,這樣會造成分割槽的時候,小分割槽的master一直在接受寫請求,而造成很長時間資料不一致。