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

04redis集群搭建

2017-08-28 11:52 295 查看

1.搭建步骤

搭建集群至少需要三个master和三个slave

a. 按照之前创建的虚拟机,再完整克隆几个

b. 将所有/usr/local/redis/etc/redis.conf 文件进行修改



c. 下载ruby : yum install ruby 和 yum install rubygems 和gem install redis (安装redis和ruby的接口)

d. 创建集群:

/usr/local/redis-3.0.0/src/redis-trib.rb create –replicas 1 192.168.137.3:7003 192.168.137.4:7004 192.168.137.5:7005 192.168.137.6:7006 192.168.137.7:7007 192.168.137.8:7008

e. 查看集群信息

netstat -tunpl | grep redis

–replicas 1 : 配置参数,1是主节点和从节点的比例:主节点 / 从节点 = 1

f. 连接任意客户端

/usr/local/redis/bin/redis-cli -c -h 192.168.137.3 -p 7003 (-c表示集群模式,-p指定端口号)

cluster info (查看集群信息) cluster nodes (查看列表)

集群需要逐个关闭:./redis-cli -c -h 192.168.137.3 -p 7003 shutdown

g. 补充

当集群无法启动时,删除临时的数据文件,再次重新启动每个redis,重新构造集群环境

数据不一定存储3个主节点中的哪一个节点,但是不论在哪个主节点都会访问到你想指定的数据

取消集群的时候:将所有 etc/ 下的nodes-7001.conf 删除,之后就可以重新创建集群

2.添加节点

1.添加主节点

添加主节点

克隆一个主节点机器,并将redis.conf像之前那样进行修改,然后启动服务并查看

使用redis-trib命令

使用add-node,前面是新增节点,后面是已有节点

/usr/local/redis3.0/src/redis-trib.rb add-node 192.168.1.171:7007 192.168.1.171:7001

查看集群状态

/usr/local/redis/bin/redis-cli -c -h 192.168.1.171 -p 7001

192.168.1.171:7001> cluster nodes

注意:当添加节点成功以后,新增的节点不会有任何数据,因为它没有分配任何的slot(hash槽)。我们需要为新节点手工分配slot

新主节点分配slot槽(从7001主节点分配一些出来,给新的主节点)

使用redis-trib命令,/usr/local/redis3.0/src/redis-trib.rb reshard 192.168.1.171:7001

a. 提示一:How many slots do you want to move (from 1 to 16384)? 200

b. 提示二:What is the receiving node ID? 382634a4025778c040b7213453fd42a709f79e28(输入心新节点的ID,好知道槽分配到哪个节点)

c. 提示三:Do you want to proceed with the proposed reshard plan (yes/no)? yes

2. 添加从节点

还是需要执行add-node命令

/usr/local/redis3.0/src/redis-trib.rb add-node 192.168.1.171:7008 192.168.1.171:7001

提示添加成功后我们继续看一下集群的状态,但还是一个master节点,没有被分配任何的slot槽

执行replicate命令来指定当前节点(从节点)的主节点id为哪个

a. 首先需要登录新加的7008节点的客户端,然后使用集群命令进行操作,把当前的7008(slave)节点指定到一个主节点下

b. /usr/local/redis/bin/redis-cli -c -h 192.168.1.171 -p 7008

c. cluster replicate 382634a4025778c040b7213453fd42a709f79e28 (主节点ID)

d. OK(提示OK则操作成功)

相当于水平扩容,数据库依旧可以使用,不会影响性能

3.删除节点

1. 删除从节点

删除从节点7008,输入del-node命令,指定删除节点ip和端口,以及节点id

/usr/local/redis3.0/src/redis-trib.rb del-node 192.168.1.171:7008 97b0e0115326833724eb0ffe1d0574ee34618e9f

再次查看一下集群状态,如下图所示,我们已经成功的移除了7008 slave节点,另外我们发现移除一个节点以后,当前节点的服务进程也会随之销毁。可以使用ps命令查看当前的服务(ps -el | grep redis),发现少了一个运行的server,也就是刚移除的7008从节点

2.删除主节点

删除这个步骤会相对比较麻烦一些,因为主节点的里面是有分配了slot槽的,所以我们这里必须先把7007里的slot槽放入到其他的可用主节点中去,然后再进行移除节点操作才行,不然会出现数据丢失问题

1. 删除7007(master)节点之前,我们需要先把其全部的数据(slot槽)移动到其他节点上去(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能)

/usr/local/redis3.0/src/redis-trib.rb reshard 192.168.1.171:7007

a. 提示一:How many slots do you want to move (from 1 to 16384)? 199(注释:这里不会是正好200个槽)

b. 提示二:What is the receiving node ID? 614d0def75663f2620b6402a017014b57c912dad(这里是需要把数据移动到哪?7001的主节点id)

c. 提示三:Source node #1:382634a4025778c040b7213453fd42a709f79e28(这里是需要数据源,也就是我们要删除的7007节点id)

d. 提示四:Source node #2:done(这里直接输入done 开始生成迁移计划)

e. 提示五:Do you want to proceed with the proposed reshard plan (yes/no)? Yes

到此为止我们已经成功的把7007主节点的数据迁移到7001上去了,我们可以看一下现在的集群状态如下图,你会发现7007下面已经没有任何数据(slot)槽了,证明迁移成功

2. 直接使用del-node命令删除7007主节点即可

a. /usr/local/redis3.0/src/redis-trib.rb del-node 192.168.1.171:7007 382634a4025778c040b7213453fd42a709f79e28

3. 最后,我们查看集群状态,一切还原为最初始状态啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis