Redis集群是一个提供在多个Redis节点间共享数据的程序集。
Redis集群中不支持处理多个keys的命令。
Redis集群通过分区来提供一定程度的可用性。在某个节点宕机或者不可用的时候可以继续处理命令。
Redis集群数据分片
在Redis集群中,使用数据分片(sharding)而不是一致性hash(consistency hashing)来实现,一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都存在这些哈希槽中的某一个,通过CRC16校验后对16384取模来决定。
加入说现在集群中有三个节点,那么
①节点A包含0到5500号哈希槽。
②节点B包含5501到11000号哈希槽。
③节点C包含11001到16384号哈希槽。
然后如果我们要增加一个节点的时候,会从ABC三个节点分别得到一部分槽到D上。如果我们移除一个节点的时候,就会把移除的节点的分隔槽移到剩下的槽上面。
Redis主从复制模型
为了实现Redis的集群的高可用性。Redis提供了一个主从复制模型。每个节点都会有N-1个复制品。
如果在创建集群的时候,我们为每个节点添加了一个从节点,这时候,如果其中的某个主节点挂掉了,便会把它的从节点做为新的主节点,继续提供服务。但是如果主节点和从节点都挂掉了,那就不可以继续使用了。
Redis集群搭建
Redis集群由多个云新在集群模式下的Redis实例组成。实例的集群模式需要通过配置来开启。
下面是一个包含了最少选项的集群配置文件实例:
port 7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yespidfile /var/run/redis_xxxx.piddir /usr/local/redis-cluster/xxxx
port指定了节点的端口号
cluster-enabled yes选项用于开启实例的集群模式
cluster-config-file nodes.conf设置了保存节点的配置文件路径,这个文件无须认为修改,是在集群启动的时候创建。
cluster-node-timeout 5000:设置了方式失败的等待时间。即5秒还访问不了就认为这个节点不可用。
appendonly yes:用于开启aof持久化
pidfile /var/run/redis_xxxx.pid设置pid文件的位置,其中xxxx为端口号
dir /usr/local/redis-cluster/xxxx设置工作目录,其中xxxx为端口号。
此时目录中的文件是这样的
[root@localhost 10:49 /usr/local/redis-cluster]# ll 7000 7001 7002 7003 7004 70057000:总用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:44 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 09:50 redis-server7001:总用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:46 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7002:总用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:46 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7003:总用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:47 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7004:总用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:48 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server7005:总用量 7080-rw-r--r--. 1 root root 57787 9月 10 10:48 redis.conf-rwxr-xr-x. 1 root root 7185872 9月 10 10:04 redis-server[root@localhost 10:49 /usr/local/redis-cluster]#
新闻热点
疑难解答