Redis集群部署文档

Redis集群部署文档

环境:centos6系统

(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)
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
 

1:下载redis。

官网下载3.0.0版本,之前2.几的版本不支持集群模式

下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz

2:上传服务器,解压,编译

tar -zxvf redis-3.0.0-rc2.tar.gz 
mv redis-3.0.0-rc2.tar.gz redis3.0
cd /usr/local/redis3.0
make
make install

3:创建集群需要的目录

mkdir -p /usr.local/cluster
cd /usr.local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005

4:修改配置文件redis.conf

cp /usr/local/redis3.0/redis.conf  /usr.local/cluster
vi redis.conf
##修改配置文件中的下面选项
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面
cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
cp /usr/local/cluster/redis.conf /usr/local/cluster/7002
cp /usr/local/cluster/redis.conf /usr/local/cluster/7003
cp /usr/local/cluster/redis.conf /usr/local/cluster/7004
cp /usr/local/cluster/redis.conf /usr/local/cluster/7005
 
##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称
 

5:分别启动这6个redis实例

cd /usr/local/cluster/7000
redis-server redis.conf
cd /usr/local/cluster/7001
redis-server redis.conf
cd /usr/local/cluster/7002
redis-server redis.conf
cd /usr/local/cluster/7003
redis-server redis.conf
cd /usr/local/cluster/7004
redis-server redis.conf
cd /usr/local/cluster/7005
redis-server redis.conf
 
 
##启动之后使用命令查看redis的启动情况ps -ef|grep redis
如下图显示则说明启动成功
 

6:执行redis的创建集群命令创建集群

cd /usr/local/redis3.0/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

--replicas 1 是我们希望每个创建的主服务器有一个从服务器

6.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby
 
6.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装
 
错误内容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems
6.3再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
错误内容:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
 
gem install redis
 
6.4 再次执行第6步的命令,正常执行
 
输入yes,然后配置完成。
 

至此redis集群即搭建成功!

备注:


/usr/local/redis3.0/redis-trib.rb create --replicas 1 10.24.144.213:6379 10.24.144.214:6379 <span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.215</span><span style="font-family: Arial, Helvetica, sans-serif;">:6379 </span><span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.213:6380 10.24.144.214:6380 </span><span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.215</span><span style="font-family: Arial, Helvetica, sans-serif;">:6380</span><pre name="code" class="plain">这个命令是设置一个主带一个从,而且哪个是主节点,哪个是从节点我们无法确定,由系统选举产生
/usr/local/redis3.0/redis-trib.rb create 10.24.144.213:6379 10.24.144.214:6379 10.24.144.215 :6379

 
这个命令是指定三个节点,且都是主节点,然后用下面的命令为每个主节点加一个从节点,
/usr/local/redis3.0/redis-trib.rb add-node --slave --master-id d349ef5dce418fb15fdce87985387073327ccc60 <span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.213</span><span style="font-family: Arial, Helvetica, sans-serif;">:6380 </span><span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.214</span><span style="font-family: Arial, Helvetica, sans-serif;">:6379</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>/usr/local/redis3.0/redis-trib.rb add-node --slave --master-id 0170d6b5c6379f2f92d2830c1c3893d1161b940c <span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.214</span><span style="font-family: Arial, Helvetica, sans-serif;">:6380 </span><span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.215</span><span style="font-family: Arial, Helvetica, sans-serif;">:6379</span>
/usr/local/redis3.0/redis-trib.rb add-node --slave --master-id ff4854ade2f6c1631ae81dfb3c4aa3d1cd673246 <span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.215</span><span style="font-family: Arial, Helvetica, sans-serif;">:6380 </span><span style="font-family: Arial, Helvetica, sans-serif;">10.24.144.213</span><span style="font-family: Arial, Helvetica, sans-serif;">:6379</span>
/usr/local/redis3.0/redis-trib.rb check 10.24.144.213:6379
IP非真实IP

7:使用redis-cli命令进入集群环境

redis-cli -c -p 7000

8:cluster nodes 查看集群信息

127.0.0.1:7000> cluster nodes  

9:集群管理

检查集群状态

#redis-trib.rb的check子命令构建   
#ip:port可以是集群的任意节点   
./redis-trib.rb check 1 127.0.0.1:7000   
最后输出如下信息,没有任何警告或错误,表示集群启动成功并处于ok状态

添加新master节点

