文档章节

redis cluster的搭建

stone_
 stone_
发布于 2017/03/14 18:46
字数 1238
阅读 26
收藏 0

目的:在一台上模拟搭建cluster

要让集群正常工作至少需要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. 前期安装配置工作

[root@localhost src]# cd /tmp
[root@localhost tmp]# wget https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz 

[root@localhost tmp]# tar -zxvf 3.0.0-rc2.tar.gz redis3
[root@localhost tmp]# mv redis3 /usr/local/
[root@localhost tmp]# cd /usr/local/redis3

[root@localhost redis3]# mkdir ../cluster
[root@localhost redis3]# cd ../cluster
[root@localhost cluster]# mkdir 7000 7001 7002 7003 7004 7005
[root@localhost cluster]# cp ../redis3/redis.conf ./7000
[root@localhost cluster]# cp ../redis3/redis.conf ./7001
[root@localhost cluster]# cp ../redis3/redis.conf ./7002
[root@localhost cluster]# cp ../redis3/redis.conf ./7003
[root@localhost cluster]# cp ../redis3/redis.conf ./7004
[root@localhost cluster]# cp ../redis3/redis.conf ./7005

[root@localhost cluster]# cd 7000
[root@localhost 7000]# vim redis.conf

#依次修改下面的选项
port 7000  #对应的端口号 
daemonize yes  #在后台运行
cluster-enabled yes 
cluster-config-file nodes-对应的端口号.conf #建议将主机地址127.0.0.1和主机的实际IP或局域网地址都绑定 
appendonly yes
bing 127.0.0.1


2. 由于cluster集群管理脚本依赖ruby,所以要先安装

[root@localhost 7000]# cd /usr/local/redis3/src 
[root@localhost src]# yum install ruby #(用来执行redis-trib.rb脚本,创建集群)
[root@localhost src]# yum install rubygems  #rubygems(用来安装redis)此处安装不需要重新下载redis

[root@localhost src]# gem install redis

