本篇博客只是自己實踐過程中的一個記錄
1 redis-cluster架構圖
架構細節:
1、上圖中每一個藍色的圈都代表着一個redis的服務器節點。它們任何兩個節點之間都是相互連通的。
(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。
(2)客戶端與redis節點直連,不需要中間proxy層。客戶端可以與任何一個服務器節點相連接,然後就可以訪問
集羣中的任何一個節點,對其進行存取和其他操作。
2、槽的概念
Redis Cluster中有一個16384長度的槽的概念,他們的編號爲0、1、2、3……16382、16383。這個槽是一個
虛擬的槽,並不是真正存在的。正常工作的時候,Redis Cluster中的每個Master節點都會負責一部分的槽,當
有某個key被映射到某個Master負責的槽,那麼這個Master負責爲這個key提供服務,至於哪個Master節點負
責哪個槽,這是可以由用戶指定的,也可以在初始化的時候自動生成(redis-trib.rb腳本)。這裏值得一提的
是,在Redis Cluster中,只有Master才擁有槽的所有權,如果是某個Master的slave,這個slave只負責槽的使
用,但是沒有所有權。
3、集羣要保證高可用行,所以理論上就應該給集羣中的每個節點至少一個備用的redis服務。這個備用的redis稱爲從節點(slave)。
4、心跳檢測所有的redis節點彼此互聯,通過PING-PONG機制判斷節點是否可以連接上。
(1)如果有一半以上的節點去ping一個節點的時候沒有迴應,集羣就認爲這個節點宕機了,然後去連接它的備
用節點。如果某個節點和所有從節點全部掛掉,我們集羣就進入faill狀態。
(2)如果有一半以上的主節點宕機,那麼我們集羣同樣進入fail狀態。
2 集羣搭建
集羣中應該至少有三個節點,每個節點有一備份節點(三主三從)。需要6臺服務器。
自己目前在學習階段,所有在虛擬機上搭建一僞分佈式的集羣,需要6個redis實例。可以創建一個文件夾redis-cluster,其下創建redis01、redis02。。redis06目錄,存放六個實例。
搭建集羣的步驟:
第一步:將redis安裝目錄bin下的文件拷貝到每個redis0X目錄內。
第二步:修改每個實例中的redis.conf,解注Cluster-enable yes前面的註釋,修改端口號。
以上兩步過程類似單機版安裝,安裝好一個後其他5個可通過拷貝完成,注意要修改端口號。
第三步:需要一個ruby腳本。將redis源碼目錄src下的redis-trib.rb拷貝到redis-cluster目錄下。
第四步:執行ruby腳本之前,需要安裝ruby環境。
1、yum installruby
2、yum installrubygems
3、安裝redis-trib.rb運行依賴的ruby的包。將包redis-3.0.0.gem傳到Linux上執行# gem install redis-3.0.0.gem
第五步:啓動所有的redis實例,啓動完畢沒有形成集羣,需要用redis-trb.rb管理腳本建立起集羣。
分別進入redis01、redis02。。redis06目錄,執行:./redis-server ./redis.conf
或編寫腳本:vim start-all.sh如下圖;並賦予它管理員權限執行:chmod +xstart-all.sh
第七步:使用redis-trib.rb創建集羣,redis-trib默認用前3個實例作爲Master,後3個作爲Slave。
./redis-trib.rb create --replicas 1 192.168.169.30:7001 192.168.169.30:7002 192.168.169.30:7003 192.168.169.30:7004 192.168.169.30:7005 192.168.169.30:7006 |
使用客戶端連接集羣(連接集羣中的任意一個節點即可): redis01/redis-cli -p 7001-c 其中-c表示以集羣方式連接redis
掃盲
Ruby腳本——redis-trib.rb:
Redis作者應該是個Ruby愛好者,Ruby客戶端就是他開發的。這次集羣的管理功能沒有嵌入到Redis代碼中,於是作者又順手寫了個叫做redis-trib的管理腳本。redis-trib依賴Ruby和RubyGems,以及redis擴展。可以先用which命令查看是否已安裝ruby和rubygems,用gem list
–local查看本地是否已安裝redis擴展。
小結
redis單機版和集羣版搭建好後我們就可以在java程序中進行使用了,redis在java應用程序中的使用需要redis。