redis-cluster集群:
redis3.0引入的分布式存储方案
集群由多个node节点组成,redis数据分布在这些节点之中
在集群之中分为主节点和从节点
集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读
集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立即恢复
集群模式按照数据分片:
数据分片的实现:
redis的集群引入了哈希槽的概念
redis集群当中16384个哈希槽位。(0-16383)
根据集群当中主从节点数,分配给哈希槽位,每个主从节点只负责一部分的哈希槽位
每次读写都涉及到哈希槽为,key通过CRC16校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位。通过这个值去找到对应槽位所在的节点,然后直接跳转到这个节点进行存取操作。
哈希槽位的值是连续的,如果出现不连续的哈希槽位,或者有哈希槽位没有被分配,集群会即将报错
主从复制:主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作,故障切换的过程中,会提示集群不可用。切换完成,集群恢复继续工作。
实验
所有redis服务器
修改配置文件
vim /etc/redis/6379.conf
70行默认监听所有网卡
bind 0.0.0.0
89行修改,关闭保护模式
protected-mode no
137行,开启守护进程,以独立进程启动
daemonize yes
700行,开启AOF持久化
appendonly yes
833行,取消注释,开启群集功能
cluster-enabled yes
841行,取消注释,群集名称文件设置
cluster-config-file nodes-6003.conf
847行,取消注释群集超时时间设置
cluster-node-timeout 15000
重启
/etc/init.d/redis_6379 restart
replicas 1:规定一个主只有一个从
主从的配合是随机分配的
在集群模式当中,只能选择0库,集群不能切换库
Adding replica 192.168.120.110:6379 to 192.168.120.11:6379
Adding replica 192.168.120.10:6379 to 192.168.120.12:6379
Adding replica 192.168.120.70:6379 to 192.168.120.13:6379
127.0.0.1:6379> set test2 1
(error) MOVED 8899 192.168.233.14:6379
表名客户端尝试读取键值对test1,但是实际槽位在4768,集群要求客户端移动到4768槽位所在的主机节点,获取数据
集群流程:
在nginx节点配置,实现负载均衡!
stream {
????upstream redis_cluster {
????????server 192.168.233.7:6379;
????????server 192.168.233.8:6379;
????????server 192.168.233.9:6379;?????
????}
????server {
????????listen 6379;
????????proxy_pass redis_cluster;
????????proxy_connect_timeout 1s;
????????proxy_timeout 1s;
????????proxy_responses 1;
????}
}
proxy_responses 1;在集群之中只要有一个节点响应,然后代理服务器就会把响应传递给客户端,可以增加整个系统的稳定性。
只要有一个节点返回了正确的响应,就可以继续服务请求,而不至于因为某个节点无响应而导致整个请求失败