Redis Cluster提供了一種運行Redis安裝的方法溅蛉,其中數(shù)據(jù) 在多個Redis節(jié)點之間自動分片。
Redis Cluster還在分區(qū)期間提供一定程度的可用性霹抛,實際上是在某些節(jié)點發(fā)生故障或無法通信時繼續(xù)運行的能力。但是,如果發(fā)生較大的故障(例如谓晌,當大多數(shù)主設備不可用時),群集將停止運行癞揉。
所以實際上纸肉,你對Redis Cluster有什么看法?
- 能夠在多個節(jié)點之間自動拆分數(shù)據(jù)集喊熟。
- 當節(jié)點的子集遇到故障或無法與群集的其余部分通信時柏肪,能夠繼續(xù)操作
- 所有的redis節(jié)點彼此互聯(lián)(PING-PONG機制),內(nèi)部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬。
- 節(jié)點的fail是通過集群中超過半數(shù)的節(jié)點檢測失效時才生效芥牌。
- 客戶端與redis節(jié)點直連,不需要中間代理層.客戶端不需要連接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可
工作方式:
在redis的每一個節(jié)點上烦味,都有這么兩個東西,一個是插槽(slot)壁拉,它的的取值范圍是:0-16383谬俄。還有一個就是cluster,可以理解為是一個集群管理的插件弃理。當我們的存取的key到達的時候溃论,redis會根據(jù)crc16的算法得出一個結(jié)果,然后把結(jié)果對 16384 求余數(shù)痘昌,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽钥勋,通過這個值炬转,去找到對應的插槽所對應的節(jié)點,然后直接自動跳轉(zhuǎn)到這個對應的節(jié)點上進行存取操作算灸。
為了保證高可用返吻,redis-cluster集群引入了主從模式,一個主節(jié)點對應一個或者多個從節(jié)點乎婿,當主節(jié)點宕機的時候测僵,就會啟用從節(jié)點。當其它主節(jié)點ping一個主節(jié)點A時谢翎,如果半數(shù)以上的主節(jié)點與A通信超時捍靠,那么認為主節(jié)點A宕機了。如果主節(jié)點A和它的從節(jié)點A1都宕機了森逮,那么該集群就無法再提供服務了榨婆。
實際操作
準備環(huán)境
192.168.14.10:7000 主服務器
192.168.14.20:7001
192.168.14.30:7002
192.168.14.40:7003
192.168.14.50:7004
192.168.14.60:7005
集群最少有六個節(jié)點
六臺服務器都進行以下操作
首先我們使用wget拉取tar包
yum -y install gcc gcc-c++ wget
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar zxf redis-3.2.4.tar.gz
cd redis-3.2.4
make && make install
ls
將 redis-trib.rb 復制到 /usr/local/bin 目錄下
redis-trib.rb是我們cluster集群的管理工具 有創(chuàng)建集群 檢查集群等功能
cd src
cp redis-trib.rb /usr/local/bin/
之后 我們建立六個節(jié)點
vim redis.conf
port 7000 //端口7000,7002,7003
bind 本機ip //默認ip為127.0.0.1 需要改為其他節(jié)點機器可訪問的ip 否則創(chuàng)建集群時無法訪問對應的端口,無法創(chuàng)建集群
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日志開啟 有需要就開啟良风,它會每次寫操作都記錄一條日志
修改以上參數(shù)每個服務器節(jié)點對應端口號
配置好之后使用redis-server執(zhí)行配置文件
redis-server redis.conf
使用ps查看
ps -ef |grep redis
root 16011 1 0 11:15 ? 00:00:05 redis-server 192.168.14.10:7000 [cluster]
root 35353 3097 0 12:26 pts/0 00:00:00 grep --color=auto redis
成功
下面我們在主服務器上操作
安裝ruby curl
yum -y install ruby ruby-devel rubygems
yum -y install curl
配置rvm的key
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
安裝RVM
find / -name rvm
source /usr/local/rvm/scripts/rvm
rvm list known
rvm install 2.4.5
rvm use 2.4.5
rvm remove 2.0.0
安裝redis
gem install redis
使用cluster集群管理工具 創(chuàng)建集群
redis-trib.rb create --replicas 1192.168.14.10:7000 192.168.14.20:7001 192.168.14.30:7002 192.168.14.40:7003 192.168.14.50:7004 192.168.14.60:7005