1,Redis集群安装
1,下载并解压到/usr/local/redis目录下
wget http://download.redis.io/releases/redis-3.2.3.tar.gz
tar -zxvf redis-3.2.3.tar.gz
mv redis-3.2.3 /usr/local/redis
cd /usr/local/redis
make
make install
2,创建集群目录(以每台机器两个redis为例)
mkdir /usr/local/redis-cluster
cd redis-cluster/
mkdir -p 7001/data 7002/data
3,将redis复制到集群每个实例下,并修改每个redis.conf
cp -r /usr/local/redis/* /usr/local/redis-cluster/7001
cp -r /usr/local/redis/* /usr/local/redis-cluster/7002
vim redis.conf
port 7001 //端口7001,7002 ......
bind 192.168.*.* //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端
daemonize yes //redis后台运行
dir /usr/local/redis-cluster/7001/data/ //数据文件存放位置
pidfile /var/run/redis_7001.pid //pid 7001和port要对应
cluster-enabled yes //开启集群
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成7001,7002,7
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //数据转移的时候必须开启,aof日志开启 有需要就开启,它会每次写操作都记录一条日志
4,集群需要ruby
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -SSL https://get.rvm.io | bash -s stable
find / -name rvm –print
//使rvm生效
source /usr/local/rvm/scripts/rvm
//查看rvm已知ruby
rvm list known
//安装一个ruby版本
rvm install 2.3.4
//使用一个ruby版本
rvm use 2.3.4
//设置默认版本
rvm use 2.3.4 --default
//安装到Redis
gem install redis
5,创建集群(每个节点不能含有数据)
--replicas 1主从复制比例为 1:1
redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.*.*:7001 ...
6,单机数据迁移到集群
- 连接到单机,执行
BGREWRITEAOF
- 将卡槽全部分配一个节点上
//查看哈希槽分配情况
redis-trib.rb check 192.168.*.*:port
//将节点都迁移到一个主节点上
redis-trib.rb reshard 192.168.*.*:port(要迁移的节点)
How many slots do you want to move (from 1 to 16384)? 5462(迁移多少槽)
What is the receiving node ID? 071ca1edd4552f8992ae181c9cad432c5d5ccab9
(接收迁移卡槽的节点id)
Source node #1:64df48ff73279f8a667c295487036c6af2ba1342 (移出去的节点id)
Source node #2:done
-
先停掉集群,然后把单实例节点的aof文件和dump文件拷到192.168.的节点对应的目录下。启动集群,查看数据
-
重新分配哈希槽数据
//把节点192.168.56.91上的5461个slots移动节点192.168.56.93上
./redis-trib.rb reshard --from c5f8550043708e27e659a0a5ecdf44264d1b3e41(从哪的id) --to 00fb26359103a3dd7b55b4cfbe3e1984cc2f2387(到哪的id) --slots 5461 --yes 192.168.56.91:7001(有哈希槽的节点 从哪的节点)
这里会出现的问题:
- [ERR] Calling MIGRATE: ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)
原因:ruby 版本问题 换3.X版本
解决方法:
gem uninstall redis
gem install redis -v 3.3.5
- [WARNING] Node 192.168.30.6:7001 has slots in migrating state (0).
原因:上面分配错误导致
解决方法: 连接到对应节点,执行cluster setslot 0 stable
0就是上面的错误提示0
7,建立主从节点
redis-trib.rb add-node --slave --master-id c5f8550043708e27e659a0a5ecdf44264d1b3e41(主id)192.168.56.91:7379(从) 192.168.56.91:7379(主)