CentOS Redis 集群

五、 redis cluster

集群技术是构建高性能网站架构的重要手段。
试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,
我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节点,来降低单节点服务器的压力。

集群要实现的目的是要将不同的key分散放置到不同的redis节点,这里我们需要一个规则或者算法,通常的做法是获取key的哈希值,然后根据节点数来求模。
官方版本是基于哈希槽(hash slot)的概念来实现的。
Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个 key 都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点。

使用哈希槽的好处就在于可以方便的添加或移除节点:
当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;
当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了。

1. 编辑配置

在redis多实例基础上,
/data/redis/conf/redis.conf,/data/redis/6380/conf/redis.conf,/data/redis/6381/conf/redis.conf
三个配置文件分别添加如下内容:
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

2. 重启服务

3. 搭建准备

安装ruby,rubygems,ruby的redis接口
yum install ruby
yum install rubygems
gem install redis

4. 建立集群

/data/redis/redis-3.0.3/src/redis-trib.rb create --replicas 0 172.32.2.131:6379 172.32.2.131:6380 172.32.2.131:6381
(--replicas 0指定了为redis cluster中的每个master节点配备0个slave节点)

5. 验证集群

redis-cli -c -p 6379
127.0.0.1:6379> cluster nodes
127.0.0.1:6379> cluster info

发现当没有指定的key的时候会重定向到集群的其它机器去找
redis-cli -c -p 6379
127.0.0.1:6379> get name
-> Redirected to slot [5798] located at 172.32.2.131:6380
"123"
172.32.2.131:6380>

还是重定向去6380端口的实例上更新结果
redis-cli -c -p 6379
127.0.0.1:6379> set name 111
-> Redirected to slot [5798] located at 172.32.2.131:6380
OK
172.32.2.131:6380>

集群中的节点是会进行通讯的,从而找到不同的key在不同实例上。在机器固定的情况下,key唯一时后续对其的所有更新以及查询都会映射到这一台机器上面。

6. 添加master节点

mkdir -p /data/redis/6382/{data,logs,conf}
cp /data/redis/conf/redis.conf /data/redis/6382/conf/

vim /data/redis/6382/conf/redis.conf
修改如下内容:
port 6382
dir "/data/redis/6382/data"
pidfile "/var/run/redis6382.pid"
logfile "/data/redis/6382/logs/redis.log"
添加如下内容:
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

启动服务
redis-server /data/redis/6382/conf/redis.conf

加入集群
/data/redis/redis-3.0.3/src/redis-trib.rb add-node 172.32.2.131:6382 172.32.2.131:6379

分配哈希槽
/data/redis/redis-3.0.3/src/redis-trib.rb reshard 172.32.2.131:6382
其中过程需要输入要分配的哈希槽数量,目的节点ID,源节点ID及done.

7. 删除master节点

删除master节点之前首先要使用reshard移动master的全部slot,然后再删除空master节点

/data/redis/redis-3.0.3/src/redis-trib.rb reshard 172.32.2.131:6382
过程输出了很多信息,很多数值和ID都可以从这段信息中找到。
其中需要输入要移动的全部哈希槽数量,目的节点ID,源节点ID及done.

/data/redis/redis-3.0.3/src/redis-trib.rb del-node 172.32.2.131:6382 '1669d2987e74f83ea6bedf41f69d6eaa283c1cd5'

验证
redis-cli -c -p 6382
Could not connect to Redis at 127.0.0.1:6382: Connection refused

8. 添加slave节点

mkdir -p /data/redis/6383/{data,logs,conf}
cp /data/redis/conf/redis.conf /data/redis/6383/conf/

vim /data/redis/6383/conf/redis.conf
修改如下内容:
port 6383
dir "/data/redis/6383/data"
pidfile "/var/run/redis6383.pid"
logfile "/data/redis/6383/logs/redis.log"
添加如下内容:
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

启动服务
redis-server /data/redis/6383/conf/redis.conf

加入集群
/data/redis/redis-3.0.3/src/redis-trib.rb add-node --slave 172.32.2.131:6383 172.32.2.131:6379
需要注意:从节点只能用于做只读工作。

9. 删除slave节点

语法:redis-trib del-node ip:port '<node-id>' 
/data/redis/redis-3.0.3/src/redis-trib.rb del-node 172.32.2.131:6383 'e504364f2d225667da1ce1253b6dfbafbac9338d'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值