redis配置cluster分布式集群
#下载最新的redis5.0 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -zxvf redis-5.0.3.tar.gz cd redis-5.0.3 make make install /usr/local/src/redis/redis-cluster cd /usr/local/src/redis/redis-cluster mv ./bin ./redis01 #把redis.conf 复制到redis01目录 cp redis-5.0.3/redis.conf /usr/local/src/redis/redis-cluster/redis01/redis.conf #修改redis.conf配置文件,注意一下bind 的地址 daemonize yes #后台启动 port 6379 #修改端口号,从6379到6384 cluster-enabled yes #开启cluster,去掉注释 cluster-config-file nodes.conf cluster-node-timeout 15000 appendonly yes #复制其他的目录作为节点 #redis02 redis03 redis04 redis05 redis06 ##最新的5.0不使用ruby,使用redis-cli来构建cluster ##yum install ruby ##yum install rubygems #在redis-cluster目录下,创建start.sh,启动redis,命令如下: cd redis01 ./redis-server redis.conf cd .. cd redis02 ./redis-server redis.conf cd .. cd redis03 ./redis-server redis.conf cd .. cd redis04 ./redis-server redis.conf cd .. cd redis05 ./redis-server redis.conf cd .. cd redis06 ./redis-server redis.conf cd .. #启动start.sh redis全部 pkill -9 redis //该命令杀死进程 chmod 777 start.sh ./start.sh #最新的配置,5.0建议使用redis-cli来运行命令,启动任意节点的redis-cli ./redis01/redis-cli --cluster create 0.0.0.0:6379 0.0.0.0:6380 0.0.0.0:6381 0.0.0.0:6382 0.0.0.0:6383 0.0.0.0:6384 --cluster-replicas 1 ##该命令适用于低版本 ##./redis-trib.rb create --replicas 1 0.0.0.0:6379 0.0.0.0:6380 0.0.0.0:6381 0.0.0.0:6382 0.0.0.0:6383 0.0.0.0:6384
关于redis-cluster集群
Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有 节点连接。
结构特点:
1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2.节点的fail是通过集群中超过半数的节点检测失效时才生效。
3.客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
4.redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
5.Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
新增一个主节点:
新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:
节点A覆盖1365-5460
节点B覆盖6827-10922
节点C覆盖12288-16383
节点D覆盖0-1364,5461-6826,10923-12287
redis-cluster的主从模式
redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,
就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。