前提
CentOS 7
默认已经完成redis单机安装
安装ruby2.3.0
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
进入目录执行
命令一:./configure --prefix=
命令二:make && make install
使用ruby -v 查看版本,如图则安装成功
安装redis
gem install redis
修改配置文件redis.conf
在redis安装目录创建文件cluster-conf/6379,cluster-conf/6380.
拷贝redis.conf 至cluster-conf/6379,cluster-conf/6380里面并修改配置
以6379端口为例(集群配置不分主从,其他端口/节点配置是一样的)
port 6379
bind 0.0.0.0(不限制IP,也可以直接注释这行配置)
protected-mode yes(保护模式 外网访问需配置bind ip或者设置访问密码)
daemonize yes(允许后台)
pidfile /var/run/redis_6379.pid
logfile "/usr/local/redis/redis-4.0.8/log/redis-6379.log"
dbfilename dump_6379.rdb
requirepass jt123(密码)
appendfilename "appendonly_6379.aof"
(以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。)
cluster-enabled yes(开启集群模式)
cluster-config-file nodes-6379.conf(确保在系统中实例没有重复集群配置文件名称)
cluster-node-timeout 15000(超时时间)
启动redis
3个服务器都要执行下面命令
redis-server ./cluster-conf/6379/redis.conf
redis-server ./cluster-conf/6380/redis.conf
确认效果,如下图则启动成功
构建集群
任何服务器节点执行下面命令(服务器ip)
redis-trib.rb create --replicas 1 1.14.69.85:6379 1.14.61.12:6380 139.155.1.12:6379 139.165.1.63:6380 139.155.39.298:6379 139.135.39.212:6380
确认效果,如下图则集群构建成功
连接测试
连接命令:redis-cli -c -h 139.135.1.23 -p 6379 -a jt123
坑点
1.创建redis集群报错:ERR Slot 0 is already busy (Redis::CommandError)
错误提示是说:slot插槽被占用了、这是因为 搭建集群前时,以前redis的旧数据和配置信息没有清理干净。
解决方案:用redis-cli 登录到每个节点执行 flushall 和 cluster reset 就可以了。
2.创建redis集群,Sorry, can't connect to node
原因:因为redis设置了密码
解决方案:
需要修改
/usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.1/lib/redis/client.rb
可能大家路径不一样,find / -name client.rb找一下,修改password
3.搭建Redis集群遇到的问题:Waiting for the cluster to join...
原因:集群端口没有开放,redis端口+10000
解决方案:如redis端口6379,集群时服务器必须开放16379端口
总结
redis5.0以下搭建集群需要安装ruby环境,这个有点麻烦。其他的有问题百度都能找到解决方案。