[root@localhost 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  

默认是前三个为主,后三个为从

默认情况下不能从slaves读取数据,但建立连接后,执行一次命令READONLY,该slaves即可读取数据。

3. 进入集群环境

[root@localhost src]# redis-cli -c -p 7000

4. 集群的操作

添加节点

# 假如我又创建了一个 7006 端口的节点

[root@localhost src]# ./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

#注意这个地方添加节点的时候后面是两个节点,前面是新节点,后面是已经存在的节点


#查看新添加的节点
[root@localhost src]#redis-cli -c -p 7000 cluster nodes

#查看节点信息
[root@localhost src]#redis-cli -c -p 7000 cluster info
#或者
[root@localhost src]#redis-cli -c -p 7000
127.0.0.1:7000> cluster info


#4.1 把这个节点变成主节点,使用redis-trib程序,将集群中的某些哈希槽移动到新节点里面, 这个新节点就成为真正的主节点了。


#执行下面的命令对集群中的哈希槽进行移动
[root@localhost src]#./redis-trib.rb reshard 127.0.0.1:7000

系统会提示我们要移动多少哈希槽,这里移动1000个

然后还需要指定把这些哈希槽转移到哪个节点上,

输入我们刚才新增的节点的ID

f32dc088c881a6b930474fc5b52832ba2ff71899

然后需要我们指定转移哪几个几点的哈希槽

输入all 表示从所有的主节点中随机转移,凑够1000个哈希槽

然后再输入yes,redis集群就开始分配哈希槽了。

至此,一个新的主节点就添加完成了,执行命令查看现在的集群中节点的状态

redis-cli -c -p 7000 cluster nodes

把节点变成从节点


[root@localhost src]# redis-cli -c -p 7006 cluster replicate 0b00721a509444db793d28448d8f02168b94bd38

删除节点

1:如果删除的节点是主节点,这里我们删除127.0.0.1:7006节点,这个节点有1000个哈希槽

首先要把节点中的哈希槽转移到其他节点中,执行下面的命令

[root@localhost src]# cd /usr/local/redis3.0/src

[root@localhost src]# ./redis-trib.rb reshard 127.0.0.1:7006

系统会提示我们要移动多少哈希槽,这里移动1000个,因为127.0.0.1:7006节点有1000个哈希槽

然后系统提示我们输入要接收这些哈希槽的节点的ID,这里使用127.0.0.1:7001的节点ID

然后要我们选择从那些节点中转出哈希槽,这里一定要输入127.0.0.1:7006这个节点的ID,最后输入 done  表示输入完毕

最后一步,使用下面的命令把这个节点删除

[root@localhost src]# cd /usr/local/redis3.0/src/
[root@localhost src]# ./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006

2. 如果是从节点,直接删除就行

[root@localhost src]# cd /usr/local/redis3.0/src/
[root@localhost src]# ./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006

测试一下redis集群的效果:

[root@localhost src]# redis-cli -p 7000
127.0.0.1:7000> set bb 123

(error) MOVED 8620 127.0.0.1:7001  #这个键被分配到节点 7001上,要登录7001 set操作,当然get的时候也要登录7001


看一下现在的集群主从情况:

可以看到7005是7002的从库。

这时候我们把7002杀掉

[root@localhost src]# ps -ef | grep 7002
[root@localhost src]# kill -9 52587

可以看到7005自动变成了master,7002 状态fail

然后我们再启动7002

[root@localhost 7002]#redis-server redis.conf

7002变成了7005的从库。

php连接redis cluster(php安装redis扩展)

<?php

$obj_cluster = new RedisCluster(NULL, ['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']);

$obj_cluster -> set('aaa', 111);


$obj_cluster -> set('abc', 222);


$obj_cluster -> set('bcd', 333);


$str1 = $obj_cluster -> get('aaa');
$str2 = $obj_cluster -> get('abc');
$str3 = $obj_cluster -> get('bcd');


echo $str1 . '<br>';
echo $str2. '<br>';
echo $str3. '<br>';

 

© 著作权归作者所有

stone_
粉丝 21
博文 221
码字总数 163611
作品 0
洛阳
程序员
私信 提问
Redis Cluster集群快速搭建

想在3分钟以内搭建一个Redis Cluster集群吗?说3分钟可能有点久,实际上好像不到一分钟就完成了Redis Cluster集群的搭建。 介绍 redis cluster是官方提供的一种集群方案,Redis-Cluster采用无...

艾贺521
2018/08/13
0
0
redis演练聚集

redis演练(1) 搭建redis服务 redis演练(2) 最全redis命令列表 redis演练(3) redis事务管理 redis演练(4) redis基准测试 redis演练(5) redis持久化 redis演练(6) redis主从模式搭建 redis运维...

randy_shandong
2016/09/11
0
0
ubuntu中redis集群的安装

首先先要检查一下是否安装gcc 如果没有安装gcc,需要安装一下 下载 集群的创建 分别对7001,7002、7003文件夹中的3个文件修改对应的配置 在192.168.1.238创建3个节点:对应的端口改为7003,70...

miaojiangmin
07/01
25
0
Java之品优购部署_day01(9)

3.2.3 配置集群 (1)修改每个 redis 节点的配置文件 redis.conf 修改运行端口为 7001 (7002 7003 .....) 将 cluster-enabled yes 前的注释去掉(632 行) (2)启动每个 redis 实例 以第一个...

我是小谷粒
2018/07/11
0
0
docker redis 集群(cluster)搭建

前言 在开发环境中,大家应该都用的是redis单点吧,但是在生产环境中我相信没有人敢用单点的,应该都是用的cluster,因为万一单点挂掉的话,我们的应用也就自然而然的ConnectionException。那...

田心双木
2018/08/30
10K
5

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
12分钟前
2
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
26分钟前
27
2
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部