VMware版本號:12.0.0html
CentOS版本:7.0node
三臺虛擬機(IP):192.168.1.八、192.168.1.九、192.168.1.10
redis
下載,解壓,編譯:算法
$ cd /usr/local/ $ wget http://download.redis.io/releases/redis-3.2.6.tar.gz $ tar xzf redis-3.2.6.tar.gz $ cd redis-3.2.6 $ make
首先在 192.168.1.8
機器上 /usr/local/redis-3.2.6
目錄下建立 redis_cluster
目錄segmentfault
$ mkdir /usr/local/redis-3.2.6/redis_cluster
在 redis_cluster
目錄下,建立名爲7000
、7001
、7002
的目錄,並將 redis.conf
拷貝到這三個目錄中ruby
$ mkdir 7000 7001 7002 $ cp /usr/local/redis-3.2.6/redis.conf /usr/local/redis-3.2.6/redis_cluster/7000 $ cp /usr/local/redis-3.2.6/redis.conf /usr/local/redis-3.2.6/redis_cluster/7001 $ cp /usr/local/redis-3.2.6/redis.conf /usr/local/redis-3.2.6/redis_cluster/7002
分別修改這三個配置文件
,修改以下內容app
port 7000 //端口7000,7002,7003 bind 本機ip //默認ip爲127.0.0.1,須要改成其餘節點機器可訪問的ip,不然建立集羣時沒法訪問對應的端口,沒法建立集羣 daemonize yes //redis後臺運行 pidfile /var/run/redis_7000.pid //pidfile文件對應7000,7001,7002 cluster-enabled yes //開啓集羣,把註釋#去掉 cluster-config-file nodes_7000.conf //集羣的配置,配置文件首次啓動自動生成 7000,7001,7002 cluster-node-timeout 15000 //請求超時,默認15秒,可自行設置 appendonly yes //aof日誌開啓,有須要就開啓,它會每次寫操做都記錄一條日誌
接着在另外兩臺機器上(192.168.1.9
、192.168.1.10
)重複以上三步,只是把目錄改成700三、700四、700五、700六、700七、7008
對應的配置文件
也按照這個規則修改
便可工具
##第一臺機器上執行 $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7000/redis.conf $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7001/redis.conf $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7002/redis.conf ##第二臺機器上執行 $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7003/redis.conf $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7004/redis.conf $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7005/redis.conf ##第三臺機器上執行 $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7006/redis.conf $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7007/redis.conf $ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7008/redis.conf
##第一臺機器 $ ps -ef | grep redis //redis是否啓動成功 $ netstat -tnlp | grep redis //監聽redis端口
注
:確保每一個節點沒有配置錯誤,而且啓動起來測試
$ firewall-cmd --state ##查看防火牆狀態 running
running
說明防火牆是打開狀態ui
$ systemctl stop firewalld ##關閉防火牆 $ firewall-cmd --state not running
注
: CentOS 7
關閉防火牆與 CentOS 6
有所不一樣
$ yum -y install ruby ruby-devel rubygems rpm-build $ gem install redis
注
:建立集羣
時須要安裝 Ruby
運行redis-trib.rb
Redis
官方提供了 redis-trib.rb
這個工具,就在解壓目錄的 src
目錄中
$ /usr/local/redis-3.2.6/src/redis-trib.rb create --replicas 1 192.168.1.8:7000 192.168.1.8:7001 192.168.1.8:7002 192.168.1.9:7006 192.168.1.9:7004 192.168.1.9:7005 192.168.1.10:7006 192.168.1.10:7007 192.168.1.10:7008
其中,前三個 ip:port
爲第一臺機器的節點,中間三個爲第二臺機器,最後三個爲第三臺機器
輸入 yes
,而後出現以下內容,說明安裝成功
在第一臺機器上鍊接集羣的7000節點
,在另一臺鏈接7004節點
,鏈接方式爲:
##加參數 -C 可鏈接到集羣,由於 redis.conf 將 bind 改成了ip地址,因此 -h 參數不能夠省略,-p 參數爲端口號 $ /usr/local/redis-3.2.6/src/redis-cli -h 192.168.1.8 -c -p 7000
在7004節點
執行命令:
192.168.1.9:7004> set name redis
而後在另兩臺7000、7007端口
,查看 key
爲 name
的內容
192.168.1.8:7000> get name
192.168.1.10:7007> get name
說明集羣運做正常
redis cluster
在設計的時候,就考慮到了去中心化
、去中間件
,也就是說,集羣中的每一個節點
都是平等關係
,都是對等的
,每一個節點
都保存
各自的數據
和整個集羣的狀態。每一個節點
都和其餘全部節點
鏈接,並且這些鏈接保持活躍
,這樣就保證了咱們只須要鏈接
集羣中的任意一個節點
,就能夠獲取到其餘節點
的數據
。
Redis
集羣沒有並使用傳統的一致性哈希來
分配數據,而是採用另一種叫作哈希槽
(hash slot)的方式來分配的。redis cluster
默認分配了 16384
個 slot
,當咱們 set
一個 key
時,會用CRC16算法
來取模獲得所屬的 slot
,而後將這個 key
分到哈希槽區間的節點
上,具體算法就是:CRC16(key)
% 16384
。因此咱們在測試的時候看到 set
和 get
的時候,直接跳轉到了7000端口
的節點。
Redis
集羣會把數據存在一個 master
節點,而後在這個 master
和其對應的 salve
之間進行數據同步。當讀取數據時,也根據一致性哈希算法
到對應的 master
節點獲取數據。只有當一個 master
掛掉以後,纔會啓動一個對應的 salve
節點,充當 master
。
須要注意的是:必需要3個
或以上
的主節點
,不然在建立集羣
時會失敗
,而且當存活
的主節點數
小於總節點數
的一半
時,整個集羣
就沒法提供服務
了。
相關文檔:
中文:http://www.redis.cn/topics/cl...
英文:https://redis.io/topics/clust...