Redis Cluster集群搭建测试
# Redis Clutser ### 一、Redis Cluster集群 ##
参考资料:
http://www.cnblogs.com/lykxqhh/p/5690923.html
Redis集群搭建的方式有多种,例如使用zookper等,但从redis3.0之后版本支持redis cluster集群,Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis cluster架构图如下:
其结构特点:
1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、节点的fail机制是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间件proxy层。客户端不需要连接集群所有节点,连接集群中其中一和可用节点即可。
4、redis cluster把所有的物理节点映射到slot上(不一定平均分配),cluster负责维护nodeslotvalue。
5、Redis集群预分配好16384个桶,当需要在Redis集群中放置一个key-value时,根据CRC16(key)mod 16384的值,决定一个key放到哪个桶中。
1、redis cluster节点分配
----------
现在我们是三个主节点分别是A、B、C三个节点,他们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽(hash slot)的方式来分配16384个slot的话,它们三个节点分别承担的slot区间是:
节点A覆盖0-5460;
节点B覆盖5461-10922;
节点C覆盖10923-16384.
获取数据:
如果存入一个值,按照redis clsuter哈希槽的算法:CRC16('key')%16384=6782。那么就会把这个key分配存储在B上了。同样,当我连接(A、B、C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据。
新增一个主节点:
新增一个主节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:
A节点覆盖1365-5460;
B节点覆盖6827-10922;
C节点覆盖12888-16384;
D节点覆盖0-1364,5461-6826,10923-12287
同样删除一个节点也是类似,移动完成后就可以删除这个节点了。
2、Redis Cluster主从模式
----------
redis cluster为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提取数据存储,从节点则是从主节点拉去数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。
上面那个例子里,集群有ABC三个主节点,如果这三个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和B的slot也无法访问了。
所以我们在集群建立的时候,一定要为每个主节点都添加了从节点,比如像这样,集群包含主节点A、B、C以及从节点A1、B1、C1,那么即使B挂掉系统也可以继续正确工作。
B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。当B重新开启后,它就会变成B1的从节点。
不过需要注意,如果节点B和B1同时挂掉了,Redis集群就无法正确地提供服务了。
## 二、redis集群的搭建 ##
集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。
下面使用redis-3.2.5.tar.gz
1、安装redis节点指定端口
----------
实验环境:
10.69.213.127 bj05-ops-mongodb04.test.gomeplus.com
cd /opt
wget http://download.redis.io/releases/redis-3.2.5.tar.gz
tar -zxf redis-3.2.5.tar.gz
cd redis-3.2.5
make PREFIX=/usr/local/redis install
mkdir -p /gomeo2o/data/redis/9000/db
mkdir -p /gomeo2o/logs/redis/9000
mkdir -p /usr/local/redis/etc
rm -rf /usr/sbin/redis-*
cat > /usr/local/redis/etc/redis_9000.conf/etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/enabled
sysctl -p
cat >>/etc/rc.local
页:
[1]