redis集羣搭建

一、介紹
    redis集羣是一個可以在多個節點之間進行數據共享的設施,redis集羣提供如下兩個好處 
     1:將數據自動切分(split)到多個節點
 2:當集羣中的某一個節點故障時,redis還可以繼續處理客戶端的請求。
 一個 Redis 集羣包含 16384 個哈希槽(hash slot),數據庫中的每個數據都屬於這16384個哈希槽中的一個。集羣使用公式 CRC16(key) % 16384 來計算鍵 key 屬於哪個槽。集羣中的每一個節點負責處理一部分哈希槽。
 集羣中的主從複製
 集羣中的每個節點都有1個至N個複製品,其中一個爲主節點,其餘的爲從節點,如果主節點下線了,集羣就會把這個主節點的一個從節點設置爲新的主節點,繼續工作。這樣集羣就不會因爲一個主節點的下線而無法正常工作。
 注意:如果某一個主節點和他所有的從節點都下線的話,redis集羣就會停止工作了。
 redis集羣不保證數據的強一致性,在特定的情況下,redis集羣會丟失已經被執行過的寫命令
 使用異步複製(asynchronous replication)是 Redis 集羣可能會丟失寫命令的其中一個原因
 網絡原因,如果網絡斷開時間太長,redis集羣就會啓用新的主節點,之前發給主節點的數據就會丟失。
      

二、Redis3.0集羣部署

(要讓集羣正常工作至少需要3個主節點,在這裏我們要創建6redis節點,其中三個爲主節點,三個爲從節點,對應的redis節點的ip和端口對應關係如下)

192.168.1.160:7000
192.168.1.160:7001

192.168.1.160:7002

192.168.1.160:7003

192.168.1.160:7004

192.168.1.160:7005

 

1:下載redis。官網下載3.0.0版本,之前2.幾的版本不支持集羣模式

下載地址:http://download.redis.io/releases/redis-3.0.0.tar.gz

2:上傳服務器,解壓,編譯

tar -zxvf redis-3.0.0.tar.gz

mv redis-3.0.0.tar.gz redis3.0

cd /usr/local/redis3.0

make

make install

3:創建集羣需要的目錄

mkdir -p /usr/local/cluster

cd /usr/local/cluster

mkdir 7000

mkdir 7001

mkdir 7002

mkdir 7003

mkdir 7004

mkdir 7005

 

4:修改配置文件redis.conf

cp /usr/local/redis3.0/redis.conf  /usr.local/cluster

vi redis.conf

##修改配置文件中的下面選項

port 7000

daemonize yes

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

##修改完redis.conf配置文件中的這些配置項之後把這個配置文件分別拷貝到7000/7001/7002/7003/7004/7005目錄下面

cp /usr/local/cluster/redis.conf /usr/local/cluster/7000

cp /usr/local/cluster/redis.conf /usr/local/cluster/7001

cp /usr/local/cluster/redis.conf /usr/local/cluster/7002

cp /usr/local/cluster/redis.conf /usr/local/cluster/7003

cp /usr/local/cluster/redis.conf /usr/local/cluster/7004

cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

 

##注意:拷貝完成之後要修改7001/7002/7003/7004/7005目錄下面redis.conf文件中的port參數,分別改爲對應的文件夾的名稱

 

5:分別啓動這6redis實例

cd /usr/local/cluster/7000

redis-server redis.conf

cd /usr/local/cluster/7001

redis-server redis.conf

cd /usr/local/cluster/7002

redis-server redis.conf

cd /usr/local/cluster/7003

redis-server redis.conf

cd /usr/local/cluster/7004

redis-server redis.conf

cd /usr/local/cluster/7005

redis-server redis.conf

 

 

##啓動之後使用命令查看redis的啓動情況ps -ef|grep redis

如下圖顯示則說明啓動成功


6:執行redis的創建集羣命令創建集羣

cd /usr/local/redis3.0/src

./redis-trib.rb  create --replicas 1 192.168.1.160:7000 192.168.1.160:7001 192.168.1.160:7002 192.168.1.160:7003 192.168.1.160:7004 192.168.1.160:7005

6.1執行上面的命令的時候可能會報錯,因爲是執行的ruby的腳本,需要ruby的環境

錯誤內容:/usr/bin/env: ruby: No such file or directory

