1 安装Ruby
yum install ruby
ruby –v #ruby 1.8.7
yum install rubygems #也可以一句执行 yum install ruby rubygems -y
gem install redis #安装redis的接口包
gem list #查看是否安装了gem相关的接口包,检查redis是否已经存在
gem install redis-3.0.0.gem #安装ruby包
2 创建目录
由于cluster的特点,与redis传统主从不同的是,cluster中的节点需要配置在不同的文件夹,否则无法创建集群(尝试过一次,失败)。进入redis根目录,创建节点文件夹,同一个服务器上的不同节点文件夹可以用端口号来命名即可。
mkdir 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 #创建多个目录
:%s/7000/7001/g #替换所有7000为7001
3 修改配置文件redis.conf
复制redis.conf到各个的目录,并对应修改下面内容
P61 bind 127.0.0.1//默认ip为127.0.0.1改为其他节点机器可访问的ip
P80 protected-mode no //yes修改为no
P84 port 7000 //端口7000
P128 daemonize yes //后台运行
P150 pidfile /usr/local/src/redis/redis3.2.6/redis_7000.pid //pidfile文件对应7000
P593 appendonly yes //默认是rdb方式持久化要改成AOF模式
P163 logfile=7000/redis.log //相对路径,启动时在redis的根目录
P721 cluster-enabled yes //开启集群
P729 cluster-config-file nodes_7000.conf //集群的配置
P735 cluster-node-timeout 15000 //请求超时默认15秒,可自行设置
4 启动
4.1 启动每个节点实例
先为每个节点创建一个目录,复制redis.conf进去,然后按上面修改内容,修改好后,启动每个实例。
vim start.sh #创建脚本文件方便启动
bash start #执行shell脚本
#!/bin/sh
redis-server 7000/redis.conf&
redis-server 7001/redis.conf&
redis-server 7002/redis.conf&
redis-server 7003/redis.conf&
redis-server 7004/redis.conf&
redis-server 7005/redis.conf&
redis-server 7006/redis.conf&
redis-server 7007/redis.conf&
redis-server 7008/redis.conf&
4.2 启动集群
Redis Cluster集群需要ruby来运行其脚本
./src/redis-trib.rb create --replicas 1 192.168.31.30:7000 192.168.31.30:7001 192.168.31.30:7002 192.168.31.30:7003 192.168.31.30:7004 192.168.31.30:7005 192.168.31.30:7006 192.168.31.30:7007 192.168.31.30:7008
service iptables stop
--replicas 1 表示希望为集群中的每个主节点创建一个从节点(一主一从)
前几个自动做为主,后面几个做为从,主节点少于从节点,个数不对应时,多从挂接都一个主上。
注意:提示必须敲入yes,不能是y,y则按不接受处理。
注意:redis-trib-rb的路径,可以配置环境变量来解决
export PATH=/usr/local/ruby-2.1.2/bin;&PATH
#检查节点
./src/redis-trib.rb check 192.168.163.201:7001
------------------------------------------------------分割线--------------------------------------------------------------
不过 redis-trib.rb 是 Redis 作者使用 Ruby 语言开发的,故使用该工具之前还需要先在机器上安装 Ruby 环境。后面作者可能意识到这个问题,Redis 5.0 版本开始便把这个工具集成到 redis-cli 中,以--cluster参数提供使用,其中create命令可以用来创建集群。
实验环境使用的 Redis 版本是 5.0.3,所以我可以直接使用redis-cli --cluster create命令搭建,具体命令如下所示。
/usr/local/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008 --cluster-replicas 1
4.3 启动失败重新启动
启动后会自动产生这些文件,重新启动时需要删除!
rm -rf dump.rdb #删除redis的备份文件,redis节点中有数据,无法建立集群
rm -rf nodes-700* #删除没有建立成功集群时遗留的文件
5 登录集群
redis-cli -c -p 7000 #任何一个端口都可以,执行命名会自动跳转
6 查看集群状态
127.0.0.1:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:9
cluster_size:4
cluster_current_epoch:9
cluster_my_epoch:1
cluster_stats_messages_sent:9154
cluster_stats_messages_received:9154
127.0.0.1:7000> cluster nodes #查看集群节点状态
cluster nodes 命令的输出有点儿复杂,它的每一行都是由以下信息组成的:
节点 ID :例如 3fc783611028b1707fd65345e763befb36454d73 。
ip:port :节点的 IP 地址和端口号,例如 127.0.0.1:7000 ,其中 :0 表示的是客户端当前连接的 IP 地址和端口号。
flags :节点的角色(例如 master 、 slave 、 myself )以及状态(例如 fail ,等等)。
如果节点是一个从节点的话,那么跟在 flags 之后的将是主节点的节点 ID :例如 127.0.0.1:7002 的主节点的节点 ID 就是 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 。
master节点最后有一个值的范围,就是hash槽,0~16383(2^14),平均的分配到各master节点。