redis集群搭建

需要使用redis处理大量数据,单台机器,单个redis实例满足不了需求,需要使用redis集群。redis最新stable(2.8.19)版本,还不支持集群。看了一下其他的开源redis集群方案。

1.Twemproxy

twemproxy是Twitter开源的一个redis和memcache代理服务器。搭建完成后,使用redis-benchmark测试,发现性能减少了将近40%。

2.Codis

Codis是豌豆荚开源的redis集群方案,有优点,但是性能比twemproxy还低。


3.搭建redis集群

使用zookeeper监控redis节点,并更新保存redis各个节点的信息,实现一致性hash。架构如图所示。

redis集群搭建


名词解释:

zk-client: 指使用zookeeper的API实现的程序。

zk-servers:指zookeeper servers集群。

zk-hash,是用tornado实现的web服务器,启动后,开启一个线程从zk-servers中获取redis各个节点的信息。GetKeyNode类进行一致性hash计算,根据get_node请求根据传来的key,计算出对应的redis节点。zk-hash也是一个zk-client,可以连接到zk-servers中任意个zk-server,获得相同的redis节点的信息,因此可以开启多个zk-hash,减少单个zk-hash服务的压力。

zk-redis,是zk-client,监控各个redis节点,向zk-servers注册各个redis节点的信息。修改settings.py里的redis_nodes,可以热更新需要监控的redis节点。

zk-hash 和 zk-client的源码:https://github.com/mxins/redis-cluster


关于ZooKeeper Servers,其大概介绍:

ZooKeeper

Ahighlyavailable, scalable, distributed, configuration, consensus, group membership, leader election, naming, 

and coordinationservice。

Protocol Guarantees

1)Sequential Consistency - Updates from a client will be applied in the order that they were sent.

2) Atomicity - Updates either succeed or fail. No partial results.

3) Single System Image - Aclient will see the same view of the service regardless ofthe server that it connects 

to. 

4) Reliability - Once an update has been applied, it will persist from that time forward until a client overwrites 

the update.

5) Timeliness - The clients view of the system is guaranteed to be up-to-date within a certain bound. Either system changes will be seen by a client within this bound, or the client will detect a service outage。


redis集群搭建

redis集群搭建

以上就是集群的实现,还有许多待完善之处。

关于ZooKeeper Servers集群的搭架,网上很多介绍。

你可能感兴趣的:(redis,cluster,zookeeper,tornado)