共计 3516 个字符,预计需要花费 9 分钟才能阅读完成。
【背景】
2 年前在本地电脑上搭建过 redis 集群。但苦于创业公司服务器资源有限(穷),并没有应用到生产环境。近期换了个工作环境,有资源条件了准备开始搭建使用。虽然搭建过一次,但在搭建的过程当中,还是遇到一些问题,所以打算整理一份详情的搭建记录,也能给大家多一份参考选择。
【环境以及资源】
服务器:windows server 2008 r2 下载地址: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 脚本】
【部署步骤】
一、部署 6 个 redis 服务
1、下载 redis 服务绿色包 https://github.com/MSOpenTech…(Redis-x64-3.2.100.zip)。我们约定 7000、7001、7002 3 个端口为主节点,6000、6001、6002 3 个端口为从节点,便于区分。那先来搭建第一 redis 服务,然后如法炮制复制另外 5 个即可。2、下载完成解压,修改文件夹名称为 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 文件(持久化存储数据),删除他们,否则在创建集群的时候会失败。3、启动 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 个文件 4、这样我们第一个 redis 服务安装成功,那接着依照同样的步骤搭建另外 5 个 redis 服务。
二、安装 Ruby 环境
redis-trib.rb 是 ruby 脚本编写的,可方便的搭建集群,所以我们需要安装 Ruby 环境来执行脚本。
1、打开下载地址 http://dl.bintray.com/oneclic… 选择 rubyinstaller-2.3.3-x64.exe 进行下载。2、运行安装(全部勾选)3、安装完毕,测试是否安装成功。打开 cmd,输入命令 ruby -v。显示版本代表环境安装成功。
三、安装 rubygems
使用 rubygems 是为了安装 ruby 的 redis 依赖。
1、打开下载地址 https://rubygems.org/pages/do…,下载 rubygems-update-3.0.2.gem,放到 ruby 目录。2、运行命令 gem install –local D:Ruby23-x64rubygems-update-3.0.2.gem3、安装完成 gem 后,安装 Redis 依赖,在 cmd 里继续执行 gem install redis
四、使用 redis-trib.rb 安装集群
1、打开下载地址 https://raw.githubusercontent… (指向最新版本),本文使用地址建议 https://raw.githubusercontent…,另存为到本地(一个文本类文件)。2、打开 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:60023、提示后输入 yes 如图能看到 3 主 3 从的配置信息 rediscluster 采用了哈希分区的“虚拟槽分区”方式,所有的键根据哈希函数 (CRC16[key]&16383) 映射到 0-16383 槽内,共 16384 个槽位。主节点 7000 端口分槽是 0 -5460,对应从库是 6001 主节点 7001 端口分槽是 5461-10922,对应从库是 6002 主节点 7002 端口分槽是 10923-16383,对应从库是 6000
【错误帮助】
情况 1、redis-trib.rb 脚本版本与 ruby 的 redis 依赖版本不一致说明 redis-trib.rb 的代码版本与当前 ruby 安装的 redis 依赖版本不匹配。查看版本方法:打开 ruby 的 gems 安装目录,搜索 redis。https://raw.githubusercontent…(更改链接 /redis/ 版本号 /)下载对应版本的脚本。情况 2:无法连接其他节点确保端口打开,各台机子上能互相通信
五、数据读写测试
1、打开 cmd,进入 redis6000 端口的目录,输入 redis-cli -h 127.0.0.1 -p 6000 -c2、我们存入 2 个 key 进行测试,key 和 age,如图所示 2 个 key 被分入 7002 和 7000。那对应的从库节点应该是 6000 和 6001,我们可以利用工具查看。
六、集群高可用性测试
首先模拟主节点 7000 挂掉,按照预期从节点 6001 选为主节点。1、进入服务里停止 redis70002、查看集群信息,cmd 进入 redis-trib.rb 文件目录,执行 redis-trib.rb check 127.0.0.1:6001 可以看到从节点 6001(S)已经变为主节点(M)3、取值测试 get age,原来是从 7000 节点里取到的,现在任然取的到,只是是从 6001 里取到 4、重新启动 redis7000,重新查看集群信息 7000 变为从节点。
七、额外添加集群节点
集群在运行了一段时间之后,由于需求的变动,我们会增加或者删减集群节点。主从节点增加选择思路:(1)缓存服务存储压力大,增加主节点,横向扩展(2)保证 redis 集群高可用,多增加从节点。任何一条主从线下的 redis 服务全部故障,则导致集群不可用。
1、新部署一个 redis 服务端口 70032、把 7003 加入集群,cmd 进入 redis-trib.rb 文件目录,执行 redis-trib.rb add-node 127.0.0.1:7003 127.0.0.1:70003、查看集群信息 redis-trib.rb check 127.0.0.1:6001 能看到 7003 已经被加入集群,作为主节点(M),但是这时候 7003 并没有分槽。没有分配哈希槽的话表示就没有存储数据的能力。4、分配槽点随便进入一个客户端,redis-trib.rb reshard 127.0.0.1:7001(1)问我们要移动多少个槽点,我们按均摊来分,大概是 4000 个节点。(2)输入 4000,要我们输入接受节点的 ID,就是 7003 的 ID:28d7e06a951e82d8eca485fe465947100d78090a(3)接着输入 all 回车后提示输入 yes,就会从当前的其他主节点里抽取 4000 个槽过来。
【错误帮助】
如果过程中出现槽错误分别登录 7002 和 7003redis 执行 cluster setslot 11237 stable5、为 7003 添加从节点 6003(1)、部署 redis6003(2)、进入 redis-trib.rb 目录执行 redis-trib.rb add-node –slave 127.0.0.1:6003 127.0.0.1:7003
八、移除集群节点
1、删除从节点,因为没有分配哈希槽,所以直接删除。IP: 端口 IDredis-trib.rb del-node 127.0.0.1:6003 241c77920bde9952fbf3cb38f7b3085c946b03242、删除主节点,因为主节点有分槽,先把槽移动至其他主节点,再删除