Redis單機版搭建
在開始redis集羣搭建之前,我們先簡單回顧一下redis單機版的搭建過程,詳細步驟按下一步一步來即可:
- cd /usr/local
- wget http://download.redis.io/releases/redis-3.2.4.tar.gz
- tar -zxf redis-3.2.4.tar.gz
- mv redis-3.2.4 redis
- cd redis
- make
- rm -rf ../redis-3.2.4.tar.gz
這樣就安裝完成了,可見下圖
Redis Cluster(Redis集羣)搭建
一、Redis Cluster 簡介
- redis是一個開源的key value存儲系統,受到了廣大互聯網公司的青睞。redis3.0版本之前只支持單例模式,在3.0版本及以後才支持集羣,我這裏用的是redis3.2.4版本;
- 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集羣至少需要3個節點,因爲投票容錯機制要求超過半數節點認爲某個節點掛了該節點纔是掛了,所以2個節點無法構成集羣。
- 要保證集羣的高可用,需要每個節點都有從節點,也就是備份節點,所以Redis集羣至少需要6臺服務器。因爲我沒有那麼多服務器,也啓動不了那麼多虛擬機,所在這裏搭建的是僞分佈式集羣,即一臺服務器虛擬運行6個redis實例,修改端口號爲(7001-7006),當然實際生產環境的Redis集羣搭建和這裏是一樣的。
- 安裝ruby
三、集羣搭建具體步驟如下(注意要關閉防火牆)
- 在usr/local目錄下新建redis-cluster目錄,用於存放集羣節點(mkdir redis-cluster)
- 把redis目錄下的所有文件複製到/usr/local/redis-cluster/redis01目錄下,不用擔心這裏沒有redis01目錄,會自動創建的(cp -r redis/ redis-cluster/redis01)
- 刪除redis01/src下的appendonly.aof,dump.rdb,nodes-6379.conf 3個文件(rm -rf redis-cluster/redis01/src/appendonly.aof redis-cluster/redis01/src/dump.rdb redis-cluster/redis01/src/nodes-6379.conf ),src目錄下沒有這些文件可以不刪除
- 修改redis.conf,啓用後臺啓動 daemonize yes ,保護模式protected-mode no,配置集羣信息,開啓集羣,cluster-enabled yes,指定集羣的配置文件,cluster-config-file nodes-端口.conf (這個端口是你redis使用的那個端口)
- 複製出多個redis的文件夾放在redis-cluster中(這多個文件都需要修改redis.conf中的端口和cluster-config-file端口,如果是多臺服務器的話就不需要可以使用不同的端口)
- 啓動已創建的redis(創建一個腳本一次性啓動全部)
- 用redis-trib.rb搭建集羣,因爲redis-trib.rb是用Ruby實現的Redis集羣管理工具,所以我們需要先安裝ruby的環境,
安裝ruby(yum -y install zlib ruby rubygems),
安裝rubygems的redis依賴(gem install -l redis-3.3.0.gem)附上redis-3.3.0.gem下載鏈接 - 安裝好依賴的環境之後,我們就可以來使用腳本命令了,注意:此腳本文件在我們Redis的解壓縮目錄src下 。
- 執行命令:
./redis-trib.rb create --replicas 1 192.168.137.88:7001 192.168.137.88:7002 192.168.137.88:7003 192.168.137.88:7004 192.168.137.88:7005 192.168.137.88:7006
--replicas 1:指定了從數據(備機)的數量爲1 - 開放16379(如果防火牆關閉的話可以不開放) redis端口+1W
- 查看集羣狀態
通過客戶端輸入以下命令:
cluster nodes:這個命令可以查看插槽的分配情況
整個Redis提供了16384個插槽,./redis-trib.rb 腳本實現了是將16384個插槽平均分配給了N個節點。