Redis 集羣部署

Redis Cluster 部署文檔

updated: 09/05/2019

1 說明

Redis Cluster 的主要特點如下:

  • 無中心結構,客戶端與 redis 節點直連,不需要中間代理層
  • 節點冗餘設計,slave->master 選舉,集羣容錯
  • 數據分片存儲,且支持在線分片
  • ASK / MOVED 轉向機制,可通過任意節點,讀寫不屬於本節點的數據

本文以部署一個可實現高可用的最小集羣爲例,集羣部署在三臺主機上,包含 M1、M2、M3、S1、S2、S3 六個節點。

M1、M2、M3 爲主節點對應 Redis 實例:7000,7001,7002
S1、S2、S3 爲從節點對應 Redis 實例:7003,7004,7005

主從節點交叉連接,對應關係爲:

M1 -> S2
M2 -> S3
M3 -> S1

2 環境準備

系統環境

主機 IP 節點-角色-實例(端口)
redis1 192.168.0.100 M1-master-7000、S1-slave-7003
redis2 192.168.0.101 M2-master-7001、S2-slave-7004
redis3 192.168.0.102 M3-master-7002、S3-slave-7005

3 安裝軟件

分別在三臺主機上編譯安裝 redis 5.0.4 版本。

安裝完畢建議將 redis bin 目錄加入 PATH 環境變量

4 配置集羣

參考步驟 4.1 - 4.3,分別在三臺主機上進行 Redis 集羣配置。

4.1 創建集羣目錄

創建集羣各節點配置和數據目錄。

mkdir -p /data/redis-cluster/{7000,7001}

以 redis1 爲例,目錄結構如下:

/data/redis-cluster/
├── 7000
│   ├── redis.conf  # redis 實例配置文件
│   └── nodes.conf  # redis 集羣節點的配置文件(由集羣自動創建)
└── 7003
│   ├── redis.conf  # redis 實例配置文件
│   └── nodes.conf  # redis 集羣節點的配置文件(由集羣自動創建)

4.2 創建實例配置文件

分別複製 redis 源碼目錄下的 redis.conf 至節點配置和數據目錄。

編輯 redis 實例配置文件中的各項配置。redis 默認未開啓集羣功能,需修改下面幾個配置開啓:

port 7000
bind 0.0.0.0                    # 允許其他主機連接
dir /data/redis-cluster/7000    # 節點實例配置目錄
cluster-enabled yes             # 開啓集羣
cluster-config-file nodes.conf  # 集羣配置文件
cluster-node-timeout 5000       # 超時時間
appendonly yes                  # 並開啓AOF模式

請根據生產環境性能需求和實際部署情況修改相關配置項,注意每個節點的實例配置文件中端口不同。

4.3 防火牆設置

根據情況修改服務器防火牆配置,允許 Redis 主機互相連接 7000-7005, 17000-17005 端口,允許所有業務服務器連接 Redis 服務器的 7000-7005 端口。

5 啓動集羣

5.1 啓動實例

分別在三臺主機上啓動全部 6 個 redis 節點實例,啓動時指定配置文件爲各自節點配置目錄中的 redis.conf。

5.2 啓動集羣

在任意一臺 redis 節點主機上執行如下命令啓動集羣:

redis-cli --cluster create \
    --cluster-replicas 1 \
    192.168.0.100:7000 \
    192.168.0.100:7001 \
    192.168.0.101:7002 \
    192.168.0.101:7003 \
    192.168.0.102:7004 \
    192.168.0.102:7005

注意修改命令中的 IP 爲 redis 節點實例端口對應的真實主機 IP。

根據提示輸入yes,出現下列信息則表示集羣創建成功。

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6 測試

查看集羣信息

在任意一個 redis 節點的主機上執行以下命令:

# redis-cli -c -h 192.168.0.100 -p 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:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:101
cluster_stats_messages_pong_sent:98
cluster_stats_messages_sent:199
cluster_stats_messages_ping_received:93
cluster_stats_messages_pong_received:101
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:199

列出集羣節點

在任意一個 redis 節點的主機上執行以下命令,列出集羣當前已知的所有節點(node),以及這些節點的相關信息。

# redis-cli -c -h 192.168.0.100 -p 7000 cluster nodes

輸出類似以下信息:

50725018cd7f5f20214b0ed462975258397dfe29 192.168.0.102:7005@17005 slave 39e335386bb48f012f433287ed853174009114e5 0 1554876136000 6 connected
8874f69c2f5747cce3a02387167a00cdaba43d3c 192.168.0.100:7001@17001 master - 0 1554876137380 2 connected 5461-10922
c9cb48efbc1a83098cb730a5295402d9cdb343c2 192.168.0.101:7003@17003 slave 917301c74a9ed1ed52918b8e4c7f88de9743c361 0 1554876136375 4 connected
5633e918818033552b1adc089d99fbe9bcf36589 192.168.0.102:7004@17004 slave 8874f69c2f5747cce3a02387167a00cdaba43d3c 0 1554876136072 5 connected
917301c74a9ed1ed52918b8e4c7f88de9743c361 192.168.0.100:7000@17000 myself,master - 0 1554876136000 1 connected 0-5460
39e335386bb48f012f433287ed853174009114e5 192.168.0.101:7002@17002 master - 0 1554876136878 3 connected 10923-16383

查看集羣數據槽分配

在任意一個 redis 節點的主機上執行以下命令,顯示集羣當前所有數據槽的分配情況。

# redis-cli -c -h 192.168.0.100 -p 7000 cluster slots

輸出類似以下信息:

1) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 7001
   4) 1) "127.0.0.1"
      2) (integer) 7004
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 7000
   4) 1) "127.0.0.1"
      2) (integer) 7003
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 7002
   4) 1) "127.0.0.1"
      2) (integer) 7005
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章