redis cluster 集群管理工具

2021-01-16 linux運維菜

前言

在redis源碼編譯的時候,在src目錄下會有一個redis-trib.rb的腳本,這個腳本是ruby寫的,用於管理redis cluster。

安裝系統依賴包

yum -y install epel-release

yum -y install ruby rubygem-redis

redis-trib.rb

/opt/redis/bin/redis-trib.rb

查看一下幫助

Usage: redis-trib <command> <options> <arguments ...>

create host1:port1 ... hostN:portN

--replicas <arg>

check host:port

info host:port

fix host:port

--timeout <arg>

reshard host:port

--from <arg>

--to <arg>

--slots <arg>

--yes

--timeout <arg>

--pipeline <arg>

rebalance host:port

--weight <arg>

--auto-weights

--use-empty-masters

--timeout <arg>

--simulate

--pipeline <arg>

--threshold <arg>

add-node new_host:new_port existing_host:existing_port

--slave

--master-id <arg>

del-node host:port node_id

set-timeout host:port milliseconds

call host:port command arg arg .. arg

import host:port

--from <arg>

--copy

--replace

help (show this help)

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

從上面可以知道redis-trib.rb具有以下功能:

create:創建集群 --replicas可以指定從節點個數

check:檢查集群

info:查看集群信息

fix:修復集群

reshard:在線遷移slot

rebalance:平衡集群節點slot數量

add-node:將新節點加入集群

del-node:從集群中刪除節點

set-timeout:設置集群節點間心跳連接的超時時間

call:在集群全部節點上執行命令

import:將外部redis數據導入集群

常用例子

1、create創建集群:create命令可選replicas參數,replicas表示需要有幾個slave。

/opt/redis/bin/redis-trib.rb create --replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006

2、info查看集群:info命令用來查看集群的信息。info命令也是先執行load_cluster_info_from_node獲取完整的集群信息。

/opt/redis/bin/redis-trib.rb info 127.0.0.1:8001

3、check檢查集群:檢查集群狀態的命令,沒有其他參數,只需要選擇一個集群中的一個節點即可。

/opt/redis/bin/redis-trib.rb check 127.0.0.1:8001

4、fix修復集群:fix命令的流程跟check的流程很像,顯示加載集群信息,然後在check_cluster方法內傳入fix為

true的變量,會在集群檢查出現異常的時候執行修複流程。目前fix命令能修復兩種異常,一種是集群有處於遷移中的slot的節點,一種是slot未完全分配的異常。

/opt/redis/bin/redis-trib.rb fix 127.0.0.1:8001

5、reshard在線遷移slot:reshard命令可以在線把集群的一些slot從集群原來slot負責節點遷移到新的節點,利用reshard可以完成集群的在線橫向擴容和縮容。

/opt/redis/bin/redis-trib.rb reshard 127.0.0.1:8001

(然後根據提示操作就可以了,也可以根據參數直接設置完成)

6、rebalance平衡集群節點slot數量:rebalance命令可以根據用戶傳入的參數平衡集群節點的slot數量,rebalance功能非常強大,可以傳入的參數很多。

host:port:這個是必傳參數,用來從一個節點獲取整個集群信息,相當於獲取集群信息的入口。

--weight :節點的權重,格式為node_id=weight,如果需要為多個節點分配權重的話,需要添加多個–weight 參數,即--weight a44dd3ede3f=5 --weight 8e60b3a1=5,node_id可為節點名稱的前綴,只要保證前綴位數能唯一區分該節點即可。沒有傳遞–weight的節點的權重默認為1。

--auto-weights:這個參數在rebalance流程中並未用到。

--threshold :只有節點需要遷移的slot閾值超過threshold,才會執行rebalance操作。具體計算方法可以參考下面的rebalance命令流程的第四步。

--use-empty-masters:rebalance是否考慮沒有節點的master,默認沒有分配slot節點的master是不參與rebalance的,設置--use-empty-masters可以讓沒有分配slot的節點參與rebalance。

--timeout :設置migrate命令的超時時間。

--simulate:設置該參數,可以模擬rebalance操作,提示用戶會遷移哪些slots,而不會真正執行遷移操作。

--pipeline :與reshar的pipeline參數一樣,定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值為10。

/opt/redis/bin/redis-trib.rb rebalance --threshold 1 127.0.0.1:8001

7、add-node將新節點加入集群:add-node命令可以將新節點加入集群,節點可以為master,也可以為某個master節點的slave。

--slave:設置該參數,則新節點以slave的角色加入集群

