redis cluster集群搭建详细步骤

一、 简介
redis cluster是一个提供在多个redis间节点间共享数据的程序集。
redis 集群通过分区来提供一定程度的可用性:即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。
Redis 集群提供了以下两个好处:
(1)将数据自动切分(split)到多个节点的能力。
(2)当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。
二、搭建过程
1、前提条件
(1)要让集群正常工作至少需要3个主节点
(2)redis版本要在3.0.0以上
2、redis的安装
wget http://download.redis.io/redis-stable.tar.gz
tar xzvf redis-stable.tar.gz
cd redis-stable
make;make install
安装完,可执行程序被复制到/usr/local/bin目录中,如果出现安装时报错: error: jemalloc/jemalloc.h: No such file or
directory,则采用 make MALLOC=libc
3、redis cluster集群的搭建(本例子创建的是6个节点)
(1)创建集群所需要的目录
mkdir -p /usr/local/cluster
cd /usr/local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
备注:此例子搭建的集群均在同一台机器上
(2)修改配置文件redis.conf
cp redis.conf /usr/local/cluster
vi redis.conf
修改配置文件中的下面选项:
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
appendfilename "appendonly-7000.aof"
dir "/usr/local/cluster/7000"
修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面:
cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
sed 's/7000/7001/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7001/redis.conf
sed 's/7000/7002/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7002/redis.conf
sed 's/7000/7003/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7003/redis.conf
sed 's/7000/7004/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7004/redis.conf
sed 's/7000/7005/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7005/redis.conf
(3)启动6个实例
redis-server /usr/local/cluster/7000/redis.conf
redis-server /usr/local/cluster/7001/redis.conf
redis-server /usr/local/cluster/7002/redis.conf
redis-server /usr/local/cluster/7003/redis.conf
redis-server /usr/local/cluster/7004/redis.conf
redis-server /usr/local/cluster/7005/redis.conf
(4)创建集群
回到redis安装包目录,进入src,执行
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004
127.0.0.1:7005
执行命令的时候,可能会报错,错误内容:/usr/bin/env: ruby: No such file or directory,那是因为缺少ruby环境,需要安装
ruby环境,安装方式如下:
yum -y install ruby
再次执行可能还会报错,提示缺少rubygems组件,错误提示内容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
使用yum安装:
yum -y install rubygems
gem install redis
注:使用gem安装ruby的redis模块时,可能出现无法连接gem服务器,安装失败的情况,那么这时需要手工下载并安装,具体如下:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem
(5)集群动态添加节点或删除节点
集群添加节点
首先把需要添加的节点启动,
mkdir /usr/local/cluster/7006
sed 's/7000/7006/g' /usr/local/cluster/7000/redis.conf >/usr/local/cluster/7006/redis.conf
redis-server /usr/local/cluster/7006/redis.conf
接着,将新节点回到集群中,
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
执行redis-cli -c -p 7000 cluster nodes,查看新增节点信息
增加节点后,这个新节点可以成为主节点或从节点,
1> 把新节点变成主节点,则需要给这个节点分配一定的哈希槽,执行
./redis-trib.rb reshard 127.0.0.1:7000
系统会提示移动多少,这里移动1000
How many slots do you want to move (from 1 to 16384)? 1000
What is the receiving node ID?
指定这些移动出来的哈希槽移动哪个节点,而刚才查看节点信息最左侧的ID就是节点的ID,输入ID,然后输入all 表示从所有的
主节点中随机转移,凑够1000个哈希槽,再然后再输入yes,redis集群就开始分配哈希槽了。至此,一个新的主节点就添加完成了,再次
查看节点信息
redis-cli -c -p 7000 cluster nodes
2> 把某一节点变成从节点,则执行(假设7006已加入到集群里头,并且是master,它的节点ID
是8ea10090316b33042176557866db21229074d6e1)
redis-cli -c -p 7003 cluster replicate 8ea10090316b33042176557866db21229074d6e1
集群删除节点
如果删除的节点是主节点,则首先要将这个节点的哈希槽转移到其它节点,执行命令:
./redis-trib.rb reshard 127.0.0.1:7000
How many slots do you want to move (from 1 to 16384)? 1000 #被删除的slot数量
What is the receiving node ID? c62d68a6c7c9e08283f1dffc397b099181a60129 #接收slot的节点ID
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:8ea10090316b33042176557866db21229074d6e1#被删除的节点ID
Source node #2:done
然后再执行删除节点命令:
./redis-trib.rb del-node 127.0.0.1:7006 8ea10090316b33042176557866db21229074d6e1
如果删除的节点是从节点,则直接执行删除节点命令。

你可能感兴趣的:(redis cluster集群搭建详细步骤)