所以需要安裝ruby的環境,這裏推薦使用yum install ruby安裝

yum install ruby

 

6.2然後再執行第6步的創建集羣命令,可能還會報錯,提示缺少rubygems組件,使用yum安裝

 

錯誤內容:

./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

       from ./redis-trib.rb:24

yum install rubygems

6.3再次執行第6步的命令,可能還會報錯,提示不能加載redis,是因爲缺少redisruby的接口,使用gem 安裝

錯誤內容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

       from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

       from ./redis-trib.rb:25

 

gem install redis

 

6.4 再次執行第6步的命令,正常執行


輸入yes,然後配置完成。


至此redis集羣即搭建成功!

7:使用redis-cli命令進入集羣環境

redis-cli -c -p 7000

 

 

 

Redis3.0集羣添加節點

1:首先把需要添加的節點啓動

cd /usr/local/cluster/

mkdir 7006

cp /usr/local/cluster/redis.conf  /usr/local/cluster/7006/

cd /usr/local/cluster/7006/

vi redis.conf

##修改redis.conf中的port參數的值爲7006

redis-server redis.conf

2:執行以下命令,將這個新節點添加到集羣中

cd /usr/local/redis3.0/src/

./redis-trib.rb add-node 192.168.1.160:7006 192.168.1.160:7000

 

3:執行命令redis-cli -c -p 7000 cluster nodes,查看剛纔新增的節點


4:增加了新的節點之後,這個新的節點可以成爲主節點或者是從節點

4.1 把這個節點變成主節點,使用redis-trib程序,將集羣中的某些哈希槽移動到新節點裏面,    這個新節點就成爲真正的主節點了。

執行下面的命令對集羣中的哈希槽進行移動

cd /usr/local/redis3.0/src

./redis-trib.rb reshard 192.168.1.160:7000

系統會提示我們要移動多少哈希槽,這裏移動1000


然後還需要指定把這些哈希槽轉移到哪個節點上,


輸入我們剛纔新增的節點的ID

f32dc088c881a6b930474fc5b52832ba2ff71899

然後需要我們指定轉移哪幾個幾點的哈希槽


輸入all 表示從所有的主節點中隨機轉移,湊夠1000個哈希槽

然後再輸入yesredis集羣就開始分配哈希槽了。

至此,一個新的主節點就添加完成了,執行命令查看現在的集羣中節點的狀態

redis-cli -c -p 7000 cluster nodes

 

 

4.2:把這個節點變成從節點

前面我們已經把這個新節點添加到集羣中了,現在我們要讓新節點成爲192.168.1.160:7001的從節點,只需要執行下面的命令就可以了,命令後面的節點ID就是192.168.1.160:7001的節點ID

redis-cli -c -p 7006 cluster replicate 0b00721a509444db793d28448d8f02168b94bd38

使用下面命令來確認一下192.168.1.160:7006是否已經成爲192.168.1.160:7001的從節點

 redis-cli -p 7000 cluster nodes | grep slave | grep 0b00721a509444db793d28448d8f02168b94bd38

看到下面圖片中的情況就表示添加成功

 

 

Redis3.0集羣刪除節點

1:如果刪除的節點是主節點,這裏我們刪除192.168.1.160:7006節點,這個節點有1000個哈希槽

首先要把節點中的哈希槽轉移到其他節點中,執行下面的命令

cd /usr/local/redis3.0/src

./redis-trib.rb reshard 192.168.1.160:7000

系統會提示我們要移動多少哈希槽,這裏移動1000個,因爲192.168.1.160:7006節點有1000個哈希槽

然後系統提示我們輸入要接收這些哈希槽的節點的ID,這裏使用192.168.1.160:7001的節點ID

然後要我們選擇從那些節點中轉出哈希槽,這裏一定要輸入192.168.1.160:7006這個節點的ID,最後輸入 done  表示輸入完畢

最後一步,使用下面的命令把這個節點刪除

cd /usr/local/redis3.0/src/

./redis-trib.rb del-node 192.168.1.160:7000  需要刪除的節點ID

2:如果節點是從節點的,直接使用下面的命令刪除即可。

cd /usr/local/redis3.0/src/

./redis-trib.rb del-node 192.168.1.160:7000 需要刪除的節點ID

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