搭建redis集群至少需要三个master节点。
我用了三台虚拟机,129,130,131。各一主一从,共三主三从的集群。
修改配置文件
创建集群配置目录,用端口号命名好区分 8001 & 8002
复制redis.conf文件分别至8001和8002目录下。
修改redis.conf文件
port 8001 #端口号
logfile "/srv/redis-3.2.9/cluster-conf/8001/redis.log" #指定日志文件
dir "/srv/redis-cluster/8001/" #数据存放文件位置rdb,aop,nodes.conf
cluster-enabled yes #开启集群
cluster-config-file nodes.conf #集群节点信息文件命名
cluster-node-timeout 5000 #集群节点超时毫秒数
appendonly yes #开启aof持久化
bind 0.0.0.0 #绑定ip。
同理 130和131机器,修改这些配置。
启动节点
cd 到bin目录下,./redis-server ../8001/redis.conf&
分别启动各自机器的8001和8002
创建集群
./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目录下,执行tedis-trib.rb集群管理命令
## replicas 1 表示为集群中的每一个主节点通过创建的先后顺序创建一个从节点
redis-trib.rb需要先安装ruby环境 yum install ruby
yum install rubygems

image.png-67.8kB

image.png-81.7kB
集群信息代表意思分别是:
节点id
ip:port
角色(master0 slaver1),主节点的id
节点最后一次返回pong回复的时间
连接次数
节点占有的槽(slot)

image.png-37.9kB
测试
通过./redis-cli -c
集群连接模式,set一个key,可以看到,通过crc126算法定位到130这台机器对应的slot,然后存放。

image.png-13.7kB
如果130机器上的master节点宕掉,能否拿到site的值?

image.png-17.4kB

image.png-34.7kB
停掉 130机器的8001 master节点。

image.png-8.2kB
可以看到,并没有收到影响,从129的8002 slave机器上取到了值。
那么停到129的8002呢?

image.png-15.5kB

image.png-7.1kB
可以看到,集群挂掉了。所以结论:停掉一个master或者slave 服务正常,停掉master
和slave集群挂掉。
重启这两个节点。

image.png-35.7kB
可以看到,redis通过选举,master身份发生了变化。
遇到的问题
## /usr/bin/env: ruby: No such file or directory
解决:安装ruby环境,**不要直接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
## 创建集群节点时出错,检查bind修改为0.0.0.0