介 绍
Redis(REmote DIctionary Server的意思)是一个开源的内存数据存储,通常用作数据库、缓存以及消息代理。它可以存储和操作高级的数据结构类型,比如lists、maps、sets以及排序sets。Redis接受多种格式的键,因此可以在服务器上执行操作,减少客户端的工作负载。它将数据库完全地保存在内存中,只使用磁盘进行持久化存储。Redis是一种流行的数据存储解决方案,受到了Github、Pinterest、Snapchat、Twitter、StackOverflow、Flickr等科技巨头的青睐。
为什么要用Redis?
-
它非常快,它由ANSI C编写,可以在Linux、Mac OS X和Solaris等POSIX系统上运行。
-
Reis经常被评为最流行的键值数据库以及在容器上使用最流行的NoSQL数据库。
-
它的缓存解决方案减少了对云数据库后端的调用。
-
应用程序可以通过客户端API库访问它。
-
所有流行的编程语言都支持Redis。
-
它开源且非常稳定的。
Redis的应用案例
-
Facebook的一些在线游戏中,游戏分数更新频率非常高。当使用Redis排序set时,即使每分钟有数百万用户和数百万个新分数,执行这些操作都非常简单。
-
Twitter在Redis集群中存储了所有用户的时间线。
-
Pinterest将用户关注者图存储在Redis集群中,其中的数据分布在数百个实例中。
-
Github使用Redis作为队列
什么是Redis集群?
Redis集群是一个多Redis实例的集合,用于通过对数据库分区来扩展数据库,使其更具有弹性。集群中的每个成员,无论是主副本还是次级副本,都管理哈希槽的一个子集。如果一个主服务器出现不能访问的故障,那么它的从属服务器会提升为主服务器。在由三个主节点组成的最小的Redis集群中,每个主节点都有一个从属节点(为了至少能保证最低程度的故障转移),每个主节点分配一个范围在0至16383之间的哈希槽。节点A包含哈希槽范围为从0到5000,节点B为5001到10000,节点C从10001到18383。集群内部的通信则通过内部总线进行,使用gossip协议来传播关于集群的信息或者发现新节点。
在Kubernetes上部署Redis集群
在Kubernetes中部署Redis集群很有挑战,因为每个Redis实例都依赖于一个配置文件,该文件跟踪其他集群实例及其角色。为此,我们需要结合使用Kubernetes状态集(StatefulSets)和持久卷(PersistentVolumes)。
前期准备
要完成此次的demo,我们需要有下列准备:
-
Rancher
-
Google云平台或者其他云提供商账号。下面的展示中使用了GKE,不过使用任何云提供商都是可以的,且操作方法大致相同。
启动Rancher实例
如果你没有Rancher的实例,可以参考这里的Quick Start文档简单快速地启动一个: