記錄一次成功的服務維護-----ERR Slot 0 is already busy (Redis::CommandError)

本文記錄一次Redis服務宕機後,Redis集羣出現拒絕訪問的情況的解決過程。

背景:各項服務在服務器中運行正常,某一天,突然服務器斷電,重新拉起各個服務,發現有部分服務無法使用,日誌提示Redis拒絕訪問。

解決思路:

1、首先定位問題爲Redis,出現拒絕訪問情況,檢查各個系統系統之間的防火牆有沒有關閉 iptables -F 

2、防火牆確認關閉後,檢查各個服務是否啓動正常?有無報錯。

3、定位出現拒絕訪問的Redis集羣(可能存在多個),並使用命令行redis-cli確認是否能訪問。

4、如果redis能訪問,但仍舊出現該情況,嘗試修復redis集羣。

修復辦法:

在redis集羣主節點src的目錄下,redis-trib fix ip:port,redis-trib.rb create --replicas 1 ip:port逐個進行修復。

理論上,修復後,就可以了。但是在create時,可能出現如下問題:

/usr/local/rvm/gems/ruby-2.4.5/gems/redis-4.1.0/lib/redis/client.rb:124:in `call': ERR Slot 0 is already busy (Redis::CommandError)
    from /usr/local/rvm/gems/ruby-2.4.5/gems/redis-4.1.0/lib/redis.rb:3282:in `block in cluster'
    from /usr/local/rvm/gems/ruby-2.4.5/gems/redis-4.1.0/lib/redis.rb:50:in `block in synchronize'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
    from /usr/local/rvm/gems/ruby-2.4.5/gems/redis-4.1.0/lib/redis.rb:50:in `synchronize'
    from /usr/local/rvm/gems/ruby-2.4.5/gems/redis-4.1.0/lib/redis.rb:3281:in `cluster'
    from ./redis-trib.rb:212:in `flush_node_config'
    from ./redis-trib.rb:906:in `block in flush_nodes_config'
    from ./redis-trib.rb:905:in `each'
    from ./redis-trib.rb:905:in `flush_nodes_config'
    from ./redis-trib.rb:1426:in `create_cluster_cmd'
    from ./redis-trib.rb:1830:in `<main>'

出現該問題,進行如下操作:

進入每一個redis中,執行

  1. flushall

  2. cluster reset

之後,就可以重新create

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章