2年前在本地电脑上搭建过redis集群。但苦于创业公司服务器资源有限(穷),并无应用到生产环境。近期换了个工做环境,有资源条件了准备开始搭建使用。虽然搭建过一次,但在搭建的过程中,仍是遇到一些问题,因此打算整理一份详细的搭建记录,也能给你们多一份参考选择。node
服务器:windows server 2008 r2 (由于现有服务器是windows,那咱们就在windows上搭建)
下载地址:
Redis:https://github.com/MSOpenTech...(Redis-x64-3.2.100.zip)【Redis服务】
Ruby:http://dl.bintray.com/oneclic...(rubyinstaller-2.3.3-x64.exe)【Ruby环境安装】
rubygems: https://rubygems.org/pages/do...【用于安装ruby的redis依赖】
redis-trib.rb:https://raw.githubusercontent...【建立集群的ruby脚本】git
一、下载redis服务绿色包 https://github.com/MSOpenTech...(Redis-x64-3.2.100.zip)。咱们约定7000、700一、7002 3个端口为主节点,6000、600一、6002 3个端口为从节点,便于区分。那先来搭建第一redis服务,而后如法炮制复制另外5个便可。
二、下载完成解压,修改文件夹名称为Redis-6000,修改redis.windows.conf文件里的信息以下:
port 6000 #端口#
cluster-enabled yes #是否开启集群#
cluster-config-file nodes.conf #集群节点文件,会根据配置的名字生成在目录下#
cluster-node-timeout 15000 #超时时间#
appendonly yes
注意:若是你是复制启动过的redis服务,记得检查目录下是否有appendonly.aof,nodes.conf和.rdb文件(持久化存储数据),删除他们,不然在建立集群的时候会失败。
三、启动redis服务
方法一:打开cmd,进入redis-6000目录下执行命令:redis-server.exe redis.windows.conf。
方法二【推荐】:部署redis到windows服务里,便于往后使用。cmd进入redis-6000目录,执行命令redis-server --service-install redis.windows.conf --service-name Redis6000 --loglevel verbose
打开服务找到redis6000,右击启动。
启动后查看目录下会多出2个文件
四、这样咱们第一个redis服务安装成功,这时候这个redis服务还不能set数据,要配置完集群才可。那接着依照一样的步骤搭建另外5个redis服务。github
redis-trib.rb是ruby脚本编写的,可方便的搭建集群,因此咱们须要安装Ruby环境来执行脚本。redis
一、打开下载地址 http://dl.bintray.com/oneclic... 选择 rubyinstaller-2.3.3-x64.exe 进行下载。
二、运行安装(所有勾选)
三、安装完毕,测试是否安装成功。
打开cmd,输入命令 ruby -v 。显示版本表明环境安装成功。windows
使用rubygems是为了安装ruby的redis依赖。缓存
一、打开下载地址 https://rubygems.org/pages/do..., 下载rubygems-update-3.0.2.gem,放到ruby目录。
二、运行命令gem install --local D:Ruby23-x64rubygems-update-3.0.2.gem
三、安装完成gem后,安装 Redis依赖,在cmd里继续执行 gem install redisruby
一、打开下载地址 https://raw.githubusercontent... (指向最新版本),本文使用地址建议https://raw.githubusercontent...,另存为到本地 (一个文本类文件)。
二、打开cmd,进入redis-trib.rb文件所在目录,执行建立集群命令
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:6000 127.0.0.1:6001 127.0.0.1:6002
三、提示后输入yes
如图能看到3主3从的配置信息
rediscluster采用了哈希分区的“虚拟槽分区”方式,全部的键根据哈希函数(CRC16[key]&16383)映射到0-16383槽内,共16384个槽位。
主节点7000端口分槽是0-5460,对应从库是6001
主节点7001端口分槽是5461-10922,对应从库是6002
主节点7002端口分槽是10923-16383,对应从库是6000服务器
状况一、redis-trib.rb脚本版本与ruby的redis依赖版本不一致
说明redis-trib.rb的代码版本与当前ruby安装的redis依赖版本不匹配。
查看版本方法:打开ruby的gems安装目录,搜索redis。
https://raw.githubusercontent... (更改连接/redis/版本号/)
下载对应版本的脚本。
状况2:没法链接其余节点
确保端口打开,各台机子上能互相通讯app
一、打开cmd,进入redis6000端口的目录,输入redis-cli -h 127.0.0.1 -p 6000 -c(集群链接多个-c)。随便链接哪个节点均可以,只要这个节点运行正常,集群会自动根据key来进入对应槽点的节点。
二、咱们存入2组key:value进行测试,key:vvv1和age:28,如图所示age被存入7000,key被存入7002。那对应的从库节点应该是6001和6000,咱们能够利用工具查看。函数
首先模拟主节点7000挂掉,按照预期从节点6001选为主节点。
一、进入服务里中止redis7000
二、查看集群信息,cmd进入redis-trib.rb文件目录,执行redis-trib.rb check 127.0.0.1:6001
能够看到从节点6001(S)已经变为主节点(M)
三、取值测试 get age,原来是从7000节点里取到的,如今任然取的到,只是是从6001里取到
四、从新启动redis7000,从新查看集群信息
7000变为从节点。
集群在运行了一段时间以后,因为需求的变更,咱们会增长或者删减集群节点。
主从节点增长选择思路:(1)缓存服务存储压力大,增长主节点,横向扩展 (2)保证redis集群高可用,多增长从节点。任何一条主从线下的redis服务所有故障,则致使集群不可用。
一、新部署一个redis服务端口7003
二、把7003加入集群,cmd进入redis-trib.rb文件目录,执行redis-trib.rb add-node 127.0.0.1:7003 127.0.0.1:7000
三、查看集群信息redis-trib.rb check 127.0.0.1:6001
能看到7003已经被加入集群,做为主节点(M),可是这时候7003并无分槽。没有分配哈希槽的话表示就没有存储数据的能力。
四、分配槽点
随便进入一个客户端,redis-trib.rb reshard 127.0.0.1:7001
(1)问咱们要移动多少个槽点,咱们按1W6的槽给4个主节点来均摊,大概是4000个节点。
(2)输入4000,要咱们输入接受节点的ID,就是7003的ID:28d7e06a951e82d8eca485fe465947100d78090a
(3)接着输入all回车后提示输入yes,就会从当前的其余主节点里抽取4000个槽过来。
若是过程当中出现槽错误
分别登陆7002和7003redis执行cluster setslot 11237 stable
五、为7003添加从节点6003
(1)、部署redis6003
(2)、进入redis-trib.rb目录执行redis-trib.rb add-node --slave 127.0.0.1:6003 127.0.0.1:7003
一、删除从节点,由于没有分配哈希槽,因此直接删除。IP:端口 ID
redis-trib.rb del-node 127.0.0.1:6003 241c77920bde9952fbf3cb38f7b3085c946b0324
二、删除主节点,由于主节点有分槽,先把槽移动至其余主节点,再删除
一、搭建完一个redis节点后复制另外5个。6个redis节点是集群的最低配置。3对1主1从。
二、安装ruby环境来执行redis-trib.rb建立集群。还有手动建立集群的方式,不须要ruby,可是麻烦一点。
三、在搭建好的集群额外再添加删除节点。加主节点仍是从节点思路:缓存服务存储压力大,增长主节点,横向扩展。保证redis集群高可用,多增长从节点,由于任何一条主从线下的redis节点所有故障,则致使集群不可用。
【若是文章对你有所帮助,请在评论区留言点赞,以资鼓励。】