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,集群配置只要配置一次就行了,以后重启服务器或服务都不用再设置集群信息。各个节点中保存着集群配置信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一种高效的内存数据库,它支持多种数据结构,如字符串、列表、哈希表、集合等。Redis集群Redis的一种高可用性解决方案,可以实现数据的分布式存储和负载均衡。下面是Redis集群部署的详细过程: 1. 安装Redis Redis安装可以通过源码编译或者包管理器安装。在Ubuntu系统上,可以使用以下命令安装Redis: ``` sudo apt-get update sudo apt-get install redis-server ``` 2. 配置RedisRedis的配置文件中,需要配置集群的节点数量、端口号等信息。在Ubuntu系统上,Redis的配置文件位于/etc/redis/redis.conf。需要修改以下参数: ``` bind 0.0.0.0 port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 其中,bind参数指定Redis绑定的IP地址;port参数指定Redis监听的端口号;cluster-enabled参数启用Redis集群模式;cluster-config-file参数指定集群配置文件的路径;cluster-node-timeout参数指定节点超时时间;appendonly参数启用持久化。 3. 创建Redis集群 使用Redis自带的脚本redis-trib.rb可以轻松地创建Redis集群。在Ubuntu系统上,脚本位于/usr/share/redis/tools/redis-trib.rb。需要使用以下命令创建集群: ``` ./redis-trib.rb create --replicas 1 IP1:PORT1 IP2:PORT2 IP3:PORT3 IP4:PORT4 IP5:PORT5 IP6:PORT6 ``` 其中,--replicas参数指定每个主节点的从节点数量;IP1:PORT1等参数指定每个节点的IP地址和端口号。 4. 测试Redis集群 使用redis-cli命令可以连接到Redis集群并进行测试。需要使用以下命令连接到集群: ``` redis-cli -c -h IP1 -p PORT1 ``` 其中,-c参数指定使用集群模式;-h参数指定连接的IP地址;-p参数指定连接的端口号。 可以使用以下命令测试集群: ``` set key1 value1 get key1 ``` 其中,set命令设置key1的值为value1;get命令获取key1的值。如果集群配置正确,操作应该成功。 5. 扩展Redis集群Redis集群需要扩展时,可以使用以下步骤: 1)安装Redis和配置文件; 2)启动新节点并加入集群: ``` ./redis-cli --cluster add-node NEW_IP:NEW_PORT EXISTING_NODE_IP:EXISTING_NODE_PORT --cluster-slave --cluster-master-id MASTER_NODE_ID ``` 其中,NEW_IP和NEW_PORT参数指定新节点的IP地址和端口号;EXISTING_NODE_IP和EXISTING_NODE_PORT参数指定现有节点的IP地址和端口号;--cluster-slave参数指定新节点为从节点;--cluster-master-id参数指定新节点的主节点ID。 3)将新节点的从节点数量设置为1: ``` ./redis-cli --cluster replicate NEW_NODE_ID MASTER_NODE_ID ``` 其中,NEW_NODE_ID参数指定新节点的ID;MASTER_NODE_ID参数指定新节点的主节点ID。 4)重新分配槽位: ``` ./redis-cli --cluster reshard NEW_NODE_ID --cluster-from MASTER_NODE_ID --cluster-slots COUNT --cluster-yes ``` 其中,NEW_NODE_ID参数指定新节点的ID;MASTER_NODE_ID参数指定新节点的主节点ID;--cluster-slots参数指定新节点需要接收的槽位数量;--cluster-yes参数确认操作。 5)等待槽位重新分配完成。 6)测试新节点。 参考文献: 1. Redis官方文档:https://redis.io/documentation 2. Redis集群指南:https://redis.io/topics/cluster-tutorial

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值