redis 集群架构 cluster 、sentinel

redis-cluster

实验环境:

centos6.5   IP:192.168.1.11

依赖包:redis    ruby   rubygem

 

 

[[email protected] redis]#tar xf redis-3.0.2.tar.gz

[[email protected] redis]#cd redis-3.0.2

[[email protected] redis]#make &&make install

用tab键看redis-  这些工具是否安装好,没安装则cp到/usr/local/bin下

[[email protected] redis]#which redis-cli

[[email protected] redis]#cp /root/redis-3.0.2/src/redis-trib.rb /usr/local/bin/redis-trib

[[email protected] redis]#mkdir /usr/local/redis

[[email protected] redis]#cd /usr/local/redis/

[[email protected] redis]#mkdir `seq 7001 7008`

[[email protected] redis]# cp ~/redis-3.0.2/redis.conf ./

[[email protected] redis]# ls

7001  7002  7003  7004  7005  7006  7007  7008  redis.conf

 

配置文件里,这三行配置:

daemonize yes//后台挂起

cluster-enabled yes//开启集群

cluster-config-file nodes-7001.conf//集群节点配置文件

cluster-node-timeout 5000//超时时间,毫秒

appendonly yes并且appendonly要开启:

 

 

for批量修改:

for i in {7001..7008};do sed  "s/6379/$i/" redis.conf >$i/redis.conf;done

 

for批量启动:

for i in {7001..7008};do cd /usr/local/redis/$i&&redis-server redis.conf ;done

[[email protected] 7008]# ps aux|grep redis//查看redis启动状态

 

 

联网  yum -y install ruby rubygems   建议用yum吧,用源码弄了半天弄不好

 

[[email protected] 7001]# gem install redis安装ruby的redis接口

 

 

接下来就是redis-trib  工具出场了:

[[email protected] redis]# redis-trib help//查看能否使用

 

[[email protected] redis]# redis-trib create --replicas 1 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 192.168.1.11:7004 192.168.1.11:7005 192.168.1.11:7006

Can I set the above configuration? (type ‘yes‘ to accept):  yes   //这里输入yes

 

#--replicas 1 代表复制一份,即每个主一个从

#redis cluster最低要求三个主, 定义是host1:port host2:port

#如果--replicas 2则:

#host1:port == master host2:port &host3:port

host1 是host2 和host3的主

如果是创建9个是节点   --replicas 2  a b c d e f g h i 则,d e 是a的从,f g是b的从  h i是c的从

 

[[email protected] redis]# redis-cli -c -h 127.0.0.1 -p 7001#连接7001,

127.0.0.1:7001> cluster nodes#查看集群节点

127.0.0.1:7001> cluster info#查看集群信息

cluster_state:ok

 

 

集群扩容

[[email protected] redis]# redis-trib add-node 192.168.1.11:7007 192.168.1.11:7001

redis-trib add-node 要加的节点   现有的任意节点

 

M: ff2b5205f2c1531422052a7c4c4feca3db046878 192.168.1.11:7001

   slots:0-5460 (5461 slots) master

   1 additional replica(s)

S: ef4ed8963e868ed9befa2fc25049039d270f7dbe 192.168.1.11:7005

   slots: (0 slots) slave

   replicates 721b0611a6a8a6e027d6619091a747b05a0529c2

S: 1538fe39b9694912c80024fc2bfcacde9ddbfb47 192.168.1.11:7004

   slots: (0 slots) slave

   replicates ff2b5205f2c1531422052a7c4c4feca3db046878

M: 721b0611a6a8a6e027d6619091a747b05a0529c2 192.168.1.11:7002

   slots:5461-10922 (5462 slots) master

   1 additional replica(s)

M: ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7 192.168.1.11:7003

   slots:10923-16383 (5461 slots) master

   1 additional replica(s)

S: 0d2e18cbbc2d6abd9cd72e554c8b7484fb089ccb 192.168.1.11:7006

   slots: (0 slots) slave

   replicates ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7

 

 

[[email protected] redis]# redis-cli -c -h 127.0.0.1 -p 7001

127.0.0.1:7001> cluster info

cluster_state:ok

cluster_slots_assigned:16384

...

127.0.0.1:7001> cluster nodes

ef4ed8963e868ed9befa2fc25049039d270f7dbe 192.168.1.11:7005 slave 721b0611a6a8a6e027d6619091a747b05a0529c2 0 1486917802211 5 connected

1538fe39b9694912c80024fc2bfcacde9ddbfb47 192.168.1.11:7004 slave ff2b5205f2c1531422052a7c4c4feca3db046878 0 1486917801707 4 connected

78a65dcd0b5165ecdab3ab2320bf975a35a66cf9 192.168.1.11:7007 master - 0 1486917802714 0 connected

ff2b5205f2c1531422052a7c4c4feca3db046878 192.168.1.11:7001 myself,master - 0 0 1 connected 0-5460

721b0611a6a8a6e027d6619091a747b05a0529c2 192.168.1.11:7002 master - 0 1486917801202 2 connected 5461-10922

ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7 192.168.1.11:7003 master - 0 1486917803218 3 connected 10923-16383

0d2e18cbbc2d6abd9cd72e554c8b7484fb089ccb 192.168.1.11:7006 slave ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7 0 1486917801202 6 connected

 

前一大串是节点里的ID,新上来的节点没有槽位,得重新分片:

[[email protected] redis]# redis-trib reshard 192.168.1.11:7007//对7007分片

How many slots do you want to move (from 1 to 16384)?1000     //给7007分1000槽位

What is the receiving node ID?  //接受节点的ID,这里复制7007的ID过来

Source node #1:all//从源节点过来

 

添加7008给7007做从

[[email protected]]# redis-trib add-node     192.168.1.11:7008    192.168.1.11:7001

 

[[email protected] redis]# redis-cli -c -p 7008//进入7008节点

127.0.0.1:7008> cluster nodes//查看节点,现在他还是主

127.0.0.1:7008> cluster replicate 78a65dcd0b5165ecdab3ab2320bf975a35a66cf9

OK//复制7007的ID过来

127.0.0.1:7008> cluster nodes//现在就变为7007的从了

 

删除节点:

[[email protected] redis]# redis-trib del-node 192.168.1.11:7008 6a8a8c8a4c9640d2cda682de85ac9b83b837e2cd

 

redis-trib del-ode 主机:端口 ID

 

 

查看节点以及槽位:

[[email protected] redis]# redis-trib check 192.168.1.11:7001

 

 

转移槽位:如果要删除主,则需要把槽位给删了在删除节点。

[[email protected] 7009]# redis-trib reshard 192.168.1.11:7002

How many slots do you want to move (from 1 to 16384)?

需要移动的数目:

 

What is the receiving node ID?

接受这些槽位的ID//目标节点

 

Source node #1:

从何处移到上面所指定的ID  //源节点

 

Source node #2:done//结束

 

[[email protected] redis]# pkill redis//关闭所有redis,

 

 

 

可以看到redis-trib.rb具有以下功能:
1、create:创建集群
2、check:检查集群
3、info:查看集群信息
4、fix:修复集群
5、reshard:在线迁移slot
6、rebalance:平衡集群节点slot数量
7、add-node:将新节点加入集群
8、del-node:从集群中删除节点
9、set-timeout:设置集群节点间心跳连接的超时时间
10、call:在集群全部节点上执行命令
11、import:将外部redis数据导入集群

redis-sentinel

IP分布:

reids master  192.168.1.11  6379

reids slalve   192.168.1.11  6380

reids slave   192.168.1.11  6381

reids sentinel  192.168.1.11  26379

 

先启动所有reids,(修改好配置,配置好主从)

redis-server /usr/local/redis/6379/redis.conf &

redis-server /usr/local/redis/6380/redis.conf &

redis-server /usr/local/redis/6381/redis.conf &

 

[[email protected] 6379]# ps aux|grep redis

root     17151  0.1  0.5 137436  2736 pts/0    Sl   07:43   0:00 redis-server *:6379                          

root     17165  0.2  0.5 137436  2680 pts/0    Sl   07:43   0:00 redis-server *:6381                                                 

root     17204  0.2  0.5 137436  2636 pts/0    Sl   07:45   0:00 redis-server *:6380  

 

cp /root/redis-3.0.0-rc2/sentinel.conf /usr/local/redis/

vi /usr/local/redis/sentinel.conf#一份配置文件可以配置多个群集组

sentinel monitor mymaster 192.168.7.40 6379 1

#监听的群集,1代表一个slave节点ping不通,则认为master宕机

sentinel down-after-milliseconds mymaster  5000

#sentinel向master发送ping,多长时间内没通则认为宕机。单位为毫秒

sentinel failover-timeout mymaster  900000

#failover后,如果此时间内没有任何failover操作,则默认为failover失败

sentinel parallel-syncs mymaster  2 

    #最多有多少个slave对新master进行同步###mymaster可以自己定义

sentinel can-failover def_master yes 

#sentinel是否实施failover,no则只参与投票,不实施failover 

 

redis-server /usr/local/redis/sentinel.conf  --sentinel &启动sentinel

 

[[email protected] 6379]# ps aux|grep redis

root     17151  0.1  0.4 137436  2448 pts/0    Sl   07:43   0:02 redis-server *:6379                          

root     17165  0.1  0.5 137436  2536 pts/0    Sl   07:43   0:02 redis-server *:6381                          

