Redis 十二 集群
如果一个项目,数据量特别大,一个Redis节点根本放不下,那么可以用到集群。
集群:多个服务器实例,分别部署在不同的服务器上,共同处理相同的任务的一组集合。
使用集群的原因:高并发(分担服务器压力),高可用(解决单点故障)
Redis集群特点:
1.无中心,没有主从之分;
2.集群之间有ping-pang机制,通信机制,防止某个节点挂掉;
3.投票机制,确认某个节点是否真的挂掉,例如节点1ping节点2,其实是节点1挂了,2根本没收到消息,这时大家投票,即其他节点ping2,看看是不是真的挂掉,所以redis集群节点的数量必须是2n+1,不然投票容易出问题;
4.存放key时,根据算法,分配到不同的节点中;
5.每一个节点,都必须有一个从节点,这样可以保证数据不会丢失;
6.如果某一个节点被查询次数太多了,顶不住,可以针对某一个节点做主从/哨兵;
7.超过半数的节点挂掉,整个集群就挂掉了。
详细配置
集群至少需要6个节点(3主3从模式)。
1. 准备6个文件夹,分别用端口号命名,即6个节点的端口号是9001~9006。
mkdir /usr/local/redis-cluster cd redis-cluster/ mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
2.在 /usr/local/redis-cluster
下创建 bin
文件夹,用来存放集群运行脚本,并把安装好的 Redis 的 src
路径下的运行脚本拷贝过来。
mkdir redis-cluster/bin cd /usr/local/redis/src cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin
3.我们现在从已安装好的 Redis 中复制一个新的实例到 9001
文件夹,并修改 redis.conf
配置
cp /usr/local/redis/* /usr/local/redis-cluster/9001
需要修改的配置内容
port 9001(每个节点的端口号) bind 192.168.119.131(绑定当前机器 IP) dir /usr/local/redis-cluster/9001/data/(数据文件存放位置) pidfile /var/run/redis_9001.pid(pid 9001和port要对应) cluster-enabled yes(启动集群模式) cluster-config-file nodes9001.conf(9001和port要对应) cluster-node-timeout 15000 (节点超时时间,毫秒)
cluster-slave-validity-factor 10 (验证slave节点的次数,即心跳机制次数)
cluster-migration-barrier 1 (那些分配后仍然剩余migration barrier个从节点的主节点才会触发节点分配,默认1就好)
cluster-require-full-coverage yes (主从节点之间是否全量复制) appendonly yes (数据保存为aof格式)
appendfilename "xxxx.xxxx.aof" (数据保存的文件)
9002~9006的redis.conf完全可以复制9001,只需要修改这几点,以9002为例,以此类推
port 9002 dir /usr/local/redis-cluster/9002/data/ cluster-config-file nodes-9002.conf pidfile /var/run/redis_9002.pid
安装集群所需软件ruby和相关接口
yum install ruby
yum install rubygems
gem install redis
执行命令创建集群
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.119.131:9001 192.168.119.131:9002 192.168.119.131:9003 192.168.119.131:9004 192.168.119.131:9005 192.168.119.131:9006
--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点
命令执行成功后会自动给我们分配主从,如果同意这样分配,再输入yes就行了。