前言
搭建集群需要6个点,我是3台虚拟机每台两个实例(根据自己的资源而定)
本文redis采用当前官网最新版本 redis-4.0.9
虚拟机系统 Centos7.4
- 集群功能限制
1:key批量操作支持有限
2:key事物操作支持有限
3:不支持多数据库空间,单机下redis可以支持16(0-15)个库,集群模式下只能使用一个数据库空间,即 db0 .
4:复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制
5:key作为数据分区的最小粒度,因此不能将一个大的键值对象如 hash 、list等映射到不同的节点。
1:各节点安装redis
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
2:解压编译安装
tar -zxvf redis-4.0.9.tar.gz //解压
cd redis-4.0.9 //进入解压后的目录
make && make install //编译安装
3:创建 Redis 节点
分别在每台虚拟机/opt/redis-4.0.9/ 下创建 redis_cluster
mkdir redis_cluster
cp /opt/redis-4.0.9/redis.cof /opt/redis_cluster/redis01.conf
cp /opt/redis-4.0.9/redis.cof /opt/redis_cluster/redis02.conf
每台机器配置两个redis实例文件,修改端口等信息
各节点配置文件进行以下修改:
port 7001 //其余5个点端口7002,7003,7004,7005,7006
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7001.pid //pidfile文件
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 15000 //请求超时,默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
4:启动全部节点
可以看到3台虚拟机每个机器2个节点都启动起来了。
5:创建集群(方法一)
- Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。
redis-trib.rb create --replicas 1 10.30.X.X:7001 10.30.X.X:7002 10.30.X.X:7003 10.30.X.X:7004 10.30.X.X:7005 10.30.X.X:7006
- –replicas 1 表示指定每个master创建1个从节点。
执行时如果遇到 /usr/bin/env: ruby: No such file or directory 报错
由于这个工具是用 ruby 实现的,所以需要安装 ruby。
安装ruby:
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
redis4.0之后需要 redis requires Ruby version >= 2.2.2
所以需要去官网拉取新的ruby包。
http://www.ruby-lang.org/en/downloads/
再次运行命令:
redis-trib.rb create --replicas 1 10.30.X.X:7001 10.30.X.X:7002 10.30.X.X:7003 10.30.X.X:7004 10.30.X.X:7005 10.30.X.X:7006
输入 yes 即可,然后出现如下内容,说明安装成功。
到这一步集群就算搭建完成 ,现在就可以登录到集群进行操作验证。
6:创建集群(方法二)
通过Gossip协议彼此通信握手,达到感知对方的存在。
命令:cluster meet x.x.x.x 7002
节点握手之后集群还不能正常工作,这时集群处于下线状态,所有数据读写都被禁止。
可以看到当前所有插槽没有分配到节点,因此集群无法完成槽到节点的映射。只有当16384个槽全部分配给节点后,集群才进入在线状态。
6.1:分配槽
命令(登录要分配曹位的节点):cluster addslots {0...5461}
(分配0-5461槽位给当前机器)
6.2:添加从节点
命令:cluster replicate 主节点ID
例:127.0.0.1:7001> cluster replicate 2db18763b42040c76b1832e5b06c43bb5b78089f