root     17172  0.3  0.4 137436  2436 pts/0    Sl   07:43   0:05 redis-server *:26379 [sentinel]                            

root     17204  0.1  0.5 137436  2488 pts/0    Sl   07:45   0:02 redis-server *:6380                          

root     17419  0.0  0.1 103216   772 pts/0    S+   08:08   0:00 grep redis

 

 

[[email protected] 6379]# redis-cli -p 26379 info sentinel查看sentinel信息

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

master0:name=mymaster,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=1    #红色部分为master

[[email protected] 6379]# redis-cli -p 26379 sentinel slaves mymaster查看集群从节点

 

[[email protected] ~]# redis-cli -p 6379 info Replication查看单个节点的角色 

 

故障演示:  (自行完成),当主宕机后,从代替,主恢复后,变成新主的从。

 

恢复数据:先把redis关掉,然后把.aof和.rdb结尾的文件导入配置文件目录下。启动redis

时间: 2024-11-09 05:37:41

redis 集群架构 cluster 、sentinel的相关文章

Redis集群架构

Redis集群概述 集群的核心意义只有一个:保证一个节点出现了问题之后,其他的节点可以继续提供服务使用. Redis基础部分讲解过主从配置:对于主从配置可以有两类:一主二从,层级关系.开发者一主二从是常用的手段. Redis的主从配置是所有Redis集群的一个基础.但是只是依靠主从依然无法实现高可用的配置. Redis集群有以下两种方案 1)keepalived+twemproxy+HAProxy+sentinel 对redis集群而言,首先在主从的基础上发展出了一个叫哨兵的处理机制,所谓的哨兵

redis集群之Cluster

RedisCluster 是 Redis 的亲儿子,它是 Redis 作者自己提供的 Redis 集群化方案. 相对于 Codis 的不同,它是去中心化的,如图所示,该集群有三个 Redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样.这三个节点相互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议相互交互集群信息. Redis Cluster 将所有数据划分为 16384 的 slots,它比 Codis 的 1024 个槽划分的更为精细,每个节点负责其

Twemproxy 测试Redis集群架构

Twemproxy 测试架构 twemproxy- nutcracker: ip:10.207.101.101 ip:10.207.101.102 VIP:10.207.101.100 HA- keepalived ip:10.207.101.101 ip:10.207.101.102 VIP:10.207.101.100 Redis IP: 10.207.101.101 Port:6001/6002/6003 IP: 10.207.101.102 Port:6001/6002/6003 1.t

玩转 Redis 集群之 Sentinel

Redis作为内存数据库,需要具备高可用的特点,不然如果服务器宕机,还在内存里的数据就会丢失.我们最常用的高可用方法就是搭建集群,master机器挂了,可以让slave机器顶上,继续提供服务.但是Redis集群是不会自动进行主从切换的,也就是说,如果主节点非常不争气的在凌晨3点挂了,那么运维同学就要马上起床,把从节点改成主节点,这样的操作是非常繁琐低效的.为此,Redis官方提供了一种解决方案:Redis Sentinel 简介 Redis Sentinel集群通常由3到5个节点组成,如果个别节

Docker快速构建Redis集群(cluster)

Docker快速构建Redis集群(cluster) 以所有redis实例运行在同一台宿主机上为例子 搭建步骤 redis集群目录清单 . ├── Dockerfile ├── make_master_slave.sh ├── run_master_slave.sh ├── compose_master_slave.sh ├── redis-trib.rb ├── master │?? ├── 7000 │?? │?? ├── data │?? │?? │?? ├── appendonly.ao

关于redis集群方案

最近在研究redis集群方案,看到知乎上有个朋友写的观点很好,就先收过来了.原文见:http://www.zhihu.com/question/21419897 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构Redis呢? 首先,无论我们是使用自己的物理主机,还是使用云服务主机,内存资源往往是有限制的,scale up不

Redis集群方案(来自网络)

参考: https://www.zhihu.com/question/21419897 http://www.cnblogs.com/haoxinyue/p/redis.html 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构Redis呢? 首先,无论我们是使用自己的物理主机,还是使用云服务主机,内存资源往往是有限制的,

redis集群+twemproxy

参考: https://www.zhihu.com/question/21419897 http://www.cnblogs.com/haoxinyue/p/redis.html 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构Redis呢? 首先,无论我们是使用自己的物理主机,还是使用云服务主机,内存资源往往是有限制的,

redis 集群搭建: redis-cluster

前言 redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧. 那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢? 正常思维, 都是, 一台电脑不够, 那我再加一台电脑嘛, 不就够了. redis集群架构图 每一台redis server之间都是保持通讯的. 也就是说, 如果 server1 上面没有要查找的值, 会跳转到别的服务器上查找. 注:  如果其中有一个服务器挂了, 如 server4 挂了. redis