蜗牛技术团队我爱编程

Redis主备集群配置(ruby安装)

2017-06-28  本文已影响1985人  刘一一同学

注意:如果想在公网上访问集群,建立集群的时候使用公网地址(123.56.3.208为我的公网地址),例如

./redis-trib.rb create --replicas 1 123.56.3.208:7501 123.56.3.208:7502 123.56.3.208:7503 123.56.3.208:7504 123.56.3.208:8501 123.56.3.208:8502 123.56.3.208:8503 123.56.3.208:8504

1、下载文件

$ wget http://download.redis.io/releases/redis-3.0.3.tar.gz

$ tar xzvf redis-3.0.3.tar.gz

$ cd redis-3.0.3 

make all & cd src & make installprefix=/home/liubowei/redis-cluster

2、复制redis.conf 7501、7502、7503、7504、8501、8502、8503、8504

$ cd  /home/liubowei/redis-cluster

$ mkdir config

$ cp /home/liubowei/redis-3.0.3/redis.conf  /home/liubowei/redis-cluster/config

$ cd config

$ mv  redis.conf  redis7001.conf

$ cp  redis7001.conf  redis7002.conf

$ cp  redis7001.conf  redis7003.conf

$ cp  redis7001.conf  redis7004.conf

3、修改配置文件redis7501.conf、redis7502.conf、redis7503.conf、redis7504.conf、redis8501.conf、redis8502.conf、redis8503.conf、redis8504.conf

port 7501                              #7501、7502、7503、7504、8501、8502、8503、8504daemonize yes

cluster-enabled yes

cluster-config-file nodes-7501.conf      #7501、7502、7503、7504、8501、8502、8503、8504cluster-node-timeout 15000

4、启动redis

$ redis-server  ../config/redis7501.conf

$ redis-server  ../config/redis7502.conf

$ redis-server  ../config/redis7503.conf

$ redis-server  ../config/redis7504.conf

$ redis-server  ../config/redis8501.conf

$ redis-server  ../config/redis8502.conf

$ redis-server  ../config/redis8503.conf

$ redis-server  ../config/redis8504.conf

5、安装redis-trib所需要的ruby脚本,复制redis解压文件src下的redis-trib.rb文件到redis-cluster目录

$ cp /home/liubowei/redis-3.0.3/src/redis-trib.rb  /home/liubowei/redis-cluster/

6、安装ruby环境

$ yum install ruby

$ yum install rubygems

7、安装redis-trib.rb运行依赖的ruby的包redis-3.2.2.gem,下载地址

$ gem install redis-3.2.2.gem

8、使用redis-trib.rb创建集群(自动分配slot)

$ ./redis-trib.rb create --replicas 1 127.0.0.1:7501 127.0.0.1:7502 127.0.0.1:7503 127.0.0.1:7504 127.0.0.1:8501 127.0.0.1:8502 127.0.0.1:8503 127.0.0.1:8504

如果安装未成功报如下错误

>>> Creating cluster

>>> [ERR] Sorry, can't connect to node  ....

9、需要安装最新的ruby源码,下载地址

$ tar -zxvf ruby-2.3.1.tar.gz

$ ./configure --prefix=/usr/local/ruby-2.3.1

$ make && make install

$ gem install redis

节点扩容

10.1  增加主节点

$ ./redis-trib.rbadd-node127.0.0.1:7505 127.0.0.1:8501

注:7505为新增主节点;8501为任意集群节点;

10.2  分配卡槽

$ ./redis-trib.rb reshard 127.0.0.1:8501

注:8501为任意集群节点;由于新增节点每有分配卡槽,需要手动分配。

它提示我们需要迁移多少slot到7007上,我们平分16384个哈希槽给5个节点:16384/5 = 3276,我们需要移动3276个槽点到7505上。

[OK] All 16384 slots covered.

How many slots do you want to move (from 1 to 16384)? 3276

What is the receiving node ID?

需要输入7505的节点id,fa491b1b7792cffca83e6b37df8348789028f67b

Please enter all the source node IDs.

Type 'all' to use all the nodes as source nodes for the hash slots.

Type 'done' once you entered all the source nodes IDs.

Source node #1: all

redis-trib 会向你询问重新分片的源节点(source node),即,要从特点的哪个节点中取出 3276个哈希槽,还是从全部节点提取3276个哈希槽, 并将这些槽移动到7505节点上面。

如果我们不打算从特定的节点上取出指定数量的哈希槽,那么可以向redis-trib输入all,这样的话, 集群中的所有主节点都会成为源节点,redis-trib从各个源节点中各取出一部分哈希槽,凑够3276个,然后移动到7505节点上:

slots:4096-4907 8192-9004 12288-13099

可以看到7007节点分片的哈希槽片不是连续的,间隔的移动。

11、增加从节点

redis-trib增加从节点的命令为:./redis-trib.rbadd-node --slave --master-id$[nodeid] 127.0.0.1:8505 127.0.0.1:8501

$ ./redis-trib.rb add-node --slave --master-id fa491b1b7792cffca83e6b37df8348789028f67b 127.0.0.1:8505 127.0.0.1:8501

注:8505为新增从节点;8501为任意集群节点;如果没有指定--master-id的话,redis-trib将会新增的从节点将会随机到节点较少的主节点上。

节点移除

12.1  移除主节点

移除节点使用redis-trib的del-node命令:./redis-trib del-node 127.0.0.1:7504${node-id}

注:7504为任一集群节点;${node-id}为要移除节点的hash值(我们要移除7505主节点)

$./redis-trib.rb del-node 127.0.0.1:7504fa491b1b7792cffca83e6b37df8348789028f67b

如果提示以下错误,说明该节点存的有数据,需要将它的数据转移出去,也就是和新增节点一样需要重新分片。

[ERR] Node 127.0.0.1:7505 is not empty! Reshard data away and try again.

检查要移除节点占用多少卡槽:./redis-trib.rb check 127.0.0.1:7505

重新分配卡槽:./redis-trib.rb reshard 127.0.0.1:8501  #8501为任一集群节点

[OK] All 16384 slots covered.

How many slots do you want to move (from 1 to 16384)? 3276

What is the receiving node ID?  (输入要接收卡槽的主节点7501hash值)

Please enter all the source node IDs.

Type 'all' to use all the nodes as source nodes for the hash slots.

Type 'done' once you entered all the source nodes IDs.

Source node #1: a2529e7ac50fd05a3fcefe96b9e04e00c1a0a08e (输入要释放卡槽的主节点7505hash值)

Source node #2: done

确认之后会一个一个将70505的卡槽移到到7501上。

最后执行:$./redis-trib.rb del-node 127.0.0.1:7504fa491b1b7792cffca83e6b37df8348789028f67b

12.2  移除从节点

例如删除7504主节点下的8505从节点:

$./redis-trib.rb del-node 127.0.0.1:7504  c7d524e8a68e524d48288bbe9ebedd879661dd92

注:7504为任一集群节点;${node-id}为要移除节点的hash值(我们要移除8505主节点)

上一篇下一篇

猜你喜欢

热点阅读