redis cluster实现

来源:互联网 发布:现在开淘宝还能赚钱么 编辑:程序博客网 时间:2024/06/14 05:31

Redis 集群

Redis cluster 介绍:

Redis 集群是指可以在多个Redis 节点中自动共享的设施。Reids 集群不支持同事涉及多个键的redis 命令(因为有可能需要移动数据在不同的节点导致性能下降和不和预知的问题。)。

Rediscluster的作用:

1.      可以切分数据到多个节点中(通过hash slot),类似关系数据库的表分区。

2.      可以继续正常工作当部分节点失效或者无法通讯。

Rediscluster使用端口:

1.      客户端通讯端口(6379):用来支持客户端连接通信并提供服务。

2.      节点通讯端口(16379):用来支持当前节点和其他节点进行通讯,数据迁移等。

以上2个端口是每一个节点都必须绑定的端口,否则 cluster不会正常工作。

 

安装Redis

1.      下载redis 3.0源码版本 如:redis-3.0.0-beta1.tar.gz

$ tar –zxvf redis-3.0.0-beta1.tar.gz

$ cd redis-3.0.0-beta1/src

$ cp redis-benchmark redis-serverredis-cli /usr/local/bin

$ ../cp redis.conf/etc/redis/redis.conf

2.      安装 Ruby

$ sudo apt-get install rubyirb rdoc

安装Ruby 的redis接口:

$sudo geminstall redis 

配置Redis-cluster

Redis是通过配置文件来启动特定的服务,所以我们就采用多个配置文件来模拟多个node。构成cluster至少需要3个节点组成,模拟的时候也建议为每个简单配置slave,用来提到通讯异常的master节点。redis-3.0.0包里面有个自带的Ruby工具可以配置自完成建集群的hash slot分配(16384),各节点建立通讯等工作。

1.      建立6个redis工作目录

$mkdir 6379  6380 6381  6382  6383 6384  6385


2.      生成配置文件

复制/etc/redis/redis.conf5份分别对应redis6380.conf redis6381.conf redis6382.conf redis63803.conf redis6384.confredis6379.conf

3.      开启cluster、配置

修改每一个配置文件对应下面的选项:

port 6379

cluster-enable yes

cluster-config-filenodes6379.conf

cluster-node-timeout 5000

appendonly yes

dir  direcotry(为1步创建的对应目录)

4.      启动6个对应的服务,为了测试方便使用非后面运行模式(daemonize no)

$sudo redis-server/etc/redis/redis6379.conf

5.      利用redis 源码中的src/ redis-trib.rb自动搭建redis-cluster

$ ./redis-trib.rb create --replicas 1127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383127.0.0.1:6384

--replicas为每一个节点创建slave, 1表示创建一个从节点

执行完会打印一份配置文件:如果正确选择yes继续


连接成功显示:


利用redis-cli客户端查看cluster信息:


测试

1.      连接6379设置key

$ redis-cli -c -p 6379


2.      从其他节点访问

$ redis-cli -c -p 6380

集群管理:

1.      对集群重新分片:

利用源码中src/redis-trib.rb工具

$./redis-trib.rb reshard127.0.0.1:6379  (指定集群中任意可以通讯的节点即可)

根据提示选择需要移动的slots数据

选择需要移动slots的源节点(all表示所有, 选择特定的话使用id, 用done结束选择)

选择需要的目标节点

2.      检测节点是否正常:

$./redis-trib.rb check127.0.0.1:6379

3.      添加节点:

$./redis-trib.rb addnode127.0.0.1:6386 127.0.0.1:6387

利用集群重新分片为新节点分配slot

为主节点添加slave, 只需要登录slave客户端(redis-cli –c -p) 执行cluster replicate master_node_id即可

4.      移除节点:

$./redis-trib.rb del-node127.0.0.1:6379 node_id  (第一个地址为任意可连接地址,node_id为需要移除的节点id)

 

5.      redis-cluster相关命令:

cluster meet other_node_id  :以其他node建立通信

cluster addslotsslot1..slotN :为节点添加hash slot (或者修改修改nodes.conf文件在mysql记录末尾加上slot范围,不建议修改此配置文件)

cluster delslots

cluster setslots

 

参考链接:

http://redis.io/topics/cluster-tutorial

0 0