redis集群搭建1

96
先生_吕
2016.09.02 15:59* 字数 1145

【1 :集群原理】

(1)redis-cluster架构图

架构细节:

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

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

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

     (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->value

Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点

(2)redis-cluster投票:容错

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

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

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

b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

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

【2:ruby环境

redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:

安装ruby

yum install ruby

yum install rubygems

安装ruby和redis的接口程序

拷贝redis-3.0.0.gem至/usr/local下

执行:

gem install /usr/local/redis-3.0.0.gem(是一个gem文件)

【3 : 创建集群节点】

这里在同一台服务器用不同的端口表示不同的redis服务器,如下:

主节点:127.0.0.1:7001      127.0.0.1:7002      127.0.0.1:7003

从节点:127.0.0.1:7004      127.0.0.1:7005      127.0.0.1:7006

mkdir创建redis-cluster集群目录文件并在此目录下创建子空文件夹(最好以将用的端口命名)

mkdir  7000  7001  7002  7003  7004  7005  7006

分别将安装的bin文件复制进各个目录,并修改每个目录的redis.conf文件配置

需要配置的内容

port XXXX

#bind 192.168.101.3

cluster-enabled yes

pidfile /var/run/redis7001.pid

【4 : 启动每个节点】

分别进入7001、7002、...7006目录,执行:

./redis-server redis.conf

查看进程

【5 : 执行创建集群命令】

创建集群需要执行./redis-trib.rb文件,此文件在redis解压包的src下,并且./redis-trib.rb是ruby脚本,需要ruby环境

执行语句:

--------------------------------------------------------------------------

./redis-trib.rb  create  --replicas  1  192.168.131.102:7001  192.168.131.102:7002 192.168.131.102:7003  192.168.131.102:7004  192.168.131.102:7005  192.168.131.102:7006

--------------------------------------------------------------------------

注意:

这里的./redis-trib.rb运行文件是在redis解压文件的src目录下

说明:

redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

replicas指定为1表示每个主节点有一个从节点

注意:

在开启集群时  启动./redis-cli时要用集群模式启动

普通模式:./redis-cli -p port

集群模式:./redis-cli -c  -p port

注意:

如果执行时报如下错误:

[ERR] NodeXXXXXXis not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb

【6 : 成功及查询集群信息】

集群创建成功登陆任意redis结点查询集群中的节点情况。

cluster nodes查询集群结点信息

cluster info查询集群状态信息

info  replication 查看单个局点信息

Redis