引言
本文记录搭建Redis Cluster的流程。
Redis Cluster有两种方式可以搭建,一种是直接用redis原生命令直接配置(较为麻烦),第二种是使用 redis-trib.rb 脚本直接进行搭建,但需要依赖 ruby 。
本文记录第二种。
已验证过 redis 3.2.0 和 4.0.0 版本都没问题。
步骤
- 安装ruby
- 安装rubygem redis
- redis实例配置文件编写,启动
- 执行redis-trib.rb
全文均为离线安装。安装包在文末附件部分。
1.安装ruby
上传 all.tar 到服务器中。 执行 tar -xvf all.tar 解压。 进入 ruby 文件夹 执行 rpm -ivh ruby* 。
tar -xvf all.tar
cd ruby
rpm -ivh ruby*
2.安装rubygem redis
gem install –local /redis-3.2.0.gem
执行上述命令即可,第二步必须第一步成功,第二步成功后提示 success。安装刚开始可能提示有问题,稍等一会 最后会提示Success,不是很快 有点慢,耐心等待。
3.redis 实例配置启动
ruby 环境准备完成后,那么需要配置集群中 redis 实例了,需要先配置好然后启动实例。
假设设置三主三从,那么就每一个实例单独建一个文件夹,每一个文件夹下存放自己的配置文件,每一个实例端口都设置为不同(当然机器不同端口相同也无所谓)。
配置好之后逐个执行
redis-server redis.conf
redis 简洁基础配置(将端口 3523 全都改一下成各自实例。)
# 端口
port 3523
# 是否后台运行
daemonize yes
dir "/home/song/redis-3523/data"
logfile "3523.log"
dbfilename "dump-3523.db"
cluster-enabled yes
cluster-config-file "nodes-3523.conf"
cluster-require-full-coverage no
requirepass "密码"
# 配置 requirepass 的情况下 masterauth主从都需要配置上,不配置从节点无法同步数据
masterauth "密码"
# 最大内存
maxmemory 5gb
注意:设置了密码需要特殊处理一下 client.rb 文件
否则执行创建集群 会提示 Sorry, can’t connect to node
需要修改
/usr/local/rvm/gems/ruby-2.4.1/gems/redis-3.2.0/lib/redis/client.rb
可能路径不同,find / -name client.rb找一下
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "xxxxxx",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}
添加或修改password就OK了,把 :password => “xxxxxx” 里的 xxxxxx 改为实际密码
4.创建集群
到redis安装目录下执行
–replicas 0 表每个主有几个从 0 表示没有从节点。
./redis-trib.rb create --replicas 1 127.0.0.1:3456 127.0.0.1:3457 127.0.0.01:3458 127.0.0.1:3459 127.0.0.1:3460 127.0.0.01:3461
关于主从节点的选择及槽的分配,其算法如下:
1> 把节点按照host分类,这样保证master节点能分配到更多的主机中。
2> 遍历host列表,从每个host列表中弹出一个节点,放入interleaved数组。直到所有的节点都弹出为止。
3> 将interleaved数组中前master个数量的节点保存到masters数组中。
4> 计算每个master节点负责的slot数量,16384除以master数量取整,这里记为N。
5> 遍历masters数组,每个master分配N个slot,最后一个master,分配剩下的slot。
6> 接下来为master分配slave,分配算法会尽量保证master和slave节点不在同一台主机上。对于分配完指定slave数量的节点,还有多余的节点,也会为这些节点寻找master。分配算法会遍历两次masters数组。
7> 第一次遍历master数组,在余下的节点列表找到replicas数量个slave。每个slave为第一个和master节点host不一样的节点,如果没有不一样的节点,则直接取出余下列表的第一个节点。
8> 第二次遍历是分配节点数除以replicas不为整数而多出的一部分节点。
执行命令完成后如下图所示,则集群创建成功。
5.附件
1.ruby 离线安装包 all.tar 下载地址:https://pan.baidu.com/s/14DleRZT4FOvfBHTUHDq0OA 密码:yevn
2.redis-3.2.0.gem
链接:https://pan.baidu.com/s/16sU-Fut5QwuioIzf3skFCQ 密码:0x9d
参考致谢
https://blog.csdn.net/xiaobo060/article/details/80616718 https://www.cnblogs.com/ivictor/p/9768010.html