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