redis在linux搭建集群,Linux/Centos 7 redis4 集群搭建

背景说明:

项目初期使用AWS的ElastiCache Redis作为系统的数据缓存,近期由于数据量和QPS加大,导致Redis存在压力,进行了两次的单点垂直升级,缓解了目前的压力。项目组进行了数据和费用的评估,考虑到日后升级,决定使用Redis Cluster集群方案,使用三个Master节点搭建集群。(不使用3Master+3Slave)

前期准备:

1、Redis 安装包:本次使用Redis 4.0.8版本进行搭建

下载地址:http://download.redis.io/releases/redis-4.0.8.tar.gz

2、Ruby环境,本次使用yum安装 :yum install -y ruby rubygems

3、下载Ruby Redis工具包,本次使用3.3.3版本(后续说明版本问题)

采用离线下载:wget https://rubygems.org/downloads/redis-3.3.3.gem

4、在AWS上启动3个EC2实例,实例类型为:t2.medium(双核4g,40g SSD存储)

ip分别为:172.31.3.71、172.31.3.72、172.31.3.73

开始搭建:

1、安装Redis:指定安装目录到:/workspace/libs/redis

tar xvfz redis-4.0.8.tar.gz

cd redis-4.0.8

make && make install  PREFIX=/workspace/libs/redis

2、配置Redis:在/workspace/libs/redis下创建conf目录,用于存放配置文件

拷贝  redis-4.0.8目录下的redis.conf到/workspace/libs/redis/conf下

修改配置如下:

⚠注意:不能设置密码,否则集群启动时会连接不上

port  7001      //配置端口

//根据本机所在的IP或hostname去配置 node1 node2 node3

bind 本机ip //172.31.3.71,172.31.3.72,172.31.3.73

daemonize    yes                 //redis后台运行

//pidfile文件对应7000,7001,7002

pidfile  /var/run/redis_7001.pid

cluster-enabled  yes                            //开启集群

//集群的配置  配置文件首次启动自动生成 7001

cluster-config-file  /workspace/libs/redis/conf/nodes_7001.conf

//请求超时  默认15秒,可自行设置

cluster-node-timeout  15000

appendonly  yes               //aof日志开启  本次使用aof

//禁用rdb 注释掉save

#save 900 1

#save 300 10

#save 60 10000

3、安装Ruby Redis工具包:安装:gem install -l ./redis-3.3.3.gem

4、启动Redis:

cd /workspace/libs/redis

/workspace/libs/redis/bin/redis-server /workspace/libs/redis/conf/redis.conf

查看当前目下是否生成appendonly.aof 文件和 ./conf/下是否生成:nodes-7001.conf

24c5c062ea92ee48e4078db5afc0c2c7.png

56d39a782169ddb02dbf09c5e7737f33.png

根据配置生成appendonly.aof文件

066bcbd6888cb00504d7c10fa4d214f3.png

根据配置生成nodes-7001.conf文件

5、启动集群:

拷贝redis-4.0.8/src下的文件redis-trib.rb到/workspace/libs/redis/bin/目录下

cd /workspace/libs/redis/bin/

./redis-trib.rb create 172.31.3.71:7001 172.31.3.72:7002 172.31.3.73:7003

7d9e38afb85295e3300465aa25a4abd2.png

启动集群

6、 检查集群:

./redis-trib.rb info 172.31.3.71:7001

./redis-trib.rb check 172.31.3.71:7001

801fcc3bb65b410f2ae6265fb8331996.png

info查看集群key和slot的信息

faa046ec8bd2caa5df4d8de4b6210431.png

检查集群的状态

7、 添加节点:添加172.31.3.74:7004节点

./redis-trib.rb add-node 172.31.3.74:7004 172.31.3.71:7001

2b99e5e28c3e19777239cc43e10b6e18.png

添加172.31.3.74:7004节点

⚠注意:如果172.31.3..74:7004以前添加到集群过,重新添加的话,会报错: [ERR] Node 172.31.3..74:7004 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

需要先删除/workspace/libs/redis目录下的appendonly.aof和conf下的nodes-7004.conf文件,再重新执行

8、删除节点:删除节点4d3e007b38bf89aede64d0facc15124d9d605511(masterId)