--master-id:這個參數需要設置了–slave才能生效,–master-id用來指定新節點的master節點。如果不設置該參數,則會隨機為節點選擇master節點。

/opt/redis/bin/redis-trib.rb add-node --slave --master-id b12f7ab5c229fdf817aa7b5a4c534463ce223c62 127.0.0.1:8007

8、del-node從集群中刪除節點:del-node可以把某個節點從集群中刪除。del-node只能刪除沒有分配slot的節點。

/opt/redis/bin/redis-trib.rb del-node 127.0.0.1:8001 7ec63a08d2355448d16a84b502974832c52359e1

9、set-timeout設置集群節點間心跳連接的超時時間:set-timeout用來設置集群節點間心跳連接的超時時間,單位是毫秒,不得小於100毫秒,因為100毫秒對於心跳時間來說太短了。

/opt/redis/bin/redis-trib.rb set-timeout 127.0.0.1:8001 30000

10、call在集群全部節點上執行命令:call命令可以用來在集群的全部節點執行相同的命令。call命令也是需要通過集群的一個節點地址,連上整個集群,然後在集群的每個節點執行該命令。

/opt/redis/bin/redis-trib.rb call 127.0.0.1:8001 get key

11、import將外部redis數據導入集群:import命令可以把外部的redis節點數據導入集群。

總結

redis cluster集群有了這個腳本就輕鬆多了,不需要通過redis-cli一個個操作。