添加一个master节点:
创建一个空节点(empty node),然后将某些slot移动到这个空节点上,这个过程目前需要人工干预
先启动节点
加入空节点到集群  add-node  将一个节点添加到集群里面, 第一个是新节点ip:port, 第二个是任意一个已存在节点ip:port     
redis-trib.rb add-node 10.10.34.14:6386 10.10.34.14:6381 
node:新节点没有包含任何数据, 因为它没有包含任何slot。新加入的加点是一个主节点, 当集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中  

为新节点分配slot
redis-trib.rb reshard 10.10.34.14:6386    
#根据提示选择要迁移的slot数量(ps:这里选择500)   
How many slots do you want to move (from 1 to 16384)? 500   
#选择要接受这些slot的node-id    
What is the receiving node ID? f51e26b5d5ff74f85341f06f28f125b7254e61bf   
#选择slot来源:    
#all表示从所有的master重新分配,    
#或者数据要提取slot的master节点id,最后用done结束   
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    
#打印被移动的slot后,输入yes开始移动slot以及对应的数据.   
#Do you want to proceed with the proposed reshard plan (yes/no)? yes   
#结束    

添加新的slave节点 

a):前三步操作同添加master一样  
b)第四步:redis-cli连接上新节点shell,输入命令:cluster replicate 对应master的node-id     
cluster replicate 2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835      
note:在线添加slave时,需要dump整个master进程,并传递到slave,再由slave加载rdb文件到内存,rdb传输过程中Master可能无法提供服务,整个过程消耗大量io,小心操作.  例如本次添加slave操作产生的rdb文件

在线reshard 数据:  
对于负载/数据均匀的情况,可以在线reshard slot来解决,方法与添加新master的reshard一样,只是需要reshard的master节点是老节点. 

删除一个slave节点


#redis-trib del-node ip:port '<node-id>'   
redis-trib.rb  del-node  10.10.34.14:7386  'c7ee2fca17cb79fe3c9822ced1d4f6c5e169e378'    

删除一个master节点    

a):删除master节点之前首先要使用reshard移除master的全部slot,然后再删除当前节点(目前只能把被删除 master的slot迁移到一个节点上)
#把10.10.34.14:6386当前master迁移到10.10.34.14:6380上   
redis-trib.rb reshard 10.10.34.14:6380    
#根据提示选择要迁移的slot数量(ps:这里选择500)    
How many slots do you want to move (from 1 to 16384)? 500(被删除master的所有slot数量)    #选择要接受这些slot的node-id(10.10.34.14:6380)    
What is the receiving node ID? c4a31c852f81686f6ed8bcd6d1b13accdc947fd2 (ps:10.10.34.14:6380的node-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:f51e26b5d5ff74f85341f06f28f125b7254e61bf(被删除master的node-id)    Source node #2:done  
#打印被移动的slot后,输入yes开始移动slot以及对应的数据.   
#Do you want to proceed with the proposed reshard plan (yes/no)? yes      
b):删除空master节点
redis-trib.rb del-node 10.10.34.14:6386  'f51e26b5d5ff74f85341f06f28f125b7254e61bf'

服务重启自启动及集群配置

由于每个redis实例没有采用服务自启动的方式,虽然也可以象3.0之前让每个服务以服务的方式自启动,也可以象下面这样让它自启动

initredis.sh 
/usr/redis3.0/cluster/7000/redis-server /usr/redis3.0/cluster/7000/redis.conf
/usr/redis3.0/cluster/7001/redis-server /usr/redis3.0/cluster/7001/redis.conf
/usr/redis3.0/cluster/7002/redis-server /usr/redis3.0/cluster/7002/redis.conf
/usr/redis3.0/cluster/7003/redis-server /usr/redis3.0/cluster/7003/redis.conf
/usr/redis3.0/cluster/7004/redis-server /usr/redis3.0/cluster/7004/redis.conf
/usr/redis3.0/cluster/7005/redis-server /usr/redis3.0/cluster/7005/redis.conf 

initcluster.sh
/usr/redis3.0/cluster/7000/redis-trib.rb  create --replicas 1 192.168.1.116:6379 192.168.1.116:7001 192.168.1.116:7002 192.168.1.116:7003 192.168.1.116:7004 192.168.1.116:7005
/usr/redis3.0/cluster/7000/redis-trib.rb check 192.168.1.116:6379

再把这initredis.sh脚本加到 /etc/rc.local 后面,即可开机启动redis,集群配置只要配置一次就行了,以后重启服务器或服务都不用再设置集群信息。各个节点中保存着集群配置信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值