redis学习五 集群配置
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目录至少六个。然后拷贝六份配置文件到这些文件夹里并修改配置文件的端口等其他信息即可。
![](https://images2015.cnblogs.com/blog/1012841/201611/1012841-20161117104950217-310429406.png)
3,建立集群
启动所有redis实例
redis-server 指定启动的redis.conf的路径。启动完成后,有以下进程
![](https://images2015.cnblogs.com/blog/1012841/201611/1012841-20161117104956951-407882639.png)
使用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即可)
![](https://images2015.cnblogs.com/blog/1012841/201611/1012841-20161117105003842-1420662340.png)
设置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集群。