redis cluster以及master-slave在windows下环境搭建

发布时间:2017-7-1 11:05:42编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"redis cluster以及master-slave在windows下环境搭建 ",主要涉及到redis cluster以及master-slave在windows下环境搭建 方面的内容,对于redis cluster以及master-slave在windows下环境搭建 感兴趣的同学可以参考一下。

一、redis cluster环境搭建:

1.了解Redis Cluster原理:

   详细了解可参考:http://doc.redisfans.com/topic/cluster-tutorial.html#id5

    Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。

    关于负载均衡,集群的Redis Instance之间可以迁移数据,以Slot为单位,但不是自动的,需要外部命令触发。

    关于集群成员管理,集群的节点(Redis Instance)和节点之间两两定期交换集群内节点信息并且更新,从发送节点的角度看,这些信息包括:集群内有哪些节点,IP和PORT是什么,节点名字是什么,节点的状态(比如OK,PFAIL,FAIL等)是什么,包括节点角色(master 或者 slave)等。

    关于可用性,集群由N组主从Redis Instance组成。主可以没有从,但是没有从意味着主宕机后主负责的Slot读写服务不可用。一个主可以有多个从,主宕机时,某个从会被提升为主,具体哪个从被提升为主,协议类似于Raft,参见这里。如何检测主宕机?Redis Cluster采用quorum+心跳的机制。从节点的角度看,节点会定期给其他所有的节点发送Ping,cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。通过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机。从这里可以看出,主宕机后,至少cluster-node-timeout时间内该主所负责的Slot的读写服务不可用。

2.redis集群搭建(redis cluster需要ruby环境支持)

2.1 redis安装

   Redis对于Linux是官方支持的,参考:http://redis.io/download

   Redis官方是不支持windows的,只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址:https://github.com/MSOpenTech/redis/releases

   下载某版本下的Redis-x64-3.2.100.zip以及Source code (zip)

2.2 ruby安装(搭建redis cluster是需要ruby环境支持)

   ruby下载安装http://rubyinstaller.org/downloads/

   

2.3 安装 RubyGEM,Redis 的 ruby 支持环境

     rubygem下载地址:https://rubygems.org/pages/download

     下载下来是一个压缩包,解压运行里面的 setup.rb 安装 rubyGems。

      安装ruby依赖,由于墙的原因ruby自带的源有时候很慢,我们换成淘宝的源,不然下面安装redis依赖会失败

     cmd下替换ruby自带的源如下:     

ruby -v //查看ruby版本gem -v //查看gem版本gem sources //查看gem的源gem source -l //查看gem的源gem source -a https://ruby.taobao.org //添加淘宝ruby源gem source -r https://rubygems.org/  //移除ruby自带源gem install redis   //安装redis依赖

2.4 使用redis cluster:

   要让redis集群正常运作至少需要三个主节点,因此我们创建6个节点,三个主节点,三个从节点。

2.4.1 创建集群目录,cmd命令:

E:cd redismkdir 7000 7001 7002 7003 7004 7005

将redis解压后文件夹中的redis.windows.conf以及redis-server等内容,分别拷贝到新建的六个文件夹中

2.4.2 更改配置

 将六个文件夹下的redis.windows.conf文件中以下属性进行修改:

port 7001(对应文件夹的端口号)appendonly yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000

2.4.3 创建redis启动脚本

@echo offcd 7000 (对应文件夹,依次创建)redis-server.exe redis.windows.conf@pause

创建批量启动脚本

@echo onstart 7000.batstart 7001.batstart 7002.batstart 7003.batstart 7004.batstart 7005.bat@pause

或者可以:

@echo offstart Redis-Server ./7000/redis.windows.confstart Redis-Server ./7001/redis.windows.confstart Redis-Server ./7002/redis.windows.confstart Redis-Server ./7003/redis.windows.confstart Redis-Server ./7004/redis.windows.confstart Redis-Server ./7005/redis.windows.conf@pause

2.4.4 创建集群

解压Redis的Source code (zip)包,copy其中src下的redis-trib.rb(ruby编写,之前的ruby环境就是为这个准备的)到E:\Redis

