redis集群配置
0,总体概述
总体来讲就是:
1,安装redis
2,配置多个redis实例
3,安装 ruby和rubygems
4,启动redis实例,使用ruby脚本命令将redis实例建立为集群
1,安装
1,安装redis 3.x 下载到手redis-3.2.5.tar.gz以后,放到linux里进行解压make,具体参照网络。
2,安装ruby和rubygems,参照命令(具体能够参照网络)
tar xzvf rubygems-2.2.3.tgz
cd rubygems-2.2.3
ruby setup.rb --no-rdoc --no-ri
wget https://rubygems.org/downloads/redis-3.2.1.gem
gem install redis-3.2.1.gem --local --no-rdoc --no-ri
2,创建多个redis实例 配置
修改redis配置文件,redis.conf
bind 127.0.0.1--绑定只有这个ip可以访问到 配置好集群后也能够修改
cluster-enabled yes---开启集群配置
cluster-config-file nodes-6388.conf--这个配置文件不是要咱们去配的,而是Redis运行时保存配置的文件,因此咱们也不能够修改这个文件。
cluster-node-timeout 15000--结点超时多久则认为它宕机了。
cluster-require-full-coverage no--默认是yes,只要有结点宕机致使16384个槽没全被覆盖,整个集群就所有中止服务,因此必定要改成no
daemonize yes--后台运行
logfile “./redis.log”--日志文件,本身定义便可
port 6379 端口
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdb rdb持久化文件
#requirepass fdsafdsa 先注释掉 等配置好集群后,再放开便可
#masterauth fdasfdsa 这个是集群须要密码的时候也放开,和requirepass同样就行(还有个地方是/usr/lib/ruby/gems/1.8/gems/redis-3.3.0/lib/redis/client.rb 这里也有个配置密码的 修改下)
在安装的redis目录同一层中建立多个redis目录至少六个。而后拷贝六份配置文件到这些文件夹里并修改配置文件的端口等其余信息便可。
3,创建集群
启动全部redis实例
redis-server 指定启动的redis.conf的路径。启动完成后,有如下进程
使用redis-trb.rb脚本命令将redis实例建立成集群。
建立集群命令: 默认前3个实例做为Master,后3个做为Slave
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 ...
这样就建立完成了,使用命令来查看集群的状况(能够查看集群的主从关系,主集群的slots分布状况等等信息)
redis-cli -c -h 127.0.0.1 -p 6379 cluster nodes(若是后期有密码了,那么闲登陆进去而后执行 cluster nodes便可)
设置keyvalue测试一下。
随便连接到一个redis实例里,
redis-cli -c -p 6379
而后,set 几个keyvalue,能够看到有重定向的log出来,get的时候也会有,说明集群建立成功了,数据开始分布到各个master节点去了。
4,添加节点到集群
1,按照上面说的,再建立两个redis实例,而后启动起来。6387 6388(上面的截图是我添加过了的 ,下面就只说下步骤便可)
2,使用ruby脚本命令将其中一个添加进去,默认为master
redis-trib.rb add-node 127.0.0.1:6387 127.0.0.1:6379
使用查看集群状况命令
redis-cli -c -h 127.0.0.1 -p 6379 cluster nodes
能够看到刚才添加的已经进去了而且是master
再添加另外一个进去 而且做为这个的slave
redis-trib.rb add-node --slave --master-id 907b572063b0a6fd3dc9d1cca2c2daef3adaf043 127.0.0.1:6388 127.0.0.1:6379
中间的id为master的id便可。
3,添加进去以后,下面进行slots迁移,直接使用ruby脚本命令
redis-trib.rb reshard 127.0.0.1:6379
就自动的把没有slots的master给平均从其余master里拿出来,放进去了。
4,而后就能够进去到新添加的master,查看下keys *了。
5,故障转移
在高可用性方面,Redis可算是可以”Auto”一把了!Redis Cluster重用了Sentinel的代码逻辑,不须要单独启动一个Sentinel集群,Redis Cluster自己就能自动进行Master选举和Failover切换。
kill 掉集群中的一个master,而后查看集群的状况,会发现这个master下面的slave会有一个出来当成了master了,保证了集群的可用性。
这里若是这个上来的master没有slave了,redis集群会自动从其余master拿过来一些slave过来。
若是同时把master和它的slave kill掉,那么数据也就没有了。可是能够经过持久化出来的快照或者aof文件恢复。
6 redis本身的集群命令
上面的集群配置都是使用的ruby脚原本建立的,也能够本身用redis的命令来建立集群
相似这样的: redis-cli -c -h 192.168.1.100 -p 7000 cluster meet 192.168.1.100 7001
挨个的meet,这样就都加入到集群里了。
而后就是配置主从关系
redis-cli -c -h 192.168.1.100 -p 7003 cluster replicate 33c0bd93d7c7403ef0239ff01eb79bfa15d2a32c
将一个节点配置成另外一个的从节点
而后就是指派slots,总共16384个,按需分配到每一个master便可。
redis-cli -c -h 192.168.1.100 -p 7000 cluster addslots {0..5000}
redis-cli -c -h 192.168.1.100 -p 7001 cluster addslots {5001..10000}
redis-cli -c -h 192.168.1.100 -p 7001 cluster addslots {10001..16383}
这样也建立了一个redis集群。