20. 【實戰】redis cluster通過master水平擴容來支撐更高的讀寫吞吐+海量數據

流程

  1. redis cluster模式下,不建議做物理的讀寫分離;
  2. 建議通過master的水平擴容,來橫向擴展讀寫吞吐量,還有支撐更多的海量數據

redis單機,假設讀吞吐是5w/s,寫吞吐2w/s,擴展redis更多master,那麼如果有5臺master,不就讀吞吐可以達到總量25/s QPS,寫可以達到10w/s QPS

  1. redis單機,內存,6G,8G,fork類操作的時候很耗時,會導致請求延時的問題,擴容到5臺master,能支撐的總的緩存數據量就是30G,40G -> 100臺,600G,800G,甚至1T+,海量數據

redis cluster master擴容

增加新的master node

  1. 增加一個新的master服務,直接在eshop-cache03上啓動7007節點,和之前的7005,7006一樣;
mkdir -p /var/redis/7007
  1. 配置文件:/etc/redis/7007.conf
port 7007
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7007.conf
cluster-node-timeout 15000
daemonize	yes							
pidfile		/var/run/redis_7007.pid 						
dir 		/var/redis/7007		
logfile /var/log/redis/7007.log
bind 192.168.0.108	
appendonly yes
  1. 啓動腳本:/etc/init.d/redis_7007

參考18. 【實戰】重新搭建一套讀寫分離+高可用+多master的redis cluster集羣

  1. 手動啓動一個新的redis實例,在7007端口上
    在這裏插入圖片描述
  2. 將新的 master node 添加到 redis cluster 集羣中
redis-trib.rb add-node 192.168.0.108:7007 192.168.0.106:7001
redis-trib.rb check 192.168.0.106:7001

在這裏插入圖片描述

連接到新的redis實例上,cluster nodes,確認自己是否加入了集羣,作爲了一個新的master

reshard 遷移slot到新的master

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

  1. 執行命令:
redis-trib.rb reshard 192.168.0.106:7001

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

在這裏插入圖片描述
在這裏插入圖片描述

增加新的slave node

  1. 爲新的master node 服務增加 slave node,也是在eshop-cache03上啓動192.168.0.108:7008節點,和master 節點7008一樣:
mkdir -p /var/redis/7008
  1. 配置文件:/etc/redis/7008.conf
port 7008
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7007.conf
cluster-node-timeout 15000
daemonize	yes							
pidfile		/var/run/redis_7007.pid 						
dir 		/var/redis/7007		
logfile /var/log/redis/7007.log
bind 192.168.0.108
appendonly yes
  1. 啓動腳本:/etc/init.d/redis_7007

參考18. 【實戰】重新搭建一套讀寫分離+高可用+多master的redis cluster集羣

  1. 啓動成功後,掛載到master node 192.168.0.108:7007上面
redis-trib.rb add-node --slave --master-id 13e17e3a2331369b2fcbf8755129fd95ea8784b9 192.168.0.108:7008 192.168.0.106:7001

在這裏插入圖片描述
5. 重新查看redis cluster 狀態:7004 已經有2個slave node了
在這裏插入圖片描述

刪除node

  1. 先用resharding將數據都移除到其他節點;
redis-trib.rb reshard 192.168.0.106:7001

目前每個節點都是4096個,所以移動其他節點,2個1365,1個1366

在這裏插入圖片描述

  1. 確保node爲空之後,執行remove操作,命令後+master節點的id
    在這裏插入圖片描述
redis-trib.rb del-node 192.168.0.106:7001 13e17e3a2331369b2fcbf8755129fd95ea8784b9

可以發現,7007進程也已經被幹掉了。

在這裏插入圖片描述

slave 自動遷移

介紹

  1. 比如現在有10個master,每個有1個slave,然後新增了3個slave作爲冗餘,有的master就有2個slave了,有的master出現了salve冗餘

  2. 如果某個master的slave掛了,那麼redis cluster會自動遷移一個冗餘的slave給那個master

  3. 多加冗餘的slave

每個master只有一個slave,如果一個slave死了,然後很快,master也死了,那可用性還是降低了,但是如果整個集羣掛載了一些冗餘slave,那麼某個master的slave死了,冗餘的slave會被自動遷移過去,作爲master的新slave,此時即使那個master也死了,還是有一個slave會切換成master的

實測

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

  1. 之前7004 master 有兩個 slave;
    在這裏插入圖片描述
  2. master 7003slave 7002 kill 掉
    在這裏插入圖片描述
  3. 7004 master 現在還有一個slave了,分給了7003
    在這裏插入圖片描述
  4. 如果之前kill掉的 slave 7002 重新啓動,又會有一個master 有兩個 savle了,不再演示…
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章