Redis集群
集群准备
- 下载并解压Resis:
wget http://download.redis.io/releases/redis-4.0.0.tar.gz
- 进入Redis目录下
make && make install
可能会报错
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
原因是没有gcc,安装gcc就好yum install gcc
建议下版本高一点的
- 将
/opt/redis-4.0.0/src/redis-trib.rb
复制到/usr/local/bin
- 在
/opt/redis-4.0.0/
目录下创建redis_cluster
- 在
/opt/redis-4.0.0/redis_cluster
下创建7001,7002,7003节点目录 - 拷贝
/opt/redis-4.0.0/redis.conf
到节点目录
[root@localhost redis-4.0.0]# cp redis.conf redis_cluster/7000
[root@localhost redis-4.0.0]# cp redis.conf redis_cluster/7001
[root@localhost redis-4.0.0]# cp redis.conf redis_cluster/7002
- 分别修改这3个目录下的redis.conf配置文件
port 7000 //端口7000,7002,7003
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
- 在例外一台机器上进行上步操作,端口为7003,7004,7005
- 启动2个服务器的redis
redis-server /opt/redis-4.0.0/redis_cluster/7000/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7001/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7002/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7003/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7004/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7005/redis.conf
- 查看2台服务器的Redis是否开启
ps -ef| grep redis
集群开始
- 这里使用到
/opt/redis-x.x.x/src/redis-trib.rb
,但是redis-trib.rb是使用ruby写的,这里还要下载ruby工具:yum -y install ruby ruby-devel rubygems rpm-build
- 使用gem安装redis接口
gem install redis
- 可能会遇到的问题
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
- 解决方案
1.安装curl
sudo yum install curl
2. 安装RVM
curl -L get.rvm.io | bash -s stable
3.
source /usr/local/rvm/scripts/rvm
4. 查看rvm库中已知的ruby版本
rvm list known
5. 安装一个ruby版本
rvm install 2.3.3
6. 使用一个ruby版本
rvm use 2.3.3
7. 设置默认版本
rvm remove 2.0.0
8. 卸载一个已知版本
ruby --version
9. 再安装redis就可以了
gem install redis
- create (确保每个redis都是启动的)
/opt/redis-4.0.0/src/redis-trib.rb create --replicas 1 192.168.115.132:7000 192.168.115.132:7001 192.168.115.132:7002 192.168.115.130:7003 192.168.115.130:7004 192.168.115.130:7005
- 注意补充
–replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)防火墙一定要开放监听的端口,否则会创建失败。 - 可能出现问题
[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.115.132:7000 192.168.115.132:7001 192.168.115.132:7002 192.168.115.130:7003 192.168.115.130:70
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.115.130:7003
解决方案:另外一服务器机子7003端口没有对外开放
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
firewall-cmd --reload
最后你会发现终究OK了
- 这可能是最后一个坑
集群一直处于等待状态
Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...........
在/etc/profil/iptables中添加开放端口
- 如果上面失败,清楚每个Redis中的缓存文件,例如我的在:
/opt/redis-4.0.0/redis_cluster/7000目录下的 *.aof nodes* 等文件:rm -rf *.aof nodes*
集群开启与关闭
Redis集群没有重启或者关闭操作,解决方案,清楚数据重新集群
rm -rf **/*.aof **/*.rdb **/nodes*
/opt/redis-4.0.0/src/redis-trib.rb create --replicas 1 192.168.115.132:7000
192.168.115.132:7001
192.168.115.132:7002
192.168.115.130:7003
192.168.115.130:7004
192.168.115.130:7005