Linux环境下Redis集群的搭建

一、安装Linux客户端

具体安装步骤见本人另一篇博客
https://blog.csdn.net/qq_22118991/article/details/100117996

二、集群原理

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)错误

3.Ruby环境

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

     cd redis-3.0.7/src
     ll *.rb

安装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集群,每个节点有一主一备,因此需要六台虚拟机,由于本人电脑比较渣,因此搭建6个Redis实例模拟几群的环境。

1.创建实例并修改配置

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

这里在同一台服务器用不同的端口表示不同的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
修改各个实例的端口号:

并打开cluster-enabled 前的注释:

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

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

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

执行脚本,运行实例。

     ./startAll.sh
     ps aux|grep redis

可以看到,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

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

四、测试集群

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

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

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

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

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

至此Redis集群搭建完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值