轉自http://meia.fun/article/1544161420745java
redis:根目錄 config:放置redis配置文件 data:dir配置的目錄 log:放置logfile配置的日誌文件
建立 6 個配置文件 (至少 6 個節點才能保證組成完整高可用的 redis 集羣) 放在 config 目錄下,本教程使用的端口區間是 6379~6384
推薦的配置文件命名規則redis-{port}.conf
修改每一個配置文件的 port 屬性爲各自的端口
、logfile 修改成../log/各自端口號.log
、dir 修改成../data/
、dbfilename 修改成各自的端口號-dump.rdb
、daemonize 修改成yes
、cluster-enabled 修改成yes
、cluster-node-timeout 修改成15000
、cluster-config-file 修改成nodes-各自的端口號.conf
node
配置修改完畢,逐個啓動 6 個 redisredis-server redis-{port}.conf
redis
執行 cluster meet {ip} {port} 進行節點之間握手通訊
注意: 握手時 ip 建議使用服務器真實 ip,由於此 ip 會被保存在集羣配置文件中,若是使用 127.0.0.1 這個地址,當服務器外部的客戶端 (例如 java 的 redis 客戶端) 鏈接集羣時會經過集羣配置的這個地址 (127.0.0.1) 去訪問節點,但實際節點並不在本地,因此會致使鏈接出現異常。
首先使用redis-cli
鏈接上其中一個 redis 服務,而後執行cluster meet {ip} {port}
命令和其它端口的服務逐個進行握手
完成後執行cluster nodes
命令查看集羣節點信息,若是展現 6 個節點說明節點之間已經彼此創建了聯繫
節點創建聯繫以後集羣還不能正常工做,這時集羣處於下線狀態, 全部的數據讀寫都被禁止
執行cluster info
能夠查看集羣狀態
只有當 16384 個槽所有分配給節點後, 集羣才進入在線狀態。數據庫
分配槽
Redis Cluster 採用虛擬槽分區,槽範圍是 0~16383
把 16384 個 slot 平均分配給 637九、 6380、 6381 三個節點,如下命令利用了 bash 的字符展開特性bash
redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0..5461} redis-cli -h 127.0.0.1 -p 6380 cluster addslots {5462..10922} redis-cli -h 127.0.0.1 -p 6381 cluster addslots {10923..16383}
執行完成用cluster nodes
命令可查看節點已分配的槽集合服務器
主從複製
目前還有三個節點沒有使用, 做爲一個完整的集羣, 每一個負責處理槽的節點應該具備從節點, 保證當它出現故障時能夠自動進行故障轉移。
因爲首次啓動的節點和被分配槽的節點都是主節點, 從節點負責複製主節點槽信息和相關的數據
使用cluster replicate {nodeId}
命令讓一個節點成爲從節點,命令執行必須在對應的從節點 (638二、638三、6384) 上執行, nodeId
是要複製主節點的節點 IDless
//複製6379 127.0.0.1:6382>cluster replicate cfb28ef1deee4e0fa78da86abe5d24566744411e OK //複製6380 127.0.0.1:6383>cluster replicate 8e41673d59c9568aa9d29fb174ce733345b3e8f1 OK //複製6381 127.0.0.1:6384>cluster replicate 40b8d09d44294d2e23c7c768efc8fcd153446746 OK
執行完成後用cluster nodes
命令可查看節點主從狀態spa
目前爲止, 咱們依照 Redis 協議手動創建一個集羣。 它由 6 個節點構成,3 個主節點負責處理槽和相關數據, 3 個從節點負責故障轉移。
若是服務器外使用 Java 鏈接集羣發生異常,請檢查節點bind
屬性是否綁定了127.0.0.1
,若是是請改爲0.0.0.0
,另外還要注意查看防火牆是否開放端口。3d