1. 程式人生 > >連線Redis叢集時出現的問題

連線Redis叢集時出現的問題

注意:我的環境是centos7.3,redis4.0.8

1、連線超時或者拒絕連線

2、java.lang.NumberFormatException: For input string: "[email protected]

是因為jedis的版本和redis不對應,我使用的redis時4.0.8,這裡在pom檔案中將jedis的版本改為2.9.0就好,都是最新的(截至我現在) 這是我找到的解決方案  https://www.cnblogs.com/qq1871707128/p/8081788.html
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

3、(error) MOVED 15495 127.0.0.1:7003

有像上邊的錯誤的,是因為
  • 節點會對命令請求進行分析和key的slot計算,並且會查詢這個命令所要處理的鍵所在的槽。如果要查詢的雜湊槽正好就由接收到命令的節點負責處理, 那麼節點就直接執行這個命令
  • 另一方面, 如果所查詢的槽不是由該節點處理的話, 節點將檢視自身內部所儲存的雜湊槽到節點 ID 的對映記錄, 並向客戶端回覆一個 MOVED 錯誤。上面的錯誤資訊包含鍵 x 所屬的雜湊槽15495, 以及負責處理這個槽的節點的 IP 和埠號 127.0.0.1:7003 。
  • 雖然我們用Node ID來標識叢集中的節點, 但是為了讓客戶端的轉向操作儘可能地簡單, 節點在 MOVED 錯誤中直接返回目標節點的 IP 和埠號, 而不是目標節點的 ID 。客戶端應該記錄槽15495由節點127.0.0.1:7003負責處理“這一資訊, 這樣當再次有命令需要對槽15495執行時, 客戶端就可以加快尋找正確節點的速度。這樣,當叢集處於穩定狀態時,所有客戶端最終都會儲存有一個雜湊槽至節點的對映記錄,使得叢集非常高效: 客戶端可以直接向正確的節點發送命令請求, 無須轉向、代理或者其他任何可能發生單點故障(single point failure)的實體(entiy)

4、終極處理

如果你百度了各種教程還是沒有解決問題,建議重灌(好吧,我就是這個樣子)重灌有兩種操作

  • 刪除一些配置檔案,再次叢集,如下操作(建議先看一下詳細安裝的那個文章,一些目錄檔案在那裡有說明,就不再講了)

刪除redis-cluster下的nodes.conf還有.rdb檔案,甚至有的可能還有.aof檔案,有的可能都沒有,就不用刪除了

刪除每一個節點下的nodes.conf,還有.rdb 、.aof檔案,我這裡直接給命令,粘在命令列就能用

rm -f redis01/nodes.conf
rm -f redis02/nodes.conf
rm -f redis03/nodes.conf
rm -f redis04/nodes.conf
rm -f redis05/nodes.conf
rm -f redis06/nodes.conf

rm -f redis01/dump.rdb
rm -f redis02/dump.rdb
rm -f redis03/dump.rdb
rm -f redis04/dump.rdb
rm -f redis05/dump.rdb
rm -f redis06/dump.rdb

注意:你所在的為目錄位置,還有,如果你的檔案路徑或者資料夾命名和我的不一樣,也需要改一下,我沒有.aof檔案,因此沒有管,如果你的目錄下有的話記得刪除。

這樣就把沒用檔案都刪除了,接下來就可以像剛開始一樣配置叢集了,詳細步驟還是見上邊那篇文章。

至於為什麼我介紹了兩種,很簡單嘛,要是全都刪了,配置檔案有得重新改,挺麻煩,當然如果你的配置檔案從一開就是錯的,那還是全刪了吧!!

5、總結

安裝服務或者環境的時候真的會碰到各種各樣的問題,非常惱人,不像程式碼可以除錯。要留心觀察錯誤提示,細想,領會,判斷哪一塊最有可能出問題,加之百度,一定可以解決!還有很重要的一件事就是吧自己一步步犯下來的錯誤記下來,寫部落格,不僅是對別人有幫助,哪一天自己再裝再犯錯,還可以借鑑!下邊是百度的時候看到的兩篇關於解決這個問題和安裝redis的文章,覺得還可以