Redis-cluster集群傻瓜配置+Python操做集群小demo

致谢

首先感谢提供机器让我测试的Sequin_YF、Paranoid同窗,没有大家,没有本文。
以及友好的redis.cn的各类中文教程,本文主要来自redis cluster教程html

正文

Redis-cluster简介

Redis做为大火的K-V NoSQL天然不用细说。
Redis的集群方案能够参照这个Redis集群怎么作 问题的回答
而关于本篇中的集群我引用了redis cluster教程的叙述java

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
Redis集群并不支持处理多个keys的命令,由于这须要在不一样的节点间移动数据,从而达不到像Redis那样的性能,在高负载的状况下可能会致使不可预料的错误.
Redis 集群经过分区来提供必定程度的可用性,在实际环境中当某个节点宕机或者不可达的状况下继续处理命令. Redis 集群的优点:
自动分割数据到不一样的节点上。
整个集群的部分节点失败或者不可达的状况下可以继续处理命令。node

傻瓜配置

主要须要Redis (version > 3,我用的3.2.8)、 Ruby、 Rubygems,其余的即是一些简单重复的操做了。正所谓懒惰即美德,我把这些操做写成了一个脚本,我本身不是很会shell,sed,awk,grep这些,因此写的很粗糙很丑陋,不过能用是第一步的嘛!优化能够慢慢来~
脚本流程即是执行脚本–>下载Redis. Ruby Rubygems 。。安装.–>修改配置文件–>设置节点目录–>启动节点python

注意点

分布式集群嘛,天然一台机器不行,脚本默认master机器采用端口7000,7001,7002,slave采用7003,7004,7005.能够提早使用netstat -apn | grep 端口号 查看端口是否被占用。git

在执行脚本成功后,用ps -ef | grep "redis" 查看下github

测试是否成功

如图即为成功web

目前的版本还须要一些操做才能让集群正式跑起来。
在一台机器上输入
redis-trib.rb create --replicas 1 192.168.30.132:7009 192.168.30.132:7010 192.168.30.132:7011 192.168.30.120:7000 192.168.30.120:7001 192.168.30.120:7002
建立3master–3slave的集群(彷佛master和slave是自动分配的),上面的参数1 就是1对1啦
建立成功以下redis

部分结果截图

而后就能够用redis-cli 测试一下了
输入redis-cli -h 192.168.30.132 -c -p 7009 链接数据库
写入一条K-Vset test ok
查看 get testshell

测试结果

其余机器也能够查看到相同的结果,成功啦~数据库

傻瓜脚本地址

傻瓜脚本地址–>github 固然,这里可能(必定)还有不少问题,但愿你们多多提出意见哈。

Python操纵集群demo

引用自redis.cn的集群教程

Redis 集群现阶段的一个问题是客户端实现不多。
如下是一些我知道的实现:
redis-rb-cluster 是我(@antirez)编写的 Ruby 实现, 用于做为其余实现的参考。 该实现是对 redis-rb 的一个简单包装, 高效地实现了与集群进行通信所需的最少语义(semantic).
redis-py-cluster 看上去是 redis-rb-cluster 的一个 Python 版本, 这个项目有一段时间没有更新了(最后一次提交是在六个月以前), 不过能够将这个项目用做学习集群的起点。
流行的 Predis 曾经对早期的 Redis 集群有过必定的支持, 但我不肯定它对集群的支持是否完整, 也不清楚它是否和最新版本的 Redis 集群兼容 (由于新版的 Redis 集群将槽的数量从 4k 改成 16k 了).
使用最多的时java客户端, Jedis 最近添加了对集群的支持, 详细请查看项目README中Jedis Cluster部分.
StackExchange.Redis 提供对 C# 的支持(而且包括大部分 .NET 下面的语言,好比: VB, F#等等)
thunk-redis 提供对 Node.js 和 io.js的支持。
Redis unstable 分支中的 redis-cli 程序实现了很是基本的集群支持, 可使用命令 redis-cli -c 来启动。

咱们使用的即是redis-py-cluster github连接 直接pip下载就好

pip install redis-py-cluster

配合上面的傻瓜配置,咱们就有了第一个demo

first demo

虽然个人github上也有,不过既然这么短仍是贴出来。

#!/usr/bin/env python
# coding=utf-8
# Jack Kang
from rediscluster import StrictRedisCluster
import sys

def redis_cluster():
    redis_nodes = [{'host':'192.168.30.132','port':7009},
                   {'host':'192.168.30.132','port':7010},
                   {'host':'192.168.30.132','port':7011},
                   {'host':'192.168.30.120','port':7000},
                   {'host':'192.168.30.120','port':7001},
                   {'host':'192.168.30.120','port':7002}
                  ]
    try:
        redisconn = StrictRedisCluster(startup_nodes = redis_nodes)
    except Exception,e:
        print "connect error"
        sys.exit(1)

    redisconn.set('name','kk')
    print "name is", redisconn.get('name')

redis_cluster()

才疏学浅,不足之处,欢迎指正