一、安装Linux客户端

具体安装步骤见本人另一篇博客

二、集群原理

1.Redis-cluster架构图



redis linux集群安装 linux redis集群搭建_redis linux集群安装


架构细节:
(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投票:容错



redis linux集群安装 linux redis集群搭建_redis_02


投票:
(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)错误

3.Ruby环境

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

cd redis-3.0.7/src
     ll *.rb



redis linux集群安装 linux redis集群搭建_redis_03


安装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



redis linux集群安装 linux redis集群搭建_redis_04


三、集群的搭建

本文搭建有三个节点的Redis集群,每个节点有一主一备,因此需要六台虚拟机,由于本人电脑比较渣,因此搭建6个Redis实例模拟几群的环境。

1.创建实例并修改配置

在/src/local目录下面创建一个rediscloud文件夹,将之前安装的redis移动至该文件夹下并命名为redis01,同时复制6个实例:



redis linux集群安装 linux redis集群搭建_redis linux集群安装_05


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

主节点:192.168.119.131:7001 192.168.119.131:7002 192.168.119.131:7003
从节点:192.168.119.131:7004 192.168.119.131:7005 192.168.119.131:7006
修改各个实例的端口号:



redis linux集群安装 linux redis集群搭建_redis linux集群安装_06


并打开cluster-enabled 前的注释:



redis linux集群安装 linux redis集群搭建_Redis_07


redis linux集群安装 linux redis集群搭建_Redi集群搭建_08


2.将脚本拷到/rediscloud文件夹下

cd redis-3.0.7/src
     cp *.rb /usr/local/rediscloud/



redis linux集群安装 linux redis集群搭建_Redis_09


3.创建集群

启动6个Redis实例,通过脚本进行启动。创建脚本:

vim startAll.sh

写入如下命令:

cd redis01/bin
./redis-server redis.conf
cd ../../
cd redis02/bin
./redis-server redis.conf
cd ../../
cd redis03/bin
./redis-server redis.conf
cd ../../
cd redis04/bin
./redis-server redis.conf
cd ../../
cd redis05/bin
./redis-server redis.conf
cd ../../
cd redis06/bin
./redis-server redis.conf
cd ../../

给脚本添加执行权限:

chmod +x startAll.sh



redis linux集群安装 linux redis集群搭建_redis linux集群安装_10


执行脚本,运行实例。

./startAll.sh
     ps aux|grep redis



redis linux集群安装 linux redis集群搭建_redis linux集群安装_11


可以看到,6个redis实例都已经在运行了。
使用命令创建集群

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



redis linux集群安装 linux redis集群搭建_Redi集群搭建_12


可以看到,脚本为我们自动创建了三个主节点,每个主节点都有一个从节点,并且将16384个slots分配到了三个主节点上。



redis linux集群安装 linux redis集群搭建_redis linux集群安装_13


四、测试集群

使用任意一个节点的客户端,使用命令:

redis01/redis-cli -h 192.168.119.131 -p 7002 -c

命令中的 -h 表示连接的主机,-p 表示连接的端口号,由于连接的是集群,连接任意一个redis都可以, -c参数表示连接集群,一定不能少。



redis linux集群安装 linux redis集群搭建_Redi集群搭建_14


虽然练得式端口7002,但是通过计算,redis集群将该数据存放在了redis03的实例上了。

下面为缺少 -c 参数的命令,导致连接上集群二无法进行数据操作。



redis linux集群安装 linux redis集群搭建_Redis_15


至此Redis集群搭建完成