搭建redis集群至少需要三個(gè)master節(jié)點(diǎn)。
我用了三臺(tái)虛擬機(jī),129,130,131浙垫。各一主一從,共三主三從的集群。
修改配置文件
創(chuàng)建集群配置目錄夹姥,用端口號(hào)命名好區(qū)分 8001 & 8002
復(fù)制redis.conf文件分別至8001和8002目錄下杉武。
修改redis.conf文件
port 8001 #端口號(hào)
logfile "/srv/redis-3.2.9/cluster-conf/8001/redis.log" #指定日志文件
dir "/srv/redis-cluster/8001/" #數(shù)據(jù)存放文件位置rdb,aop,nodes.conf
cluster-enabled yes #開(kāi)啟集群
cluster-config-file nodes.conf #集群節(jié)點(diǎn)信息文件命名
cluster-node-timeout 5000 #集群節(jié)點(diǎn)超時(shí)毫秒數(shù)
appendonly yes #開(kāi)啟aof持久化
bind 0.0.0.0 #綁定ip。
同理 130和131機(jī)器佃声,修改這些配置艺智。
啟動(dòng)節(jié)點(diǎn)
cd 到bin目錄下,./redis-server ../8001/redis.conf&
分別啟動(dòng)各自機(jī)器的8001和8002
創(chuàng)建集群
./redis-trib.rb create --replicas 1 192.168.0.11:7001 192.168.0.12:7001 192.168.0.13:7001 192.168.0.11:7002 192.168.0.12:7002 192.168.0.13:7002
## 切換到src目錄下,執(zhí)行tedis-trib.rb集群管理命令
## replicas 1 表示為集群中的每一個(gè)主節(jié)點(diǎn)通過(guò)創(chuàng)建的先后順序創(chuàng)建一個(gè)從節(jié)點(diǎn)
redis-trib.rb需要先安裝ruby環(huán)境 yum install ruby
yum install rubygems
![image.png-67.8kB](http://static.zybuluo.com/mayibz/9ho04osldte8r93l0nvciyff/image.png)
![image.png-81.7kB](http://static.zybuluo.com/mayibz/ji0y1ocpzab87beqx9jhn3el/image.png)
集群信息代表意思分別是:
節(jié)點(diǎn)id
ip:port
角色(master0 slaver1)圾亏,主節(jié)點(diǎn)的id
節(jié)點(diǎn)最后一次返回pong回復(fù)的時(shí)間
連接次數(shù)
節(jié)點(diǎn)占有的槽(slot)
![image.png-37.9kB](http://static.zybuluo.com/mayibz/sclrpfh8ixs27b0nwll8y15g/image.png)
測(cè)試
通過(guò)./redis-cli -c
集群連接模式十拣,set一個(gè)key,可以看到,通過(guò)crc126算法定位到130這臺(tái)機(jī)器對(duì)應(yīng)的slot,然后存放志鹃。
![image.png-13.7kB](http://static.zybuluo.com/mayibz/jxha2qyeh8api98ds7xpm81x/image.png)
如果130機(jī)器上的master節(jié)點(diǎn)宕掉夭问,能否拿到site的值?
![image.png-17.4kB](http://static.zybuluo.com/mayibz/osy1l1abu6vlym2m1qj4thbm/image.png)
![image.png-34.7kB](http://static.zybuluo.com/mayibz/hisi73gpi3spsdtgwdzguavk/image.png)
停掉 130機(jī)器的8001 master節(jié)點(diǎn)曹铃。
![image.png-8.2kB](http://static.zybuluo.com/mayibz/vourdtpovtnp7q1s3rtw8xem/image.png)
可以看到缰趋,并沒(méi)有收到影響,從129的8002 slave機(jī)器上取到了值陕见。
那么停到129的8002呢秘血?
![image.png-15.5kB](http://static.zybuluo.com/mayibz/aex9nz74we8qibfwvib2tqus/image.png)
![image.png-7.1kB](http://static.zybuluo.com/mayibz/nx96o15yh9hwl09vheye3pzf/image.png)
可以看到,集群掛掉了评甜。所以結(jié)論:停掉一個(gè)master或者slave 服務(wù)正常灰粮,停掉master
和slave集群掛掉。
重啟這兩個(gè)節(jié)點(diǎn)忍坷。
![image.png-35.7kB](http://static.zybuluo.com/mayibz/fbl0xazu1sramgg6fcxtno71/image.png)
可以看到粘舟,redis通過(guò)選舉,master身份發(fā)生了變化佩研。
遇到的問(wèn)題
## /usr/bin/env: ruby: No such file or directory
解決:安裝ruby環(huán)境柑肴,**不要直接yum install ruby,redis要求ruby版本2.4以上**使用rvm安裝旬薯。
## ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
解決:yum install rubygems
## in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
解決:gem install redis
## 創(chuàng)建集群節(jié)點(diǎn)時(shí)出錯(cuò)晰骑,檢查bind修改為0.0.0.0