redis-cluster架構圖:
redis-cluster投票:容錯
半數以上節點投票認爲某個節點掛了,這個節點就掛了,整個集羣宕機。
架構細節:
(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.
(2)節點的fail是通過集羣中超過半數的節點檢測失效時才生效.
(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集羣所有節點,連接集羣中任何一個可用節點即可
(4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value
Redis 集羣中內置了 16384 個哈希槽,當需要在 Redis 集羣中放置一個 key-value 時,redis 先對key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,這樣每個
key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點
Redis集羣的搭建:
Redis集羣中至少應該有三個節點。要保證集羣的高可用,需要每個節點有一個備份機。
Redis集羣至少需要6臺服務器。
需要修改redis的端口號7001-7006
注意:搭建前要保證redis中沒有數據
集羣搭建環境:
使用ruby腳本搭建集羣。需要ruby的運行環境。
安裝ruby
yum install ruby
yum install rubygems
安裝ruby腳本運行使用的包redis-3.0.0.gem自行下載
[root@localhost ~]# gem install redis-3.0.0.gem
[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb
搭建步驟:
需要6臺redis服務器
需要6個redis實例。
需要運行在不同的端7001-7006
第一步:創建6個redis實例,需要修改redis.conf配置文件,需要把cluster-enabled yes前的註釋去掉。
每個實例運行在不同的端口port(默認是6379)修改成7001-7006。(每個實例都是一樣的可以參考文章redis安裝)
第二步:啓動每個redis實例。
第三步:使用ruby腳本搭建集羣。(自己的服務器+端口號)
./redis-trib.rb create --replicas 1 192.168.00.000:7001 192.168.00.000:7002 192.168.00.000:7003 192.000.00.000:7004 192.168.00.000:7005 192.168.00.000:7006
中間會詢問:yes就行。Can I set the above configuration? (type 'yes' to accept): yes
注意:關閉防火牆
集羣的使用方法:
連接任何一個redis就可以鏈接到集羣
redis01/redis-cli -p 7002 -c
現在可以添加數據測試。