- 新建
redis-cluster
目錄 - 執行
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
下載redis - 執行
tar xzf redis-5.0.5.tar.gz
解壓 - 進入
redis-5.0.5
目錄下執行make
編譯 - 進入
/usr/local/redis-cluster
下查看目錄
Redis Cluster(Redis集羣)簡介
- redis是一個開源的key value存儲系統,受到了廣大互聯網公司的青睞。redis3.0版本之前只支持單例模式,在3.0版本及以後才支持集羣;
- redis集羣採用P2P模式,是完全去中心化的,不存在中心節點或者代理節點;
redis集羣是沒有統一的入口的,客戶端(client)連接集羣的時候連接集羣中的任意節點(node)即可,集羣內部的節點是相互通信的(PING-PONG機制),每個節點都是一個redis實例; - 爲了實現集羣的高可用,即判斷節點是否健康(能否正常使用),redis-cluster有這麼一個投票容錯機制:如果集羣中超過半數的節點投票認爲某個節點掛了,那麼這個節點就掛了(fail)。這是判斷節點是否掛了的方法;
- 那麼如何判斷集羣是否掛了呢? -> 如果集羣中任意一個節點掛了,而且該節點沒有從節點(備份節點),那麼這個集羣就掛了。這是判斷集羣是否掛了的方法;
- 那麼爲什麼任意一個節點掛了(沒有從節點)這個集羣就掛了呢? -> 因爲集羣內置了16384個slot(哈希槽),並且把所有的物理節點映射到了這16384[0-16383]個slot上,或者說把這些slot均等的分配給了各個節點。當需要在Redis集羣存放一個數據(key-value)時,redis會先對這個key進行crc16算法,然後得到一個結果。再把這個結果對16384進行求餘,這個餘數會對應[0-16383]其中一個槽,進而決定key-value存儲到哪個節點中。所以一旦某個節點掛了,該節點對應的slot就無法使用,那麼就會導致集羣無法正常工作。
- 綜上所述,每個Redis集羣理論上最多可以有16384個節點。
集羣搭建
redis 5.0版本 集羣搭建不需要我們安裝ruby就可以搭建成功,並且redis給我們提供了快速搭建腳本,執行utils/create-cluster/ 目錄下的create-cluster腳本 就可以快速搭建,該腳本提供以下幾個命令供我們使用
echo "Usage: $0 [start|create|stop|watch|tail|clean]"
echo "start -- Launch Redis Cluster instances." 創建redis集羣實例
echo "create -- Create a cluster using redis-cli --cluster create." 搭建redis集羣
echo "stop -- Stop Redis Cluster instances." 停止redis集羣實例
echo "watch -- Show CLUSTER NODES output (first 30 lines) of first node."
echo "tail <id> -- Run tail -f of instance at base port + ID."
echo "clean -- Remove all instances data, logs, configs." 刪除生成的日誌,配置,數據文件
echo "clean-logs -- Remove just instances logs." 只刪除日誌
要想外部服務器訪問到我們搭建的集羣,我們需要對腳本修改一下,進入/usr/local/redis-cluster/redis-5.0.5/utils/create-cluster
目錄下,執行vim create-cluster
:
- start部分增加如下配置:
--bind
指定我們要綁定的ip(服務器ip)--requirepass
指定我們的密碼--protected-mode no
關閉安全模式(外部應用可以連接到redis)
由於搭建環境的機子內存有點小,所有添加了限制內存的語句
--bind 192.168.3.86 --requirepass 12345 --protected-mode no
- create部分修改如下配置:
127.0.0.1IP地址修改爲服務器地址或開放所有地址0.0.0.0
添加-a 12345
密碼設置
- stop部分修改如下配置:
添加-h IP地址
,-a 12345
密碼設置
4.執行./create-cluster start
啓動集羣
5.執行./create-cluster create
開啓集羣
集羣測試
鏈接集羣語句
../../src/redis-cli -h localhost -p 30003 -a 12345 -c
在30002中設置key後可以在30001獲取
集羣操作
- 添加主節點,從節點
- 刪除節點:重新分配槽,移除節點
redis 5.0中使用 redis-cli 添加cluster node 並 reshard
Redis cluster集羣:原理及搭建