Redis 集群应用学习文档格式.docx
- 文档编号:19412198
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:15
- 大小:58.04KB
Redis 集群应用学习文档格式.docx
《Redis 集群应用学习文档格式.docx》由会员分享,可在线阅读,更多相关《Redis 集群应用学习文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
port9001
cluster-enabledyes
cluster-config-filenodes.conf
cluster-node-timeout5000
appendonlyyes
注意:
port要修改成对应目录的名字,也就是每个实例要有不同的端口。
下面我们分别启动这三个实例:
zhaoguihuadediannao:
~zhaogh$cdapplications/dev/redis-cluster
redis-clusterzhaogh$cd9001
9001zhaogh$./redis-server./redis.conf
9003zhaogh$cd../9002
9002zhaogh$./redis-server./redis.conf
9002zhaogh$cd../9003
9003zhaogh$./redis-server./redis.conf
9003zhaogh$
接下来我们来创建集群,让三个实例互相通讯:
srczhaogh$./redis-trib.rbcreate--replicas0127.0.0.1:
9001127.0.0.1:
9002127.0.0.1:
9003
>
Creatingcluster
Connectingtonode127.0.0.1:
9001:
OK
9002:
9003:
Performinghashslotsallocationon3nodes...
Using3masters:
127.0.0.1:
9001
9002
M:
92c9912cb1ccf657c886ecd839dd32c66efd8762127.0.0.1:
slots:
0-5460(5461slots)master
b6d46fcb8b0e6ee373b09a4f2cbcec744d1a259b127.0.0.1:
5461-10922(5462slots)master
44ab30c7c589ffb15b9b04dd827c72cfaeedacb2127.0.0.1:
10923-16383(5461slots)master
CanIsettheaboveconfiguration?
(type'
yes'
toaccept):
yes
Nodesconfigurationupdated
Assignadifferentconfigepochtoeachnode
SendingCLUSTERMEETmessagestojointhecluster
Waitingfortheclustertojoin..
PerformingClusterCheck(usingnode127.0.0.1:
9001)
[OK]Allnodesagreeaboutslotsconfiguration.
Checkforopenslots...
Checkslotscoverage...
[OK]All16384slotscovered.
srczhaogh$
需要注意的是执行
redis-trib.rb命令需要ruby的支持,如果你没有安装可以先到
https:
//rubygems.org/gems/redis
下载,然后离线安装。
sudogeminstallredis-3.0.7.gem--local
下面我们用redis自带的客户端测试一下:
srczhaogh$./redis-cli-c-p9001
9001>
gettestkey001
->
Redirectedtoslot[12786]locatedat127.0.0.1:
(nil)
9003>
settestkey002testvalue002
Redirectedtoslot[401]locatedat127.0.0.1:
OK
gettestkey002
"
testvalue002"
settestkey003testvalue003
可以看到,虽然我们第一次连接的是9001端口,当我们去获取testkey001的时候,rediscluster自动帮我们重定向到9003。
当我们在9003设置testkey002时,rediscluster又重定向到9001。
总的来说,redis集群部署起来还是非常方便的,遗憾的是,目前几乎还没有c#的客户端能很好的支持redis集群,真是非常的悲哀,我们期待他们的更新。
下一遍中,我们继续讨论redis集群,比如,如何增加节点,移除节点,重新切片等,敬请期待。
Redis集群(中)
昨天晚上钓鱼回来,大发神经,写了篇概括程序员生活现状的文章,没想到招来众多人的口诛笔伐,大有上升到政治层面的趋势。
我也许不会再发表任何冲击心灵的文章,我希望给大家带来更多的正能量,所以那篇文章已被我删除。
我的本意只是想让各位看过文章之后能冷静地思考自己的程序人生,不管是对是错,人都有选择的权力,走好自己的路。
我没有你们想象中那么悲观,我也在不懈的努力,哪怕一时的跌倒,我也要重新站起。
生活无时无刻不是压力,让我们背起行囊,迈出踏实的一步,走起!
我们继续我们的redis缓存之旅。
前一篇我们实现了一个简单的redis集群,redis也为了让我们方便的维护集群提供了非常好的工具。
首先请大家参照我的上一篇文章,把集群环境搭建起来。
OK,我用了分分钟的时间已经搭建好了。
如何增加节点:
首先我们创建一个叫做9004的目录:
redis-clusterzhaogh$mkdir9004
redis-clusterzhaogh$
接着我们将9001目录下的redis-server、redis.conf两个文件拷贝到9004目录:
redis-clusterzhaogh$cp9001/redis-server9004
redis-clusterzhaogh$cp9001/redis.conf9004
然后我们打开redis.conf文件修改里面的端口配置项,将其改为9004。
启动9004实例:
redis-clusterzhaogh$cd9004
9004zhaogh$./redis-server./redis.conf
9004zhaogh$
想要把这个实例加入到集群,我们只需要执行redis-trib.rb命令:
srczhaogh$./redis-trib.rbadd-node127.0.0.1:
9004127.0.0.1:
第一个参数是我们刚才启动的新实例,第二个参数是集群中已有的节点。
检查一下新节点是否已经加入:
clusternodes
0e8f980bfe7a682e3d71b15523a41293535b8ccd:
0myself,master-001connected0-5460
cbb01bdfdc265b190496956354d84aaae6e7d54d127.0.0.1:
9004master-014019523163460connected
708e6e14474e3a99677b05ff89bd857375884437127.0.0.1:
9002master-014019523143252connected5461-10922
a7f9d3c64540cc3fc8cd3072e573bb8ab0bf1e6f127.0.0.1:
9003master-014019523153343connected10923-16383
我们可以发现9004并不包含任何哈希槽,因为它还没有数据。
我们还可以为集群中的主节点增加从节点用于只读查询。
如何增加从节点:
我们还是要创建目录,拷贝那两个文件,修改配置,然后启动实例:
redis-clusterzhaogh$mkdir9005
redis-clusterzhaogh$cp9001/redis-server9005
redis-clusterzhaogh$cp9001/redis.conf9005
修改port为9005
redis-clusterzhaogh$cd9005
9005zhaogh$./redis-server./redis.conf
9005zhaogh$
执行下面的命令,增加从节点:
srczhaogh$./redis-trib.rbadd-node--slave127.0.0.1:
9005127.0.0.1:
第一个参数为从节点,第二个参数为主节点。
如何删除一个节点:
srczhaogh$./redis-trib.rbdel-node127.0.0.1:
9001'
cbb01bdfdc265b190496956354d84aaae6e7d54d'
这里要注意一下,第一个参数是集群中的任何一个主节点地址,而第二个参数是要删除节点的ID,这个ID如果你不知道的话,可以通过clusternodes命令查看。
还有一点就是要删除的节点必须是空的,也就是不能缓存任何数据,否则会删除不成功。
对于非空节点,在删除之前需要重新分片,将缓存的数据转移到别的节点。
如何重新分片:
我们先给某个节点做点数据:
settestkey001testvalue001
现在9003上已经有数据了,我们尝试删除一下:
78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'
Removingnode78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3fromcluster127.0.0.1:
[ERR]Node127.0.0.1:
9003isnotempty!
Resharddataawayandtryagain.
没有删除成功,我们来重新分片,把9003上的数据转移:
srczhaogh$./redis-trib.rbreshard127.0.0.1:
然后输出了很多信息,很多数值和ID都可以从这段信息中找到。
Howmanyslotsdoyouwanttomove(from1to16384)?
5461
会问你要移动多少个哈希槽,我们把9003上的所有哈希槽都移走,5461这个数字可以从终端上看到,或许你的实际情况不是这个数字。
WhatisthereceivingnodeID?
4d2e0a8360795ce7ce8381c68746034aeba3c9b9
然后问你你要把这些哈希槽移到哪儿去,我指定了9001的节点ID。
PleaseenterallthesourcenodeIDs.
Type'
all'
touseallthenodesassourcenodesforthehashslots.
done'
onceyouenteredallthesourcenodesIDs.
Sourcenode#1:
78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3
Sourcenode#2:
done
之后,redis列出了重新分片计划,最后问你
Doyouwanttoproceedwiththeproposedreshardplan(yes/no)?
执行完成后,我们看看9003上还有没有key:
srczhaogh$./redis-cli-p9003
keys*
(emptylistorset)
再看看9001上是不是有这个key了
srczhaogh$./redis-cli-p9001
1)"
testkey001"
没错,果然转移过来了。
最后我们试试能不能把9003删除:
SendingCLUSTERFORGETmessagestothecluster...
SHUTDOWNthenode.
CouldnotconnecttoRedisat127.0.0.1:
Connectionrefused
notconnected>
非常好,it’sverygood.
Redis主从复制
Redis的主从复制配置非常容易,但我们先来了解一下它的一些特性。
1.redis使用异步复制。
从redis2.8开始,slave也会周期性的告诉master现在的数据量。
可能只是个机制,用途应该不大。
2.一个master可以拥有多个slave,废话,这也是业界的标配吧。
3.slave可以接收来自其他slave的连接。
意思是不是就是说slave在接收其他的slave的连接之后成为master?
等下我们来验证。
4.redis复制在master这一端是非阻塞的,也就是说在和slave同步数据的时候,master仍然可以执行客户端的操作命令而不受其影响。
这点都不能保证,要你干嘛?
5.redis复制在slave这一端也是非阻塞的。
在配置文件里面有slave-serve-stale-data这一项,如果它为yes,slave在执行同步时,它可以使用老版本的数据来处理查询请求,如果是no,slave将返回一个错误。
在完成同步后,slave需要删除老数据,加载新数据,在这个阶段,slave会阻止连接进来。
6.Replicationcanbeusedbothforscalability,inordertohavemultipleslavesforread-onlyqueries(forexample,heavy
SORT
operationscanbeoffloadedtoslaves),orsimplyfordataredundancy.这句话我也没理解什么意思。
7.使用复制可以避免master因为需要把全部的数据集写入磁盘而造成的开销,因此可以把master中save配置项全部注释掉,不让它进行保存,然后配置slave,让slave保存。
虽然有这个特性,但是我们好像一般不这么做。
好吧,我们做几个例子练习一下。
先打开三个终端,然后起三个实例,分别用三个client去连接它们:
srczhaogh$./redis-server--port10000--daemonizeyes
srczhaogh$./redis-cli-p10000
端口10000的做master。
slave01:
zhaoguihuadedia
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Redis 集群应用学习 集群 应用 学习