-- 主節點 --- redis-7000.conf redis-7100.conf redis-7200.conf -- 從節點 --- redis-7001.conf redis-7101.conf redis-7201.conf
Redis集羣通常有多個節點組成,節點數量至少爲6個才能保證組成完整的高可用集羣;node
$ vim redis-7000.conf daemonize yes ## 開啓守護進程 port 7000 # 節點端口 logfile "/soft/redis/cluster/7000/redis.log" # 指定日誌輸入位置 cluster-enabled yes # 開啓集羣模式 cluster-node-timeout 15000 # 節點超時時間,單位毫秒 cluster-config-file "nodes-7000.conf" # 集羣內部配置文件【第一次啓動時若是沒有該文件,則會自動建立】
其餘節點配置和單機模式一致便可,配置文件命名規則:redis-{prot}.conf,準備好後啓動全部節點;redis
-- 主節點 --- redis-server /soft/redis/cluster/redis-7000.conf & redis-server /soft/redis/cluster/redis-7100.conf & redis-server /soft/redis/cluster/redis-7200.conf & -- 從節點 --- redis-server /soft/redis/cluster/redis-7001.conf & redis-server /soft/redis/cluster/redis-7101.conf & redis-server /soft/redis/cluster/redis-7201.conf &
檢查當前節點日誌是否正確,內容以下:vim
$ cat /cluster/redis-7000.log 77893:M 16 Apr 00:38:38.924 * Increased maximum number of open files to 10032 (it was originally set to 1024). 77893:M 16 Apr 00:38:38.925 * No cluster configuration found, I'm 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924' ... 77893:M 16 Apr 00:38:38.935 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 77893:M 16 Apr 00:38:38.935 # Server started, Redis version 3.2.0 ... 77893:M 16 Apr 00:38:38.935 * The server is now ready to accept connections on port 7000
節點首次啓動後生成集羣配置文件,內容爲:bash
-- 經過查看日誌方式 -- $ cat nodes-7000.conf 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 :0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
文件內存記錄了集羣初始狀態,這裏最重要的是節點ID【這是一個40位16進制字符串ide
該節點ID只建立一次【不一樣於運行ID】,節點重啓時會加載該配置文件進行重用;spa
-- 經過命令交互形式回顯 -- [root@test cluster]# redis-cli -p 7000 127.0.0.1:7000> cluster nodes 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 :7000 myself,master - 0 0 0 connected
節點握手是指一批運行在集羣模式下的節點經過Gossip協議彼此通訊,以達到感知對方的過程; 節點握手是創建集羣通訊的第一步,由客戶端發起命令:cluster meet {IP} {port}3d
步驟以下:日誌
1. 節點7000 發送meet消息給 節點7001 2. 節點7001 接受到meet消息後,保存節點7000的信息並回復pong消息 3. 以後,節點7000 和 7001 彼此按期經過ping/pong消息進行正常的節點通訊; -- 發送節點握手指令 -- 127.0.0.1:7000> cluster meet 127.0.0.1 7001 127.0.0.1:7000> cluster meet 127.0.0.1 7101 127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7100 127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7200 127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7300 -- 查看握手是否正常 -- 127.0.0.1:7000> cluster nodes c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7300 master - 0 1492278433843 0 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7200 master - 0 1492278432333 0 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492278430825 3 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492278432835 2 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492278429818 4 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected
此時,節點握手創建完成;但還不能正常工做:server
127.0.0.1:7000> CLUSTER info cluster_state:fail cluster_slots_assigned:0 ## slots【槽的意思】,此時爲0 表示目前全部槽沒有被分配到節點上 cluster_slots_ok:0 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:0 cluster_current_epoch:5 cluster_my_epoch:1 cluster_stats_messages_sent:8725 cluster_stats_messages_received:8725
Redis集羣把全部的數據映射到16384個槽中,每一個key會映射爲一個固定的槽,只有當節點分配了槽時,才能響應和這些槽關聯的鍵命令;blog
這裏經過 cluster addslots 命令爲節點分配槽:
--- 經過 bash 特性批量設置槽(lots) --- redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0..5461} redis-cli -h 127.0.0.1 -p 7000 cluster addslots {5462..10922} redis-cli -h 127.0.0.1 -p 7000 cluster addslots {10923..16383} --- 經過交互命令分配槽(lots) --- 127.0.0.1:7000> cluster addslots {0..5461} 127.0.0.1:7000> cluster addslots {5462..10922} 127.0.0.1:7000> cluster addslots {10923..16383} --- 查看集羣狀態 --- 127.0.0.1:7000> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:1 cluster_current_epoch:5 cluster_my_epoch:1 cluster_stats_messages_sent:8725 cluster_stats_messages_received:8725 127.0.0.1:7000> CLUSTER NODES c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7201 master - 0 1492280674461 0 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7201 master - 0 1492280674965 5 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492280673454 3 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492280675467 2 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492280672448 4 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected 0-16383
目前還有3個節點沒有使用,做爲一個完整的集羣;
每一個負責處理槽的節點都應該具備從節點,保證當它出現故障時可自動進行故障轉移;
集羣模式下,redis節點角色分配爲主節點和從節點;
首次啓動的節點和被分配槽的節點都是主節點,從節點負責負責主節點槽信息和相關數據;
--- 使用命令方式 --- $ redis-cli -h 127.0.0.1 -p 7000 cluster nodes c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7201 master - 0 1492288202486 0 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7200 master - 0 1492288205502 5 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492288204498 3 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492288201480 2 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492288203490 4 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected 0-16383 --- 創建主從節點 --- 127.0.0.1:7001> CLUSTER REPLICATE 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7101> CLUSTER REPLICATE 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7201> CLUSTER REPLICATE 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 --- 查看複製狀態信息 --- 127.0.0.1:7101> CLUSTER NODES c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7101 myself,slave 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 0 0 0 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7001 slave 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 0 1492288883018 3 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7201 slave 367ec3a52e8faedc37f3d919865016f50f689893 0 1492288884023 5 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7100 master - 0 1492288885033 4 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7200 master - 0 1492288881005 2 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 master - 0 1492288882012 1 connected 0-16383
127.0.0.1:7000> CLUSTER SLOTS 1) 1) (integer) 0 2) (integer) 16383 3) 1) "127.0.0.1" 2) (integer) 7000 # 主節點 3) "0c0bea9746cfe04dfcbb6ec1db35be5756dd7924" 4) 1) "127.0.0.1" 2) (integer) 7001 # 從節點 3) "34d2f50d036d7b95e5f3ae43571404c735b2e3ee"
127.0.0.1:7000> CLUSTER DELSLOTS 1 2 3 或者: redis-cli -h 127.0.0.1 -p 7000 cluster delslots {10923..16383}
一、手動建立集羣,重啓redis服務後;集羣斷開,節點握手也斷開 二、建立集羣分爲3步驟: 一、節點握手 二、分配槽 三、主從節點創建複製關係
相關連接: