redis-cluster集群

redis3.0引入的分布式存储方案

集群由多个node节点组成,redis数据分布在这些节点之中。

在集群之中也分为主节点和从节点

redis-cluster集群_第1张图片

集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读,

集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立即恢复

集群模式按照数据分片

1、数据分区 是集群的核心功能 ,每个主都额可以对外提供读,写的功能,但是数据是--对应写入主的对应从节点。在集群模式中,可以容忍的数据的不完整

2、高可用 :集群的主要目的,

数据分片的实现;

redis的集群引入了哈希槽的概念。

redis集群当中16384个hash槽位,(0-16383)

根据集群当中的主从节点数,分配hash槽位,每个主从节点只负责一部分哈希槽位

每次读写都涉及到hash槽位key通过crc16校验之后,对16384取余数,余数值决定数据放入哪个hash槽位。通过这个值去找到对应槽位所在的节点,然后直接跳转到这个节点进行存取操作。

哈希槽位的值是连续的,如果出现不连续的哈希值,或者有哈希为没有被分配集群将会报错

redis-cluster集群_第2张图片

主从复制:主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作,故障切换的过程种,会提示集群不可用。

切换完成,集群恢复继续工作。

redis-cli -h 20.0.0.101 --cluster create 20.0.0.101:6379 20.0.0.102:6379 20.0.0.103:6379 20.0.0.104:6379 20.0.0.105:6379 20.0.0.106:6379 --cluster-replicas 1

replicas 1:规定一个主只有一个从

主从的配合是随机分配的

在集群模式当中,只能选择0库,集群不能切换库

(error) MOVEO 4768 20.0.0.101:6379:

表名客户端尝试读取键值对test1 ,但是实际槽位在4768,集群要求客户端移动到4768槽位所在的主机节点,获取数据

集群流程;

1、集群自带主从和哨兵

2、每个主从节点之间互相隔离的,可以容忍数据的不完整,目的:高可哟美好

3、哈希槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位

4、moved不是报错,只是提醒客户端去分配的槽位节点,获取数据

如何用nginx实现客户端代理

在nginx节点配置,实现负载均衡!
stream {
    upstream redis_cluster {
        server 20.0.0.101:6379;
        server 20.0.0.106:6379;
        server 20.0.0.102:6379;
        
    }

    server {
        listen 6379;
        proxy_pass redis_cluster;
        proxy_connect_timeout 1s;
        proxy_timeout 1s;
        proxy_responses 1;
    }
}

redis集群

每台服务器修改vim /etc/redis/6379.conf 

redis-cluster集群_第3张图片

redis-cli -h 20.0.0.101 --cluster create 20.0.0.101:6379 20.0.0.102:6379 20.0.0.103:6379 20.0.0.104:6379 20.0.0.105:6379 20.0.0.106:6379 --cluster-replicas 1

redis-cluster集群_第4张图片

Adding replica 20.0.0.105:6379 to 20.0.0.101:6379

Adding replica 20.0.0.106:6379 to 20.0.0.102:6379

Adding replica 20.0.0.104:6379 to 20.0.0.103:6379

 /etc/init.d/redis_6379 stop 停掉一个主

主会飘到对应的从上 从成为新主

你可能感兴趣的:(redis,数据库,缓存)