Redis 集群搭建

Redis 单机模拟搭建集群

一、redis-cluster设计:

    Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持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放到哪个桶中。


二、Redis-cluster节点分配:

    现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

          节点A覆盖0-5460;
          节点B覆盖5461-10922;
          节点C覆盖10923-16383.


三、Redis-cluster主从模式:

    redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。 不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。


四、集群搭建:

        集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。

1、安装Redis
2、将安装完的redis目录copy N份,我们这里要模拟6台机子就复制6份
3、修改其中的一份redis.config
   cluster-enabled yes #开启cluster,去掉注释
   cluster-config-file nodes.conf
   cluster-node-timeout 15000
   appendonly yes
   daemonize yes
然后保存退出
将这一份覆盖其他5个目录下的redis.conf配置,注意在覆盖的时候还要配置端口号不同,因为我们是模拟的IP是一致的
所以只有将端口号设置为不一样。

4、在老版本中需要安装ruby来安装redis的集群管理,但是在新版本中就不需要了,redis已经将集群功能内置于客户
端中,到时候直接使用./redis-cli -c -p 端口号 进入管理界面然后创建集群。后续会讲到命令。
5、编写一个脚本来启动所有的redis,  startRedis.sh
#!/bin/bash
cd redis1/src/
./redis-server ../redis.conf
cd ../../redis2/src
./redis-server ../redis.conf
cd ../../redis3/src
./redis-server ../redis.conf
cd ../../redis4/src
./redis-server ../redis.conf
cd ../../redis5/src
./redis-server ../redis.conf
cd ../../redis6/src
./redis-server ../redis.conf
cd ../../
echo "启动完成
"

6、给脚本赋予执行权限 chmod +x startRedis.sh
7、启动所有的redis  ./startRedis.sh
8、创建集群
    redis-cli --cluster create 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 --cluster-replicas 1
9、进入集群页面:
    ./redis-cli -c -p 6379
    如果正常进入到这个页面,那么集群就已经基本搭建成功了
    尝试 set name1 1
    set name1 2
    set name2 3
    
    你会发现他会自动跳转到对应的服务器上去进行存储操作,当然只会调转到主节点不会跳转到备用节点上。如果主节点
    断线,则会自动将副节点提升为主节点,如果此时刚刚的主节点又恢复了他会被降为副节点。一主一备不能同时宕机,
    否则集群会无法正常工作,部分节点不能正确存储。


以上是redis集群的基本搭建,部分内容来自于互联网,如有不正确之处请与我联系。



阅读数:181
如有疑问请与我联系:点击与我联系