Redis Cluste部署

一.原生搭建篇Cluster瞭解cluster的架構

Redis-cluster是使用的是一致性哈希算法來切分數據存儲,總計16383個槽,分紅16383/N(redis節點)個分區,存取時將key轉換成int,key/16383來決定存取在哪一個分區。java

1.redis.conf配置文件中開啓支持cluster集羣,更名字爲redis-cluster-7000.conf(方便後面集羣管理)

port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
dir /opt/module/redis-cluster/data
logfile "7000.log"
dbfilename "dump-7000.rdb"
#開啓集羣
cluster-enabled yes
#集羣中本節點配置文件名 自動生成
cluster-config-file nodes-7000.conf
#當集羣中某個節點掛了,整個集羣是否中止服務,設置成no 繼續提供服務
cluster-require-full-coverage no

2.用上面的配置文件啓動redis,確保配置文件沒問題

3.sed命令生成其餘節點的配置文件

sed "s/7000/7001/g" redis-cluster-7000.conf >redis-cluster-7001.conf 
sed "s/7000/7002/g" redis-cluster-7000.conf >redis-cluster-7002.conf 
sed "s/7000/7003/g" redis-cluster-7000.conf >redis-cluster-7003.conf 
sed "s/7000/7004/g" redis-cluster-7000.conf >redis-cluster-7004.conf 
sed "s/7000/7005/g" redis-cluster-7000.conf >redis-cluster-7005.conf 
sed "s/7000/7006/g" redis-cluster-7000.conf >redis-cluster-7006.conf 

4.啓動每一個節點 redis-server redis-cluster-700(1~6).conf

啓動後會生成相應的nodes-700(0~6).conf文件。該文件列出了羣集中其餘節點,它們的狀態,持久變量等等。 因爲某些消息的接收,一般會將此文件重寫並刷新到磁盤上。node

5.每一個節點互通(meet)

meet通訊,保證每一個節點可以知道其餘節點負責的槽區間。redis

結構圖:算法

 

官方:服務器

請注意,Redis 羣集須要造成完整的網格(每一個節點與其餘節點相連,如上圖),但爲了建立羣集,不須要發送造成完整網格所需的全部 CLUSTER MEET 命令。重要的是發送足夠的 CLUSTER MEET 消息,以便每一個節點均可以經過一系列已知節點到達每一個其餘節點。架構

因此只須要有一條通路就能夠ui

進去7000的節點,執行cluster meet 與其餘節點通訊spa

redis-cli -p 7000
CLUSTER MEET 127.0.0.1 7001
CLUSTER MEET 127.0.0.1 7002
CLUSTER MEET 127.0.0.1 7003
CLUSTER MEET 127.0.0.1 7004
CLUSTER MEET 127.0.0.1 7005
CLUSTER MEET 127.0.0.1 7006

6.查看是否連通

redis-cli -p 7000 cluster info
#結果: cluster_state:fail #集羣狀態 cluster_slots_assigned:
0 #被分配的槽位數 cluster_slots_ok:0 #正確分配的槽位 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:7 #當前集羣下的全部節點,包括主從節點,7說明通了 cluster_size:0 #當前集羣下的有槽位分配的節點,即主節點 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:1391 cluster_stats_messages_pong_sent:1375 cluster_stats_messages_meet_sent:6 cluster_stats_messages_sent:2772 cluster_stats_messages_ping_received:1375 cluster_stats_messages_pong_received:1397 cluster_stats_messages_received:2772

7.分配槽

採用的是一致性哈希算法,來分配總共給定的16383個槽,此處爲了方便就均分了,實際開發中建議根據服務器配置分配。3d

這裏使用7001-7003做爲主節點 7004-7006作從節點code

#此處的分配規則
7001   0~5000
7002   5001~10000
7003   10001~16383
#代碼:
redis-cli -p 7001 CLUSTER ADDSLOTS 5000
redis-cli -p 7002 CLUSTER ADDSLOTS 10000
redis-cli -p 7003 CLUSTER ADDSLOTS 16838

結構圖:

 

8.配置主從

這裏須要用到Nodeid,第一步中配置生成的文件中能夠看

#第一步的配置  能夠查看nodes-7000.conf這個文件
cluster-config-file nodes-7000.conf

一一對應:紅框爲Nodeid

進入每一個主節點用 cluster replicate <Nodeid>

redis-cli -p 7001 cluster replicate da47d14c9e4079ad0973546027f598aab3596fff

查看結果

redis-cli -p 7001 cluster nodes

到此原生配置完成。

下一篇開始Ruby快速搭建Cluster集羣。

因爲Redis5+移除掉了Ruby,官方說明Redis-trib.rb移到Redis-cli -cluster命令,下一篇沒了。

 

使用redis-cli --cluster快速搭建集羣

#前面步驟同樣
1.配置主從
多個主從使用"\"隔離開
<幾個從>指定多少個從節點
# redis-cli --cluster create <主:port>  <從1:port> <從2:port> \ <主1> > <從1> \.... --cluster-replicas <幾個從>
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7004 \ 127.0.0.1:7002 127.0.0.1:7005 \ 127.0.0.1:7003 127.0.0.1:7006 --cluster-replicas 1

2.分配槽

#reshard host:port
#  --cluster-from <arg>
#  --cluster-to <arg>
#  --cluster-slots <arg>
#  --cluster-yes
#  --cluster-timeout <arg>
#  --cluster-pipeline <arg>
#  --cluster-replace

./redis-cli --cluster reshard 127.0.0.1:7001 --cluster-from 0 --cluster-to 5000

相關文章
相關標籤/搜索