cmd如下:

e:cd redisredis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
redis-trib.rbcreate: 这表示我们希望创建一个新的集群。选项 --replicas 1 :表示我们希望为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。

执行结果如下:

E:\Redis>redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005>>> Creating cluster>>> Performing hash slots allocation on 6 nodes...Using 3 masters:127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002Adding replica 127.0.0.1:7003 to 127.0.0.1:7000  //这里可以看到主从对应关系7003是7001的副本Adding replica 127.0.0.1:7004 to 127.0.0.1:7001Adding replica 127.0.0.1:7005 to 127.0.0.1:7002M: 7247e10169405fc4b1792d5068902407e8431cc0 127.0.0.1:7000   slots:0-5460 (5461 slots) masterM: ddde095bcebb14a734b124cd2bd9aac8985d5a6d 127.0.0.1:7001   slots:5461-10922 (5462 slots) masterM: 8583514abc3a324099144dc8bac8f6d4c3c03bd4 127.0.0.1:7002   slots:10923-16383 (5461 slots) masterS: 397cd20d54aadb0625e629647244cd556beae174 127.0.0.1:7003   replicates 7247e10169405fc4b1792d5068902407e8431cc0S: 9869f6f33638f47da17d303ad5c497727839b120 127.0.0.1:7004   replicates ddde095bcebb14a734b124cd2bd9aac8985d5a6dS: d27177a907f27c546dda2693d9c4a723d92be6de 127.0.0.1:7005   replicates 8583514abc3a324099144dc8bac8f6d4c3c03bd4Can I set the above configuration? (type 'yes' to accept): yes//对配置没问题就输入yes>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join..>>> Performing Cluster Check (using node 127.0.0.1:7000)M: 7247e10169405fc4b1792d5068902407e8431cc0 127.0.0.1:7000   slots:0-5460 (5461 slots) masterM: ddde095bcebb14a734b124cd2bd9aac8985d5a6d 127.0.0.1:7001   slots:5461-10922 (5462 slots) masterM: 8583514abc3a324099144dc8bac8f6d4c3c03bd4 127.0.0.1:7002   slots:10923-16383 (5461 slots) masterM: 397cd20d54aadb0625e629647244cd556beae174 127.0.0.1:7003   slots: (0 slots) master   replicates 7247e10169405fc4b1792d5068902407e8431cc0M: 9869f6f33638f47da17d303ad5c497727839b120 127.0.0.1:7004   slots: (0 slots) master   replicates ddde095bcebb14a734b124cd2bd9aac8985d5a6dM: d27177a907f27c546dda2693d9c4a723d92be6de 127.0.0.1:7005   slots: (0 slots) master   replicates 8583514abc3a324099144dc8bac8f6d4c3c03bd4[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.//这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

现在的master是7000 7001 7002这三台机,redis会对key做 CRC16 校验和后分别存储这三台机上,没问题就输入 yes。

例如 7000 这台机 slots:0-5460 的意思是,对key 做 CRC16 校验和后 值在 0-5460范围内都会存到这台机器里。

例如 key=288 对应的CRC16校验和 为 4258,应该存在7000这台机里

PS:使用前应该对业务做梳理,根据系统中key的特点来调整各个机器的slots范围, 不然系统的key基本集中在一两台机器上集群的效果就不大了。


至此,windows下redis cluster搭建成功。

2.4.5 在redis-cli下测试一下:

D:\Redis>redis-cli -c -p 7001127.0.0.1:7001> set lcawen helloOK127.0.0.1:7001> set hello world-> Redirected to slot [866] located at 127.0.0.1:7000OK127.0.0.1:7000> get lcawen-> Redirected to slot [10428] located at 127.0.0.1:7001"hello"127.0.0.1:7001> get hello-> Redirected to slot [866] located at 127.0.0.1:7000"world"127.0.0.1:7000> keys *1) "hello"127.0.0.1:7000> get lcawen-> Redirected to slot [10428] located at 127.0.0.1:7001"hello"127.0.0.1:7001> keys *1) "lcawen"

   



上一篇:CSS3学习手记(2) 伪类选择器
下一篇:Netty

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款