您的位置:首页 > 数据库 > Redis

Redis集群详细搭建

2019-03-20 08:57 134 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/LJJ1512/article/details/88679834

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,单机数据迁移到集群

  1. 连接到单机,执行
    BGREWRITEAOF
  2. 将卡槽全部分配一个节点上
//查看哈希槽分配情况
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
  1. 先停掉集群,然后把单实例节点的aof文件和dump文件拷到192.168.的节点对应的目录下。启动集群,查看数据

  2. 重新分配哈希槽数据

//把节点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(主)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: