redis cluster

redis 3.0引入cluster,试试水,玩一玩


1.准备3个目录

cd /usr/local
mkdir redis_cluster
cd redis_cluster
mkdir 7000 7001 7002


2.分别创建3个redis.conf

cd 7000 && vim redis.conf

port 7000
bind 127.0.0.1
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly no
daemonize yes
pidfile /usr/local/redis_cluster/7000/redis.pid
7001和7002同上,仅数字做替换

3.启停脚本

vim  /usr/local/bin/redis_cluster 

#!/bin/bash

case "$1" in
    start)
        cd /usr/local/redis_cluster/7000/ && /usr/local/redis3.0/bin/redis-server redis.conf
        cd /usr/local/redis_cluster/7001/ && /usr/local/redis3.0/bin/redis-server redis.conf
        cd /usr/local/redis_cluster/7002/ && /usr/local/redis3.0/bin/redis-server redis.conf
        echo "redis cluster started"
    ;;

    stop)
        kill $(cat /usr/local/redis_cluster/7000/redis.pid)
        kill $(cat /usr/local/redis_cluster/7001/redis.pid)
        kill $(cat /usr/local/redis_cluster/7002/redis.pid)
        echo "redis cluster stopped"
    ;;

    *)
        echo "Usage: redis_cluster {start|stop}"
        exit 64  # EX_USAGE
    ;;
esac

exit 0

4.启动

redis_cluster start

此命令启动3个redis server,但彼此不通信,不构成集群

首次启动后

redis-trib.rb create --replicas 0 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

使用redis src目录下的redis-trib工具,将三个单点串成集群,按提示输入yes后,会分别在7000,7001,7002目录下生成nodes.conf。--replicas 0表示无slave,三个节点全为master

下次启动redis_cluster start即可,不需要再次使用redis-trib工具。redis-trib工具作用就是首次生成nodes.conf

more /usr/local/redis_cluster/7000/nodes.conf 
a734131671bb4f7280c35aa9727e570b7adcdcf3 127.0.0.1:7002 master - 0 1471252241282 3 connected 10923-16383
dc520376e372da298a79fc785a04f8e702690128 127.0.0.1:7001 master - 0 1471252240977 2 connected 5461-10922
2899304d0f26fcb8feb46fd5c2d04ea8a116c525 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
vars currentEpoch 3 lastVoteEpoch 0


redis cluster没有采用一致性hash,而是引入一个新名词hash slot(哈希槽),首先规定一共有16384个哈希槽(可以认为就是大的数据块),然后将key进行CRC16运算,再对16384取模,落到哪个槽数据就存在哪。

上面more命令输出表明,一共3个master节点,所以把16384分成3段,每人负责一段。当某个key CRC16运算对16384取模后就可以知道7000,7001,7002谁负责该数据了

5.停止

redis_cluster stop


6.redis-trib

redis-trib没有的话可以官网下载,redis-trib.rb 不带参数可以查看更多集群管理命令。本机闹着玩,这样就够了,生产环境,每个节点必带slave


连接集群redis-cli -c -p 7000

get  set使用上同单点redis,此时连接的是7000,当key落在7001或者7002时,会有个提示信息如下:

127.0.0.1:7000> set aaa 123
-> Redirected to slot [10439] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get aaa
"123"
127.0.0.1:7001> 

-> Redirected to slot [10439] located at 127.0.0.1:7001
注意此行,可以看到aaa落在哈希槽10439,该7001负责


python client包:pip install redis-py-cluster

使用上与非cluster无明显变化,不予赘述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值