前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Cluster搭建高可用Redis服务器集群

Redis Cluster搭建高可用Redis服务器集群

作者头像
java架构师
发布2019-03-15 10:50:50
1.4K0
发布2019-03-15 10:50:50
举报
文章被收录于专栏:Java架构师进阶

一、Redis Cluster集群简介

Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节点,当遇到单机内存、并发等瓶颈时,可以采用分布式方案要解决问题。

二、集群原理

Redis Cluster集群采用了P2P的模式,完全去中心化,Redis把所有的Key分成了16384个slot,每个Redis实例负责其中一部分slot,集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新,Redis客户端可以在任意一个Redis实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

其结构特点:

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

节点的fail是通过集群中超过半数的节点检测失效时才生效。

客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster负责维护node<->slot<->value。

Redis集群预分好16384个桶,当需要在Redis集群中放置一个key-value 时,根据CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

三、集群搭建

要让集群正常工作至少需要3个主节点,一共就需要6个节点,其中3个为主节点,3个为从节点,为了简单在下面在一台机器上演示,演示使用了linux服务器上7000到7005的6个端口。

下载redis、解压、安装

wget http://download.redis.io/releases/redis-3.2.4.tar.gztar -zxvf redis-3.2.4.tar.gzcd redis-3.2.4/make && make install

将redis-trib.rb复制到/usr/local/bin目录下

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

创建Redis节点并修改配置文件

mkdirredis_clustercdredis_cluster/mkdir700070017002700370047005cpredis.confredis_cluster/7000cpredis.confredis_cluster/7001cpredis.confredis_cluster/7002cpredis.confredis_cluster/7003cpredis.confredis_cluster/7004cpredis.confredis_cluster/7005

按下面提示修改6个配置文件

port 7000//端口7000,7001,7002... bind 本机ip//默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群daemonize yes//redis后台运行pidfile /var/run/redis_7000.pid//pidfile文件对应7000,7001,7002cluster-enabled yes//开启集群 把注释#去掉cluster-config-filenodes.conf//集群的配置 配置文件首次启动自动生成cluster-node-timeout 15000//请求超时 默认15秒,可自行设置appendonly yes//aof日志开启 有需要就开启,它会每次写操作都记录一条日志 dir/root/redis-3.2.4/redis_cluster/7000//目录,端口7000,7001,7002... ,必须配置,否则无法启动

启动6个Redis实例,并且要指定配置文件,这些配置文件分别在各自的子目录下面

./src/redis-server redis_cluster/7000/redis.conf ./src/redis-server redis_cluster/7001/redis.conf ./src/redis-server redis_cluster/7002/redis.conf ./src/redis-server redis_cluster/7003/redis.conf ./src/redis-server redis_cluster/7004/redis.conf ./src/redis-server redis_cluster/7005/redis.conf

安装ruby

yuminstallrubyyuminstall-y rubygemsgeminstallredis -v3.2.2

使用redis-trib.rb创建集群

cd /usr/local/bin./redis-trib.rb create --replicas1192.168.0.204:7000192.168.0.204:7001192.168.0.204:7002192.168.0.204:7003192.168.0.204:7004192.168.0.204:7005

运行结果如下:

Redis Cluster启动成功截图

如果一切顺利,你会看到类似截图上的消息: [OK] All 16384 slots covered, 这说明Redis的Cluster集群环境搭建成功。

简单解释一下这个命令:调用 ruby 命令来进行创建集群,--replicas 1 表示主从节点比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及solt的大小,因为在Redis集群中有且仅有16383个solt,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

M: 5237fa04bd793832b605d92ceb1d2f493da22e43 为主节点Id

S: b6b696c11bbffa8f9d4e6397ef4d27b0b54fea32 192.168.0.204:7003 replicates 5237fa04bd793832b605d92ceb1d2f493da22e43 从节点下对应主节点Id

目前来看,7000-7002 为主节点,7003-7005 为从节点,并向你确认是否同意这么配置,输入yes后,会开始集群创建。

四、验证集群

通过Cluster Nodes命令和Cluster Info命令来看看集群效果

./redis-cli -c -h192.168.0.204-p7001cluster infocluster nodes

运行结果如下:

功截图

在集群上通过增加数据来测试集群效果

运行结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档