redis-cluster集群

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

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

数据流程图

redis-cluster集群的工作模式

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

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

集群模式按照数据分片

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

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

如何实现数据分片?

Redis的集群引入了哈希槽的概念

redis集群当中16384个哈希槽位(0-16383)

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

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

哈希槽位

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

有主从复制的原因

主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作

故障切换的过程中,会提示集群不可用,切换完成,集群恢复继续工作

实现cluster集群
#关闭防火墙和安全机制
redis1
vim /etc/redis/6379.conf

70行
#监听地址为0.0.0.0

89行
yes---no
#保护模式关闭

136行
#默认就行

700行
#持久化打开

833行
cluster-enabled yes
#取消注释

841行
cluster-config-file nodes-6379.conf
#取消注释
#集群配置文件

847行
cluster-node-timeout 15000
#取消注释

#其他的服务器和redis配置是一样的

sz 6379.conf(redis1)
#复制到桌面
#删除其他服务器6379.conf,把文件拖到/etc/redis目录下

#重启服务
/etc/init.d/

#redis1创建集群
redis-cli -h 20.0.0.20 --cluster create 20.0.0.20:6379 20.0.0.21:6379 20.0.0.22:6379 20.0.0.23:6379 20.0.0.24:6379 20.0.0.25:6379 --cluster-replicas 1

Adding replica 20.0.0.24:6379 to 20.0.0.20:6379
Adding replica 20.0.0.25:6379 to 20.0.0.21:6379
Adding replica 20.0.0.23:6379 to 20.0.0.22:6379

#replics 1 :规定一个主只有一个从
#主从的配合
#集群不能切换库的,只能使用默认库

#进入库
redis-cli

#查看集群的节点
cluster nodes

set test1 1
keys *

#在分配好的从节点上查看是否同步过去

(error)MOVED 4768 20.0.0.20:6379
#表示客户端尝试读取键值对test1 ,但是实际槽位是4768,集群要求客户端移动到4768槽位所在的主机节点,获取数据

#随机停止一台master节点的服务
#查看从是否顶替master节点

#监控集群redis的日志
monitor
#从节点通过ping命令(哨兵模式)
集群流程

1、集群自带主从和哨兵

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

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

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

Nginx和客户端
Nginx服务器
全局配置中
stream {
	upstream redis_cluster {
		server 20.0.0.20:6379 weight=1;
		server 20.0.0.21:6379 weight=1;
		server 20.0.0.22:6379 weight=1;
	
	}
	server{
	listen 6379;
	proxy_pass redis_cluster;
	proxy_connect_timeout ls;
	proxy_timeout ls;
	proxy_responses 1;
	}
proxy_responses 1;
在集群之中只要有一个节点响应,然后dialing服务器就会响应传递给客户端,可以增加整个系统的稳定性
只要有一个节点可以响应,那么客户端就会
}

客户端连接Nginx代理服务器
redis-cli -h 20.0.0.40 -p 6379

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值