redis高可用集群搭建

简介: redis高可用集群搭建

redis的安装

sudo apt-get install redis-server

配置允许远程访问

sudo gedit /etc/redis/redis.conf

注释掉**#bind 127.0.0.1**行

重启服务

sudo redis-server /etc/redis/redis.conf

检查服务是否启动

ps -ef | grep redis

架构图

开始搭建集群

要想搭建高可用的redis集群,至少需要三台主库,每个主库需要一台从库。每个主库的数据是不同的,每个从库的数据跟主库同步,redis会将需要存放的数据放到某一个主库中。我们开八台虚拟机,使用前六台搭建一个高可用的redis集群,服务器分配如下:

分别进入1-6号主机,建立redis的集群目录,要有权限,以服务端口为文件夹名,在下面把redis的配置文件拷贝一份:

mkdir -p /home/wang/redis-cluster/7001
sudo cp /etc/redis/redis.conf /home/wang/redis-cluster/7001/redis-7001.conf
chmod 777 redis-7001.conf

其余5台服务器操作类似,只需要改服务端口。

修改redis-7001.conf的内容,注意以下配置:

port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

其余五台服务器只需要变更端口号。

改好后,要以全新的配置文件来启动redis:

sudo redis-server /home/wang/redis-cluster/7001/redis.conf
ps -ef|grep redis

如果发现默认的6379的redis还开着,就把它关掉:

sudo /etc/init.d/redis-server stop

此时redis的进程应该是这样的:

确认六台redis都按照指定的配置和端口启动后,就可以创建集群了。

安装ruby

sudo apt-get install ruby
sudo apt-get install rubygems
sudo gem install redis

创建集群

找到创建集群的脚本文件redis-trib.rb,把它拷贝到bin目录下:

cp redis-trib.rb /usr/local/bin/redis-trib

随便找一台服务器,执行一次集群的创建命令:

sudo redis-trib create --replicas 1 192.168.252.128:7001 192.168.252.130:7002 192.168.252.131:7003 192.168.252.132:7004 192.168.252.134:7005 192.168.252.135:7006 

看到如下提示:

确认主从没问题,输入yes,即可创建成功。

我们输入以下命令确认集群的状态:

redis-trib check 192.168.252.130:7002

可以看到集群的信息:

通过以下命令也能查看集群状态:

redis-cli -p 7111 cluster nodes

高可用测试

进入192.168.252.128:7001,杀掉redis的进程,过几秒,看看集群的状态,发现7001的主节点已经挂掉,对应的从节点7004已经变为主节点:

下面恢复192.168.252.128:7001

sudo redis-server /home/wang/redis-cluster/7001/redis.conf
redis-cli -c -p 7001
cluster nodes

发现挂掉的7001节点已经变为7004的从节点。这说明,在master节点下线后,slave节点会自动提升为master节点,保存集群持续提供服务;fail节点恢复后,会自动添加到集群中,变成slave节点。

redis集群的扩展

为了演示redis集群的扩展,我们使用7和8两台服务器扩展现有的6台集群。

进入7号和八号服务器,按照前面的方式,分别安装redis,创建集群的目录和配置文件并启动。

将7号机添加为新的master节点

使用redis-trib脚本的add-node命令将一个节点添加到集群里面,第一个是新节点 ip:port,第二个是任意一个已存在节点 ip:port。

cp redis-trib.rb /usr/local/bin/redis-trib
redis-trib add-node 192.168.252.150:7007 192.168.252.128:7001

以上操作结果表示节点添加成功,新增的节点不包含任何数据, 因为它没有分配任何 slot。

为新节点分配哈希槽(slot):你只需要指定集群中其中一个节点的地址,redis-trib 就会自动找到集群中的其他节点。目前redis-trib只能在管理员的协助下完成重新分片的工作,命令如下:

redis-trib reshard 192.168.252.150:7007

它会问你想分配多少个槽位过来,填个500吧。他又问你要分配主机(7号服务器)的ID,我的是e131a6564a1e935da2ceab59813c5ccb5dfd9c11。他又问你从哪些服务器取槽位过来,就填all表示所有。输入yes确认即可。

可以通过下图看到集群的状态,可以看到7号机的槽位分配成功。

以上集群状态输出信息解析:

  1. 节点 ID
  2. IP:PORT
  3. 节点状态标识: master、slave、myself、fail?、fail
  4. 如果是从节点,表示主节点的ID;
  5. 如果是主节点,则为 ‘-’ 集群最近一次向各个节点发送 PING 命令后,过去多长时间还没有接到回复
  6. 节点最近一次返回 PONG 的时间戳
  7. 节点的配置纪元
  8. 本节点的网络连接情况: connected、disconnected
  9. 如果是主节点,表示节点包含的槽

添加从节点

进入八号服务器192.168.252.133,输入:

redis-trib add-node 192.168.252.133:7008 192.168.252.128:7001

这时新增的服务器还是master,我们将其转为slave,命令后跟7号服务器的id:

redis-cli -c -p 7008
cluster replicate ab31611b3424990e2b9bbe73135cb4cb0ace394f

这时就变为slave了:

cluster nodes

删掉一个slave节点

redis-trib del-node 192.168.252.133:7008 5256e05a17c106c93285a03aff1b1b9e7ca7bf0c

再看节点状态,发现八号机已被删除:

删除master节点

先移走master节点的槽位,再移除服务器:

redis-trib reshard 192.168.252.150:7007

要删除槽位的数量,填499,接收槽位的 master 节点 ID,填4号服务器ID,删除槽位的master节点ID,填7号的ID.最后输入done。

redis-cli -c -p 7006 cluster nodes

这时发现7号服务器的槽位已被移除,可以开始删了。

redis-trib del-node 192.168.252.150:7007 ab31611b3424990e2b9bbe73135cb4cb0ace394f

这时7号节点也被关闭:


相关文章
|
12月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
797 2
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1239 5
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
957 6
|
11月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
1106 2
基于Redis的高可用分布式锁——RedLock
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
415 5
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
917 0
|
12月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作