NoSQL之Redis(四)--- RedisCluster概念以及搭建

前端之家收集整理的这篇文章主要介绍了NoSQL之Redis(四)--- RedisCluster概念以及搭建前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


Nosql之Redis(四)--- RedisCluster概念以及搭建


之前已经在博文中介绍了redis以及redis的简单实用,但是在实际的项目中用单机版redis还是很少的基本上都是实用redis集群。

RedisCluster概念


RedisCluster架构

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)Redis Cluster是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。

例如下图

Key:a

计算a的hash值,例如值为100,100这个slot在server1上,所以a应该放到server1.

Key:hello

Hash值:10032,此slot在server3上。Hell可以应该存在server3.

redis-cluster投票:容错

(1)领着投票过程是集群中所有master参与,如果半数以上节点与节点通信超过(cluster-node-timeout),51)">认为当前节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)?

a:如果集群任意挂掉且当前没有slave.集群进入fail状态也可以理解成集群的slot映射[0-16383]不完成时进入. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数默认关闭打开集群兼容部分失败 b:如果集群超过半数以上挂掉,无论是否有slave.

ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

RedisCluster安装


安装redis


版本说明

本教程使用redis3.0版本。3.0版本主要增加了redis集群功能。同时由于笔者实用的是一台虚拟机所以只是伪集群模式,但是和真集群的安装方法本质上还是类似的。

安装的前提条件:

需要安装gcc:yum install gcc-c++

下载redis的源码包,把源码包上传到linux服务器

解压源码包

tar -zxvf redis-3.0.0.tar.gz
Make
Make install
make installPREFIX=/usr/local/redis-cluster/redis01

ps:PREFIX必须大写表示redis的安装路径,执行上面几步之后单机版的redis已经安装成功。

集群环境安装


搭建集群需要使用到官方提供的ruby脚本,需要安装ruby的环境。

安装ruby

yum install ruby
yum install rubygems

redis集群管理工具redis-trib.rb输入如下依次命令可以找到

cd redis-3.0.0/src
ll*.rb

脚本需要的ruby包:

下载地址:http://download.csdn.net/detail/senior_lee/9502524

上传到Linux,并安装ruby包

geminstall redis-3.0.0.gem

集群搭建


第一步:创建6另外5个redis实例,在/usr/local/redis-cluster/文件夹下,复制redis01即可,分别命名为redis02~redis06。

注意:需要分别删除每个redis安装目录里面的dum.rdb文件

第二步:修改redis配置文件

1将port分别改成7001~7006

2打开cluster-enable前面的注释

3把创建集群的ruby脚本复制到redis-cluster目录下。

4启动6个redis实例

5创建集群

./redis-trib.rb create --replicas 1 192.168.21.225:7001192.168.21.225:7002 192.168.21.225:7003 192.168.21.225:7004 192.168.21.225:7005192.168.21.225:7006

ps:创建了三个节点主节点,三个从节点。其中—replicas1 表示每个主节点下面有1个从节点,从节点可以是任意多个。

窗口输出结果入下:

>>> Creating cluster

Connecting to node 192.168.21.225:7001: OK

Connecting to node 192.168.21.225:7002: OK

Connecting to node 192.168.21.225:7003: OK

Connecting to node 192.168.21.225:7004: OK

Connecting to node 192.168.21.225:7005: OK

Connecting to node 192.168.21.225:7006: OK

>>> Performing hash slotsallocation on 6 nodes...

Using 3 masters:

192.168.21.225:7001

192.168.21.225:7002

192.168.21.225:7003

Adding replica 192.168.21.225:7004 to 192.168.21.225:7001

Adding replica 192.168.21.225:7005 to 192.168.21.225:7002

Adding replica 192.168.21.225:7006 to 192.168.21.225:7003

M: 5a8523db7e12ca600dc82901ced06741b3010076192.168.21.225:7001

slots:0-5460 (5461 slots) master

M: bf6f0929044db485dea9b565bb51e0c917d20a53192.168.21.225:7002

slots:5461-10922 (5462 slots) master

M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca192.168.21.225:7003

slots:10923-16383 (5461 slots) master

S: 2a61b87b49e5b1c84092918fa2467dd70fec115f192.168.21.225:7004

replicates 5a8523db7e12ca600dc82901ced06741b3010076

S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65192.168.21.225:7005

replicates bf6f0929044db485dea9b565bb51e0c917d20a53

S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632192.168.21.225:7006

replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca

Can I set the above configuration? (type'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different configepoch to each node

>>> Sending CLUSTER MEET messagesto join the cluster

Waiting for the cluster to join.....

>>> Performing Cluster Check(using node 192.168.21.225:7001)

M: 5a8523db7e12ca600dc82901ced06741b3010076192.168.21.225:7001

slots:0-5460 (5461 slots) master

M: bf6f0929044db485dea9b565bb51e0c917d20a53192.168.21.225:7002

slots:5461-10922 (5462 slots) master

M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca192.168.21.225:7003

slots:10923-16383 (5461 slots) master

M: 2a61b87b49e5b1c84092918fa2467dd70fec115f192.168.21.225:7004

slots: (0 slots) master

replicates 5a8523db7e12ca600dc82901ced06741b3010076

M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65192.168.21.225:7005

slots: (0 slots) master

replicates bf6f0929044db485dea9b565bb51e0c917d20a53

M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632192.168.21.225:7006

slots: (0 slots) master

replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

测试集群


依次输入如下命令

cd/usr/local/redis-cluster/

redis01/bin/redis-cli-h 192.168.21.225 -p 7002 c

ps:-c表示连接集群

集群就这样愉快的搭建完了,接下的文章里面会依次介绍如何使用jedis操作单机和集群版redis,jedis如何同spring集成以及如何编写jedis的工具类。

猜你在找的NoSQL相关文章