./redis-trib.rb del-node 172.31.3.71:7001 4d3e007b38bf89aede64d0facc15124d9d605511

f3541d99ba2aeb015a66f7c07d77e0ad.png

删除172.31.3.74:7004节点

9、移动槽位:

./redis-trib.rb reshard 172.31.3.71:7001

c7639549d954d32f775a1ca388f03a4c.png

从172.31.3.73:7003移动10个槽位到172.31.3.71:7001去

关闭槽位:多个节点(7001,7002)的1234槽位被打开,需要手动依次关闭

./redis-cli -h 172.31.3.71 -p 7001 -c

172.31.3.71:7001> CLUSTER SETSLOT 1234 stable

./redis-cli -h 172.31.3.72 -p 7002 -c

172.31.3.72:7002> CLUSTER SETSLOT 1234 stable

10、数据导入:导入外部节点:172.31.3.70:6379

./redis-trib.rb import --copy --from 172.31.3.70:6379 172.31.3.71:7001

功能测试:

./redis-cli -h 172.31.3.71 -p 7001 -c

172.31.3.71:7001> set aaa aaa

d0ae0fc7a5d7452276acb3ce4f695066.png

set aaa 自动重定向到172.31.3.72:7002

172.31.3.71:7001> get aaa

9e404e7004f0c38bfe59d0568780fa15.png

get aaa

遇到问题:

1、ruby-redis版本兼容问题:

之前使用redis-4.0.0.rc1.gem安装,在移槽的时候,发生异常,导致槽位打开,需要手动关闭。

解决办法:安装redis-3.3.3.gem版本

2、从ElastiCache Redis导入到集群中,报错:Migrating         D342A51BFE16FC943B2B9EADEC9414C4D38114FE_131141 to 172.31.3.71:7001: ERR unknown         command 'migrate'

网上搜了一遍,有人提到AWS 的ElastiCache Redis 不支持migrate方法,目前只能通过代码迁移

参考链接:

https://redis.io/topics/cluster-tutorial

https://www.cnblogs.com/feiyun126/p/7248989.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程控制

我和舍友共用ADSL,我的电脑接在宽带路由器上面。为了能远程控制家里的电脑,我是煞费苦心,最后终于OK了,把一些经验心得写出来。 首先想要远程登录的机器最好是WinXP或者Win2003(据说Win2003更好一些,可以多用户同时登…

防SQL注入的最好实现方式是什么?

咨询区 LeonidasFett:我的问题是:如何在 C# 中是使用SQL防注入,我的模糊理解是可以通过限定应用程序接收的字段格式来实现最终目的,比如说:email字段只能接收email的格式,name字段不能输入特殊字符&#xf…

微软职位内部推荐-Senior SW Engineer for Application Ecosystem

微软近期Open的职位:Job posting title: Senior Development EngineerLocation: China, BeijingDivision: Operations System Group Engineering&nbsp Group OverviewOSG is delivering flagship products in Microsoft. China is a second largest economy in the world. …

数学除了摧残祖国的花朵外,竟然还可以赢钱!

全世界只有3.14 % 的人关注了爆炸吧知识端午节假期结束了,知识君又可以开心地回到工作岗位上了。我热爱学习,也热爱工作。这两天,知识君又听到了“哼,数学除了摧残我们这些祖国的花朵之外,然而并没有什么卵用。”知识君…

rocketmq 顺序消费_10 分钟看懂消息队列 RocketMQ

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和…

[Tyvj1114 搭建双塔]

[题目来源]:VIjos [关键字]:动态规划 [题目大意]:用n块水晶搭建两个塔,要求双塔必须一样高,问最大能达到的高度为多少。 // [分析]:用f[i,j]表示使用前i个水晶,建起高度差为j的双塔时,较矮的那个塔的最大高…

echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图

有时候我们的图表需要根据后台数据每秒实时更新,那么用echarts应该如何实现呢?2020.11.27发现篇文章很多人关注,但之前写的不是很清楚,今天更新下,大家有问题可以也留言讨论。这是一个仿win10任务管理器的设备信息监控…

linux lua socket编程,CentOs 安装lua,luasocket

一、centos安装Lua3)个人在这里选择使用5.1版本的*下载wget http://www.lua.org/ftp/lua-5.1.5.tar.gz--2013-10-14 16:23:17-- http://www.lua.org/ftp/lua-5.1.5.tar.gzResolving www.lua.org... 89.238.129.35, 2a02:40:41::5Connecting to www.lua.org|89.238.129.35|:80.…

