准备软件:
第一:redis安装包,用来启动多个redis实例,
https://github.com/microsoftarchive/redis/releases(展开Assets四个选项中对应的rRedis-x64-3.2.100 .msi)
第二:利用redis.trib.rb的相关命令, 操作多个redis客户端,搭建集群
构建ruby运行环境==》安装ruby驱动==》执行redis-trib.rb命令
http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.2.4-x64.exe
https://rubygems.org/gems/redis/versions/3.2.2
https://github.com/beebol/redis-trib.rb
相关具体操作:
第一:启动多个实例,
将单redis安装目录下的文件,复制一份到新建目录redis_cluster,
新建一个redis服务器启动配置文件,如下样例:
相关配置,功能如下:
第一个:启动多个实例,
port 6380
appendonly yes #数据的保存格式aof
appendfilename "appendonly.6380.aof" #数据保存文件
cluster-enabled yes #是否开启集群
cluster-config-file nodes.6380.conf #集群节点配置文件
cluster-node-timeout 15000 #节点超时时间
cluster-slave-validity-factor 10 #验证slaver节点次数
cluster-migration-barrier 1
cluster-require-full-coverage yes #master节点和slaver节点是否全量配置
命令:redis-server.exe redis.6380.conf
在对应的redis_cluster目录下,搜cmd开启,依次启动多个实例
第二步:构建集群
安装完ruby运行环境,
依次安装redis-3.2.2.gem驱动,注意文件位置,不要写错文件名称,建议放在redis_cluster下,
命令:gem install --local redis-3.2.2.gen
注意点:可能不能直接运行redis-trib.rb,博主在这里遇到卡住很久,以为是ruby系统环境变量没添加,
这里ruby redis-trib.rb即可,添加ruby
相关具体操作:
ruby redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
--replicas 1 参数指定每个主服务器,有一个从服务器
注意点:博主,执行命令报错,提示
***
D:/Program Files/redis-cluster/Ruby22-x64/lib/ruby/gems/2.2.0/gems/redis-3.2.2/lib/redis/connection/ruby.rb:55:in `rescue in _read_from_socket': Connection timed out (Redis::TimeoutError)
***
没找到相关消息,也不知道什么原因,后来重试一遍就好了,但又出现下面问题,
D:\Program Files\redis-cluster>ruby redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
>>> Creating cluster
[ERR] Node 127.0.0.1:6380 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
D:\Program Files\redis-cluster>ruby redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
>>> Creating cluster
[ERR] Sorry, can't connect to node 127.0.0.1:6383
重启对应的服务端即可,记得删除redis_cluster文件下,该服务对应生成的node.6380.conf文件
提示如下:搭建集群成功!
可参考:https://www.cnblogs.com/wheatli/p/8275542.html
其他命令:
ruby redis-trib.rb info 127.0.0.1:6381
ruby redis-trib.rb check 127.0.0.1:6381
info check显示详细搭建信息,后面任意指定一个添加到集群中服务端即可
ruby redis-trib.rb add-node 127.0.0.1:6386 127.0.0.1:6381
前面参数是新添加,后面任意指定,默认添加一台主redis服务器
ruby redis-trib.rb add-node --slave --master-id 60e699321e1785cc8d3d50bf8ccc27e560827ecb 127.0.0.1:6386 127.0.0.1:6381
添加一台从服务器,用--slave --master-id参数,指定主服务器id
刚刚添加的节点服务端,可能未能分配卡槽,需要这个指令移动需要的卡槽
ruby redis-trib.rb reshard 127.0.0.1:6389
依次填写源redis节点,可以写所有all
重新负载均衡:原理是集群分配给每个redis服端的卡槽数量,来决定每台实例容量,
这里--weight 指定权重,
ruby redis-trib.rb rebalance --weight db28eec3b2e168752a598fb37e15260c7ccdc088=1 --weight 1ad9790b4f41c5d9d92645ed06b1ba7578e82104=1 --weight 689e6aa7d855611ec2dd5db41b67eee051d69f76=1 --weight 689e6aa7d855611ec2dd5db41b67eee051d69f76=1 --weight a15b5cecad66a51a5b7d6e229088c5946056d129=2 127.0.0.1:6381
可以参考:https://www.cnblogs.com/ivictor/p/9768010.html
小结:
博主测试,集群中主节点,不能少于两个,且主从节点,不能同时宕机,否则提示卡槽不能完全覆盖,造成redis集群不可用
[ERR] Not all 16384 slots are covered by nodes.