Redis Cluster介绍:
Redis Cluster是Redis的分布式解决方案,在Redis 3.0版正式推出,有效解决Redis分布式方面的需求,当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。

数据分布理论:
分布式数据库首要解决的就是把整个数据集按照分区规则映射到多个节点的问题,即把数据集分到多个节点上,每个节点负责整个数据的一个子集。常见的分区规则有哈希分区和顺序分区,Redis Cluster采用的是哈希分区规则中的虚拟槽分区。

虚拟槽分区:
使用哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。Redis Cluster槽的范围是0~16383。槽是集群内数据管理和迁移的基本单位,每个节点负责维护一部分槽以及槽所映射的键值数据。

节点握手:
节点握手是指一批运行在集群模式的节点通过Gossip协议彼此通信,达到感知对方的过程。节点握手是集群彼此通信的第一步,由客户端发起命令:cluster meet <ip> <port>

部署集群:
1、下面的redis cluster操作基于已经编译安装了一个redis,目录为:/usr/local/redis/

2、创建文件夹,计划将集群安装在/usr/local/redis-cluster/目录下,并按照端口号区分:
# cd /usr/local/redis-cluster
# mkdir bin   #用来存放运行脚本
# mkdir -p 6001/data 6002/data 6003/data 7001/data 7002/data 7003/data #节点目录

3、将redis的src目录中常用的运行脚本文件,拷贝至/usr/local/redis-cluster/bin/目录:
# cp -r redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin/

4、将已安装好的redis文件依次拷贝进节点目录中:
# cp -r /usr/local/redis/* /usr/local/redis-cluster/6001/
# cp -r /usr/local/redis/* /usr/local/redis-cluster/6002/
# cp -r /usr/local/redis/* /usr/local/redis-cluster/6003/
# cp -r /usr/local/redis/* /usr/local/redis-cluster/7001/
# cp -r /usr/local/redis/* /usr/local/redis-cluster/7002/
# cp -r /usr/local/redis/* /usr/local/redis-cluster/7003/

5、修改各节点下的配置文件,例如修改节点6001的配置文件:
# vi /usr/local/redis-cluster/6001/redis.conf
主要修改以下信息: 
port 6001
daemonize yes
bind 192.168.104.135
dir /usr/local/redis-cluster/6001/data
pidfile /var/run/redis_6001.pid
cluster-enabled yes
cluster-config-file nodes-6001.conf
cluster-node-timeout 15000
appendonly yes

6、将剩余5个节点的配置文件也更改,主要修改端口号信息
(用:%s/6001/6002/g命令可批量替换端口)

7、启动节点:
# /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6001/redis.conf
# /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6002/redis.conf
# /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/6003/redis.conf
# /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7001/redis.conf
# /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
# /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7003/redis.conf

查看redis进程:
# ps -ef|grep redis

8、安装ruby,并使用redis-trib.rb创建集群:
此时虽然启动了集群,但这些节点还不能互相发现,也还没分配可存储的位置,即槽(slot),需要使用redis-trib.rb来创建集群,安装ruby和相关接口:
# yum install ruby rubygems
# gem install redis

使用redis-trib.rb创建集群:
# /usr/local/redis-cluster/bin/redis-trib.rb create –replicas 1 192.168.104.135:6001 192.168.104.135:6002 192.168.104.135:6003 192.168.104.135:7001 192.168.104.135:7002 192.168.104.135:7003
(replicas表示主从复制比例为1:1,即一个主节点一个从节点)
由下图可见主节点为:6001\6002\6003,从节点为:7001\7002\7003,
输入‘yes’表示同意这样分配,则创建集群并分配slot。

9、验证集群:
# /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.104.135 -p 6001  
192.168.104.135:6001> cluster info
192.168.104.135:6001> cluster nodes

至此redis cluster集群搭建完毕!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注