要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,
其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下:
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
将redis.conf复制一份作为redis-cluster.conf,修改如下配置:
port 6379
bing #建议将主机地址127.0.0.1和主机的实际IP或局域网地址都绑定
appendonly yes
daemonize yes #允许以后台程序允许
跟集群有关的配置:
cluster-enabled yes
cluster-config-file nodes-6379.conf #(建议以nodes-端口号的形式命名,方便辨识)
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
redis-cluster.conf复制六份到以端口号命名的文件夹下,并将名称更改为端口号以便于区分。
分别修改如下配置:
port #对应端口号
bing #对应ip 建议加上127.0.0.1原因后面解释
cluster-config-file
必须安装的东西:
ruby(用来执行redis-trib.rb脚本,创建集群)
rubygems(用来安装redis)此处安装不需要重新下载redis
安装命令:
redis-cluater的搭建需要执行ruby的脚本,所以需要ruby的环境
所以先需要安装ruby的环境,
yum install ruby
或者ruby下载地址
然后再使用yum安装gem
yum install rubygems
或者gems下载地址
然后使用gem 安装redis 例如我的版本是3.2.1
gem install -l redis-3.2.1.gem
然后就可以进入redis的src目录执行
./redis-trib.rb create --replicas 1 127.0.0.1:7000127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
默认是前三个为主,后三个为从
默认情况下不能从slaves读取数据,但建立连接后,执行一次命令READONLY,该slaves即可读取数据。
用redis-cli -c -h -p命令登录
-c是以集群方式登录;
-h后跟主机号 ;
-p后跟端口号。
绑定了127.0.0.1则可以省略-h参数。不加-c则客户端不自动切换。
例如:客户端登录7000端口的,设置的数据应该存放在7001上则会报错请转到7001。而加上-c启动则会自动切换到7001客户端保存。
默认情况下不能从slaves读取数据,但建立连接后,执行一次命令READONLY,该slaves即可读取数据。
否则只能以redis-cli -c -h -p命令登录 -c是以集群方式
cluster-enabled yes 集群开关,默认是不开启集群模式。
cluster-config-file nodes-6379.conf 集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有 Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。
cluster-node-timeout 15000 节点互连超时的阀值。集群节点超时毫秒数。即节点与集群其他节点断开多长时间将被认定为超时。建议稍微大一点
cluster-slave-validity-factor 10 在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
cluster-migration-barrier 1 master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2个可工作的从节点时,它的一个从节点才会尝试迁移。
cluster-require-full-coverage yes 默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。
下篇文章讲解如何向集群节点添加、删除和分配slot。