linux搭建redis集群

在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。

集群的优点

高可伸缩性:服务器集群具有很强的可伸缩性。随着需求和负荷的增长,可以向集群系统添加更多的服务器。在这样的配置中,可以有多台服务器执行相同的应用和数据库操作。

高可用性:高可用性是指,在不需要操作者干预的情况下,防止系统发生故障或从故障中自动恢复的能力。通过把故障服务器上的应用程序转移到备份服务器上运行,集群系统能够把正常运行时间提高到大于99.9%,大大减少服务器和应用程序的停机时间。

高可管理性:系统管理员可以从远程管理一个、甚至一组集群,就好像在单机系统中一样。

所以,为了在大流量访问下提供稳定的业务,集群化是存储的必然形态

Redis-Cluster

redis cluster是官方的redis集群实现
redis-cluster使用去中心化的思想 使用hash slot方式 将16348个hash slot 覆盖到所有节点上 对于存储的每个key值 使用CRC16(KEY)&16348=slot 得到他对应的hash slot 并在访问key时就去找他的hash slot在哪一个节点上 然后由当前访问节点从实际被分配了这个hash slot的节点去取数据 节点之间使用轻量协议通信 减少带宽占用 性能很高 自动实现负载均衡与高可用 自动实现failover 并且支持动态扩展 官方已经可以1000个节点 实现的复杂度低

cluster(集群):

cluster同时满足了sentinel的一些特性达到了高可用目的,不同点是采用hash算法根据key自动将数据分配到不同的节点当中,新增节点非常方便,当数据量过大时,可增加机器进行扩容,解决了单机容量受限的问题。

cluster特性

1、多个redis节点直接数据共享
2、所有的节点都是一主一从或一主多从
3、不支持同时处理多个key(如MSET/MGET),因为cluster需要把key分配节点,高并发量同时创建key-value会降低性能并导致不可预测的行为
4、支持在线增加、删除节点
5、不支持多数据库选择

cluster搭建

集群部署需要至少六个节点,个人学习测试,只在本机进行创建使用,而生产环境是在多个机器上面部署才能高可用性

创建节点

在这里插入图片描述

配置

vim …/redis.conf 进行修改配置,由于该文件内容较多,可以选择finalshell自带编辑器修改在这里插入图片描述
修改一下选项

port 6379 #放入节点目录下修改成节点端口
cluster-enabled yes  #启用集群
cluster-node-timeout 5000 #超时时间
protected-mode no #此时外部网络可以直接访问
daemonize yes  #后台启动
bind 0.0.0.0

在这里插入图片描述
修改完毕后Ctrl+s保存
可以通过grep 内容 …/redis.conf查看修改是否成功
在这里插入图片描述
保存后,挨个复制到节点目录下,修改该节点的端口保存
在每个节点目录下启动
在这里插入图片描述
查看服务以及防火墙状态
在这里插入图片描述
创建集群

./redis-cli --cluster create 172.31.0.224:6370..........172.31.0.224:6375 --cluster-replicas 1

在这里插入图片描述
查看集群信息

./redis-cli --cluster check 172.31.0.224:6375

在这里插入图片描述
3主3从
我们可以用Redis Desktop Manager连接一下
在这里插入图片描述
在这里插入图片描述

使用问题:

当使用6379进行存值时发现报错:(error) CLUSTERDOWN Hash slot not served :没有分配槽

原因:

使用创建集群指令时会出现
Can I set the above configuration? (type ‘yes’ to accept):
你需要输入yes,而并非缩写 y,因为玩linux的都习惯的会输入 y,但是这里不行,要全拼yes才可以。就是这个错误引起的分配槽失败。

检测

redis-cli --cluster check 127.0.0.1:6379
检测结果
[ERR] Not all 16384 slots are covered by nodes

进行修复

redis-cli --cluster fix 127.0.0.1:6379
修复完后让我们添加key-value
在这里插入图片描述
没有问题,让我们在节点上添加key-value
在这里插入图片描述
发现报错(error) MOVED 9439 172.31.0.224:6371
原因是因为没有用集群模式连接(连接节点命令 没有加 -c 参数)
./redis-cli -c -h 172.31.0.224:6371
在这里插入图片描述
查看Redis Desktop Manager
在这里插入图片描述
连接6372节点,也存在key-value
在这里插入图片描述

模拟节点宕机

查看节点主从身份
6370.6371.6372为Mater,6373,6374,6375为slave,对这些单词很不爽哈,主人,奴隶
在这里插入图片描述
我们对6372的主进行处决 kill
在这里插入图片描述
当我们再次查看节点的主从身份
在这里插入图片描述
发现6370,6371还为主人,6374,6375为奴隶
6372没了,6373当了主人,
宕机后的节点数据会不会丢失?
在这里插入图片描述
Redis Cluster 不保证强一致性,在一些特殊场景,客户端即使收到了写入确认,还是可能丢数据的。
Redis Cluster 不保证强一致性,存在丢失数据的场景:

异步复制
在 master 写成功,但 slave 同步完成之前,master 宕机了,slave 变为 master,数据丢失。
具体可了解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值