手動搭建 redis 集羣

轉自http://meia.fun/article/1544161420745java

手動搭建 redis 集羣

redis 基本命令:

  • 啓動 redis 服務:redis-server xxx.conf
  • 鏈接 redis 服務:redis-cli -h xx -p xx
  • 中止 redis 服務:redis-cli -p {port} shutdown

單機模式主要配置:

  • port:端口
  • logfile:日誌文件
  • dir:redis 工做目錄(存放持久化文件和日誌文件)
  • dbfilename:數據庫文件名
  • daemonize:是否已守護進程的方式啓動 redis

集羣模式主要配置:

  • cluster-enabled: 是否開啓集羣
  • cluster-node-timeout:節點超時時間,單位毫秒
  • cluster-config-file:集羣內部配置文件 (此文件由 redis 自動生成,自動維護)

目錄結構:

redis:根目錄 config:放置redis配置文件 data:dir配置的目錄 log:放置logfile配置的日誌文件 

集羣搭建步驟

  1. 建立 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-各自的端口號.confnode

  2. 配置修改完畢,逐個啓動 6 個 redis
    redis-server redis-{port}.confredis

  3. 執行 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 個槽所有分配給節點後, 集羣才進入在線狀態。數據庫

  4. 分配槽
    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命令可查看節點已分配的槽集合服務器

  5. 主從複製
    目前還有三個節點沒有使用, 做爲一個完整的集羣, 每一個負責處理槽的節點應該具備從節點, 保證當它出現故障時能夠自動進行故障轉移。
    因爲首次啓動的節點和被分配槽的節點都是主節點, 從節點負責複製主節點槽信息和相關的數據
    使用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

相關文章
相關標籤/搜索