相關焦點

  • redis cluster-cluster 命令手動管理redis集群
    使用cluster命令管理redis cluster集群1、列印集群的信息 CLUSTER INFO cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail
  • redis cluster 之master 選舉過程
    在redis 3.0版本後,官方推出了redis cluster 分布式解決方案,當一個redis節點掛了可以快速地切換到另一個節點。當遇到單機內存、並發等瓶頸時,可以採用分布式方案要解決問題.redis-cluster架構中,被設計成共有16384(2的14次方)個hash slot。每個master分得一部分slot,其算法為:hash_slot = crc16(key) mod 16384 ,這就找到對應slot。群集至少需要3主3從,且每個實例使用不同的配置文件。
  • 不懂Redis Cluster原理,我被同事diss了!
    Redis 緩存作為使用最多的緩存工具被各大廠商爭相使用。通常我們會使用單體的 Redis 應用作為緩存服務,為了保證其高可用還會使用主從模式(Master-Slave),又或者是讀寫分離的設計。圖片來自 Pexels但是當緩存數據量增加以後,無法用單體伺服器承載緩存服務時,就需要對緩存服務進行擴展。
  • Redis 3.0.0 RC4 發布,無 Redis Cluster 修復
    此版本包括關於 redis-cli 方面的新特性,一個使用 xterm 256 顏色的延遲光譜可視化工具。Reids 團隊計劃兩周後發布一個 RC 版本或者是 3.0.0 穩定版本。Reids 3.0.0.RC4 常規改進:* [FIX] redis-cli CSV output NIL spurious newline removed.
  • 使用ClusterLabs實現Asterisk/FreeSWITCH集群部署
    市場上有很多關於業務伺服器的集群部署的商業方案,可能一般的小客戶承受力部署的成本。以前關注過ClusterLabs 這個開源項目,但是一直沒有真正去搭建測試。通過技術資料研究,很多Asterisk/FreeSWITCH用戶開始慢慢使用此集群解決方案。今天給大家推薦一下,希望在今後的集群部署中可以考慮作為一個集群軟交換/媒體伺服器的辦法。
  • 管理Kubernetes集群的50個開源實用工具
    推薦一篇博客,這篇博客裡列舉了50個實用的Kubenretes工具,所有的工具都是開源的,有的提供商業支持,這些工具分為以下幾類:
  • 機率大的 Redis 面試題(含答案)|內存|key|原子性|哈希|redis_網易...
    單線程的redis為什麼這麼快redis的數據類型,以及每種數據類型的使用場景,Redis 內部結構redis的過期策略以及內存淘汰機制【~】Redis 為什麼是單線程的,優點如何解決redis的並發競爭key問題Redis 集群方案應該怎麼做?都有哪些方案?有沒有嘗試進行多機redis 的部署?如何保證數據一致的?對於大量的請求怎麼樣處理Redis 常見性能問題和解決方案?
  • Linux講座之打造高可靠性NFS集群(組圖)
    圖3:hwbrowser 畫面    3.安裝Red Hat 集群管理員套件    用root 登入node1 安裝clumanager 與redhat-config-cluster 套件才能設置RedHat 集群管理員,將光碟收入光碟機中,便會自動執行安裝程序(圖4)。
  • Redis教程:Redis持久化方式
    何時執行快照出現下面的情況redis會快照內存裡的數據用戶發送bgsave命令(此時redis會fork一個子進程,子進程負責生成硬碟文件,父進程負責繼續接受命令)用戶發送save命令(和bgsave命令不同,發送save命令後,到系統創建快照完成之前系統不會再接收新的命令,換 句話說save命令會阻塞後面的命令,而bgsave不會)用戶在配置文件了配置了類似這樣的命令
  • 博客:解析NLB/CLB/MSCS三類Cluster群集
    Cluster 這個集群還要看是哪家的產品,個人認為絕大部分的cluster目的都是N個node分攤去做一個或某幾個共同的任務。按照功能和結構可劃分成HA(High-availability高可用集群)LB(Load balancing 負載均衡集群)  雙機熱備份方案中,根據兩臺伺服器的工作方式可以有三種不同的工作模式,即:雙機熱備模式、雙機互備模式和雙機雙工模式。
  • Redis如何存儲和計算一億用戶的活躍度
    2.如何滿足搜索,redis是一個鍵值對的內存結構,只能根據key來進行定位value值,無法做到像elastic search那樣對文檔進行倒排索引快速全文檢索。redis其實有這種數據結構的,可以以很少的空間來存儲大量的信息。
  • redis - aof持久化介紹
    AOF簡介redis持久化存儲的方式有rdb序列化存儲和aof(append only file)。aof就是將操作和數據以格式化指令的方式追加到操作日誌的尾部,在append操作返回後,才進行實際的數據變更。
  • K8s單controller多集群監測總結——client-go
    最近面臨一個需求,如何監控多個K8s集群的service,並將其名下的pod們的IP記錄下來,便於管理把,主要是做網絡方面的ACL。client-go的github地址:https://godoc.org/admiralty.io/multicluster-controller,client-go裡面的examples
  • PrimeCluster(PCL)HA集群軟體產品概述
    PrimeCluster HA(PCL HA)是德國富士通-西門子計算機公司(Fujitsu-Siemens Computers)提供的業界領先的支持雙機熱備和多節點集群的高可用管理軟體。PCL HA是一種應用與系統高可用性(High Availability)管理器。它為關鍵業務應用及其相關資源提供了能夠持續訪問的平臺。
  • 一文看懂集群、分布式與負載均衡的關係
    負載均衡(Load Balance)  網絡的負載均衡是一種動態均衡技術,常見的實現方式是通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理均衡地分配出去。這種技術基於現有網絡結構,提供了一種擴展伺服器帶寬和增加伺服器吞吐量的廉價有效的方法,加強了網絡數據處理能力,提高了網絡的靈活性和可用性。
  • Python使用redis存儲對象
    Python總的對象存儲到redis中默認為字符串,那麼如何存儲對象呢?下面就看看如何直接將Python中對象存儲到redis中先寫個測試redis是否正常連接上import rediscache = redis.StrictRedis('172.20.0.227',6379)
  • 大數據必學:redis深入了解 Redis 的持久化機制(RDB、AOF)
    因為 redis是一個內存資料庫,所有數據都存儲在內存中,而且內存中的數據非常容易丟失,所以 redis的數據持久化就變得非常重要, redis提供了兩種數據持久化方法,分別用於 RDB和 AOF,而 redis默認用於 RDB的數據持久化方法。
  • 分布式與集群分久必合,淺析Filecoin集群架構優化方向
    集群(cluster)是指在多臺不同的伺服器中部署相同應用或服務模塊,簡單來說,集群指的是將幾臺伺服器集中在一起,實現同一業務。集群一般是指物理集中、統一管理的,從形態上來說,集群只是一個物理形態,但並不是一個工作方式,從工作方式來說,集群也分為單機結構集群、集群結構集群以及分布式結構集群。
  • gtoken v1.1.0 發布,gf 的 token 插件,加入 Redis 緩存支持
    gtoken此版本主要加入了緩存redis支持,便於項目集群部署介紹基於gf框架的token插件,通過服務端驗證方式實現token認證; 支持單機gcache和集群gredis
  • Nutanix-CE 集群修改CVM和AHV IP位址及修改CVM內存
    修改CVM內存1、對CVM內存的修改,分為兩種情況,一種是在集群已經搭建完畢的情況下進行修改,一種是在全新安裝時進行修改。對於已有環境,在修改CVM內存時,需要先停止集群中所有工作負載,比如關閉所有VM,並停止集群。對於全新安裝環,請在安裝完AHV之後,安裝CVM之前進行修改。