天天看點

17-redis cluster叢集:master水準擴容、slave的自動遷移master的水準擴容 slave的自動遷移

redis cluster模式下,不建議做實體的讀寫分離了

我們建議通過master的水準擴容,來橫向擴充讀寫吞吐量,還有支撐更多的海量資料

master的水準擴容

比如redis單機得情況下,讀吞吐是5w/s,寫吞吐2w/s,

擴充redis更多master,那麼如果有5台master,不就讀吞吐可以達到總量25w/s QPS,寫可以達到10w/s QPS

redis單機的情況,記憶體是6G或者8G,fork類操作的時候很耗時,會導緻請求延時的問題

擴容到5台master,能支撐的總的緩存資料量就是30G,40G ,又或者擴容到 100台,600G,800G,甚至1T+,這就實作了海量資料的吞吐量。

redis是怎麼擴容的

1、加入新master,手工搭一個節點出來,方式跟前面介紹的配置方式一樣。

mkdir -p /var/redis/7007

port 7007
cluster-enabled yes
cluster-config-file /opt/redisdir/clusterconf/nodeconf/node-7007.conf
cluster-node-timeout 15000
daemonize    yes                            
pidfile        /opt/redisdir/run/redis_7007.pid                         
dir         /opt/redisdir/7007        
logfile /opt/redisdir/7007.log
bind 192.168.1.51        
appendonly yes
           

搞一個7007.conf,再搞一個redis_7007啟動腳本

手動啟動一個新的redis執行個體,在7007端口上

redis-trib.rb add-node 192.168.31.227:7007 192.168.31.187:7001

redis-trib.rb check 192.168.31.187:7001

連接配接到新的redis執行個體上,檢視cluster nodes,确認自己是否加入了叢集,作為了一個新的master

2、reshard一些資料過去

resharding的意思就是把一部分hash slot從一些node上遷移到另外一些node上

redis-trib.rb reshard 192.168.31.187:7001

要把之前3個master上,總共4096個hashslot遷移到新的第四個master上去

How many slots do you want to move (from 1 to 16384)?

1000
           

在移動hash slot的時候會提示你,需要移動多少個slot。

然後還

3、添加redis node作為slave

同樣的方式添加一個節點。

mkdir -p /var/redis/7008

port 7008
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7008.conf
cluster-node-timeout 15000
daemonize    yes                            
pidfile        /var/run/redis_7008.pid                         
dir         /var/redis/7008        
logfile /var/log/redis/7008.log
bind 192.168.31.227        
appendonly yes
           
redis-trib.rb add-node --slave --master-id 28927912ea0d59f6b790a50cf606602a5ee48108 192.168.31.227:7008 192.168.31.187:7001
           

以上指令為添加節點,作為某個master的從節點。

4、删除node

先用resharding将資料都移除到其他節點,確定node為空之後,才能執行remove操作

redis-trib.rb del-node 192.168.31.187:7001 bd5a40a6ddccbd46a0f4a2208eb25d2453c2a8db

2個是1365,1個是1366

當你清空了一個master的hashslot時,redis cluster就會自動将其slave挂載到其他master上去

這個時候就隻要删除掉master就可以了

slave的自動遷移

比如現在有10個master,每個有1個slave,然後新增了3個slave作為備援,有的master就有2個slave了,有的master出現了salve備援

如果某個master的slave挂了,那麼redis cluster會自動遷移一個備援的slave給那個master

隻要多加一些備援的slave就可以了

為了避免的場景,就是說,如果你每個master隻有一個slave,萬一說一個slave死了,然後很快,master也死了,那可用性還是降低了

但是如果你給整個叢集挂載了一些備援slave,那麼某個master的slave死了,備援的slave會被自動遷移過去,作為master的新slave,此時即使那個master也死了

還是有一個slave會切換成master的

之前有一個master是有備援slave的,直接讓其他master其中的一個slave死掉,然後看有備援slave會不會自動挂載到那個master