文章轉載自:http://hot66hot.iteye.com/blog/2050676
轉載請註明出處:http://hot66hot.iteye.com/admin/blogs/2050676
最近研究redis-cluster,正好搭建了一個環境,遇到了很多坑,系統的總結下,等到redis3 release出來後,換掉memCache 叢集. 一:關於redis cluster 1:redis cluster的現狀
reids-cluster計劃在redis3.0中推出,可以看作者antirez的聲明:http://antirez.com/news/49 (ps:跳票了好久,今年貌似加快速度了),目前的最新版本是redis3 beta2(2.9.51).
作者的目標:Redis Cluster will support up to ~1000 nodes. 贊...
目前redis支援的cluster特性(已親測):
1):節點自動探索
2):slave->master 選舉,叢集容錯
3):Hot resharding:線上分區
4):進群管理:cluster xxx
5):基於配置(nodes-port.conf)的叢集管理
6):ASK 轉向/MOVED 轉向機制. 2:redis cluster 架構
1)redis-cluster架構圖
架構細節:
(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位協議最佳化傳輸速度和頻寬.
(2)節點的fail是通過叢集中超過半數的節點檢測失效時才生效.
(3)用戶端與redis節點直連,不需要中間proxy層.用戶端不需要串連叢集所有節點,串連叢集中任何一個可用節點即可
(4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value
2) redis-cluster選舉:容錯
(1)領著選舉過程是叢集中所有master參與,如果半數以上master節點與master節點通訊超過(cluster-node-timeout),認為當前master節點掛掉.
(2):什麼時候整個叢集不可用(cluster_state:fail),當叢集不可用時,所有對叢集的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤
a:如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成進群的slot映射[0-16383]不完成時進入fail狀態.
b:如果進群超過半數以上master掛掉,無論是否有slave叢集進入fail狀態. 二:redis cluster的使用 1:安裝redis cluster
1):安裝redis-cluster依賴:redis-cluster的依賴庫在使用時有相容問題,在reshard時會遇到各種錯誤,請按指定版本安裝.
(1)確保系統安裝zlib,否則gem install會報(no such file to load -- zlib)
Java代碼 #download:zlib-1.2.6.tar ./configure make make install
(1)安裝ruby:version(1.9.2)
Java代碼 # ruby1.9.2 cd /path/ruby ./configure -prefix=/usr/local/ruby make make install sudo cp ruby /usr/local/bin
(2)安裝rubygem:version(1.8.16)
Java代碼 # rubygems-1.8.16.tgz cd /path/gem sudo ruby setup.rb sudo cp bin/gem /usr/local/bin
(3)安裝gem-redis:version(3.0.0)
Java代碼 gem install redis --version 3.0.0 #由於源的原因,可能下載失敗,就手動下載下來安裝 #download地址:http://rubygems.org/gems/redis/versions/3.0.0 gem install -l /data/soft/redis-3.0.0.gem
2)安裝redis-cluster
Java代碼 cd /path/redis make sudo cp /opt/redis/src/redis-server /usr/local/bin sudo cp /opt/redis/src/redis-cli /usr/local/bin sudo cp /opt/redis/src/redis-trib.rb /usr/local/bin
2:配置redis cluster
1)redis設定檔結構:
使用包含(include)把通用配置和特殊配置分離,方便維護.
2)redis通用配置.
Java代碼 #GENERAL daemonize no tcp-backlog 511 timeout 0 tcp-keepalive 0 loglevel notice databases 16 dir /opt/redis/data slave-serve-stale-data yes #slave唯讀 slave-read-only yes #not use default repl-disable-tcp-nodelay yes slave-priority 100 #開啟aof持久化 appendonly yes #每秒一次aof寫 appendfsync everysec #關閉在aof rewrite的時候對新的寫操作進行fsync no-appendfsync-on-rewrite yes auto-aof-rewrite-min-size 64mb lua-time-limit 5000 #開啟redis叢集 cluster-enabled yes #節點互連逾時的閥值 cluster-node-timeout 15000 cluster-migration-barrier 1 slowlog-log-slower-than 10000 slowlog-max-len 128