mac環境下redis叢集的搭建
一,為什麼要搭建redis叢集
個人理解,redis是個記憶體資料庫,資料都存在記憶體中,既然存在記憶體中,那麼大小肯定受伺服器記憶體大小的限制。比如一個64G記憶體的伺服器,一個redis撐死也就能儲存64G的資料量,而對於大型網站架構,資料量豈止是64G,有的網站甚至儲存了上T的資料量,遇見這種情況,怎麼辦?
在redis 3.0版本之前,通常是獲取key的hashcode,然後取模(mod),但是這種做法的缺點是無法很好的支援動態伸縮要求,一但有節點的增加或者刪除操作,都會導致key無法在redis上命中。redis 3.0版本之後開始支援叢集(cluster),採用的是雜湊槽(hash slot)。他可以把多個redis例項整合在一起,形成一個叢集。比如100G的資料量,一臺伺服器儲存不下,那我可以將它分散到多臺機器上,每個客戶端都連線一個redis服務例項,這是一個無中心結構,每個節點都儲存資料和整個叢集的狀態。每個節點也都知道其他節點所負責的槽。比如下面的例子:
我在叢集7001幾點set了一個key:“cluster7001” value : "test"
那麼我在叢集的7002節點訪問這個key:
可以看到,redis會指引你轉向至正確的節點(7001)和槽的位置(1391)
二,mac下redis叢集的搭建
好,我們簡單介紹了一下redis叢集出現的背景,由於本片部落格重點在於搭建redis叢集,所以關於redis叢集的知識不做詳細的介紹,我們言歸正傳:
要想讓redis叢集工作,至少需要3個主節點,那我們在這裡要建立6個節點,三個主,三個從。對應的節點埠,我們定義為7001-7006
1、下載和安裝redis
這裡不做詳細介紹,直接去官網下載最新版本的redis即可。
2、建立叢集目錄
找到redis的安裝目錄,在裡面建立叢集資料夾
sudo mkdir redis-cluster
cd 到redis-cluster資料夾裡,建立六個節點資料夾:
mkdir redis01
mkdir redis02
mkdir redis03
mkdir redis04
mkdir redis05
mkdir redis06
3、修改配置檔案
找到redis安裝目錄,vi redis.conf,需要修改下面資訊:
port 7001 --埠
daemonize yes --指定redis是否以後臺程序方式啟動
cluster-eanbled yes --叢集開啟開關
cluster-config-file nodes.conf --節點配置說明檔案,redis自己維護
cluster-node-timeout 5000 --心跳測試反應時間,超過5s沒有反應認為該節點掛掉
appendonly yes --Redis持久化第二種方式,AOF,預設開啟,預設每秒執行一次持久化儲存,也可以設定成實時保持,這個比save更安全。
修改完這個配置檔案後,分辨拷貝到六個檔案節點資料夾中,redis01-06,同時修改對應埠7001-7006,然後將redis安裝包src路徑下的redis-server檔案分別拷貝到六個節點資料夾中。
此時,每個節點資料夾中都應該有紅框中的兩個檔案。
4、分別啟動redis6個例項
開啟終端,分別執行以下命令:
cd /usr/local/redis/redis-cluster/redis01/
sudo redis-server redis.conf
cd /usr/local/redis/redis-cluster/redis02/
sudo redis-server redis.conf
6個例項都啟動完畢,檢驗一下redis啟動情況:
ps -ef|grep redis
會看到6個例項都已啟動成功:
但是現在只是分別啟動了6個單獨的redis例項,還不存在“群”的概念,我們要做的,是把這六個例項串聯起來,組成“群”
5、升級ruby安裝gem
gem的安裝要求ruby的版本在1.8.7以上,先看一下本機的版本
我的版本是2.0.0,複合要求。然後安裝:
gem install redis
出現上述情況,安裝成功。
6、建立redis叢集
cd 到redis安裝目錄下的src路徑下,找到redis-trib.rb檔案,執行一下命令:
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
執行完後會看到
至此,redis叢集搭建成功!我們來測試一下:
cd到redis安裝目錄的src目錄,會看到redis-cli 這個檔案,然後執行:
redis-cli -c -p 7001
set test yeah
然後會看到7001(主)7004(從)都有這個key,ok,測試通過!