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一直在接受寫請求,而造成很長時間資料不一致。