Python 2.7 Tutorial —— 流程控制

.. _tut-morecontrol: ****************************************** More Control Flow Tools 深入流程控制 ****************************************** Besides the :keyword:while statement just introduced, Python knows the usual control flow statements known from …

一厕难求!NASA悬赏三万五千美元,只为一个能在月球上用的马桶

全世界只有3.14 % 的人关注了爆炸吧知识来源:大数据文摘作者:刘俊寰如今逐渐步入智能生活时代,智能化产品也逐渐普及到我们生活中,有的智能马桶,不仅可以识别大便监测你的生活状况,还可以识别肛纹辨别不同身…

我很高兴地宣布我正在编写第一本官方ABP图书

掌握ABP框架通过实施软件开发最佳实践来构建可维护的 .NET 解决方案从 ABP 框架的创建者那里学习如何构建现代 Web 应用程序主要特点使用 ABP 中的最佳工具构建强大、可维护和可扩展的软件解决方案了解如何在您的 Web 应用程序中实施 SOLID 原则和领域驱动设计了解 ABP 框架如何…

python join_python join 和 split的常用使用方法

python join 和 split的常用使用方法 python join 和 split方法的使用,join用来连接字符串,split恰好相反,拆分字符串的。 1.join用法示例 >>>li [my,name,is,bob] >>> .join(li) my name is bob >>>_.join(li) my_name_is_…

layui 如何去dom_javascript 怎么去引用layui里面的方法

现在,我有一个JSP页面,里面同时存在普通javascript的代码和layui的代码,我想调用layui里面的方法,该怎么引用?这是javascript代码:var treeSetting {data: {simpleData: {enable: true,idKey: "id&qu…

ExtJs Grid分页时序号自增的实现,以及查询以后的序号的处理

ExtJs Grid分页时,默认情况下每页的序号都是从1起始的,这往往不符合我们的习惯。这里实现了序号的自动增加。如:每页20条第一页从1开始,第二页从21条开始。先定义一个全局变量如record_start 0,这里记得赋初始值主要是考虑第一次…

linux的自定义input,linux键值到Android键值的转换与自定义

首先要确定按键输入设备是对应/dev/input目录下哪个event,根据VID PID匹配对应的kl文件,可通过如下命令 cat /proc/bus/input/devices 查看设备信息framework层通过.kl文件将获取的键值转换成实际按键含义后,又会通过KeycodeLabel转换成相应的…

原来历史人物的英文名竟然叫这些,太好笑了吧哈哈哈哈哈

全世界只有3.14 % 的人关注了爆炸吧知识我们学了这么多年的英语你有英文名字吗?如果有一天,古人穿越到了现在那么他们的英文名字是……汉武帝:Woody汉文帝:Wendy▽朱棣:judy▽朱熹:Juicy▽周瑜:…

10款优秀的跨平台免费生产力软件[转]

因为多数人并不需要OpenOffice.org那样整合了字处理、表格、幻灯片制作等完整的生产力工具,他们只需要其中一项功能:字处理软件AbiWord 2.8.6;开源桌面排版系统Scribus 1.3.8;整合浏览器、电子邮件、IRC和HTML编辑器的SeaMonkey 2…

From Apprentice To Artisan 翻译 19

为什么80%的码农都做不了架构师?>>> 上一篇 Interface Segregation Principle 接口隔离原则 Introduction 介绍 The Interface Segregation principle states that no implementation of an interface should be forced to depend on methods it does n…

Winform模拟post请求和get请求登录网站

引言最近有朋友问如何用winform模拟post请求,然后登录网站,稍微想了一下,大致就是对http报文的相关信息的封装,然后请求网站登录地址的样子。发现自己的博客中对这部分只是也没总结,就借着这股风,总结一下h…

python eval函数_Python eval 函数妙用

作者博文地址:https://www.cnblogs.com/liu-shuai/ eval 功能:将字符串str当成有效的表达式来求值并返回计算结果。 语法: eval(source[, globals[, locals]]) -> value 参数: source:一个Python表达式或函数compil…