哨兵模式:由一个或多个Sentinel实例组成的Sentinel系统,它可以监视所有的Master节点和Slave节点,并在被监视的Master节点进入下线状态时,自动将下线Master服务器。集群模式:在集群模式下,数据被分片存储在多个Redis节点上,每个节点都负责处理一部分数据。
基于以上, Redis 集群方案显得尤为重要。通常有 3 个途径:官方 Redis Cluster ;通过 Proxy 分片;客户端分片 (Smart Client) 。以上三种方案各有利弊。
以Java语言为例,简单说一下,除了一些公司自主开发的集群外。常用的解决高并发问题的集群一般有三种:使用redis-trib.rb,这个是安装redis时就自带的一种集群,采用了服务端分片的方式,支持主备,此集群既解决了高并发的问题,也解决了高可用的问题。Jedis使用JedisCluster类来访问。
方案 Redis官方集群方案 Redis Cluster Redis Cluster是一种服务器Sharding技术,0版本开始正式提供。Redis Cluster中,Sharding采用slot(槽)的概念,一共分成16384个槽,这有点儿类pre sharding思路。对于每个进入Redis的键值对,根据key进行散列,分配到这16384个slot中的某一个中。
redis-cluster投票:容错,投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉。集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。
1、DRBD,全称为Distributed Replicated Block Device Driver,提供了一种高可用性集群解决方案,包括单主模式和复主模式。在单主模式中,集群通常具备高可靠性,而复主模式则适用于需要双节点并发访问数据的场景,需要特定的配置以共享cluster文件系统,如GFS和OCFS2。
2、Distributed Replicated Block Device (DRBD) 是一种软件实现的存储复制解决方案,它在服务器间镜像块设备内容,采用无共享架构,确保数据一致性。DRBD提供两种工作模式:实时同步(所有服务器成功后返回)和异步(本地服务器成功后返回),以满足不同的需求。
3、在技术交流中,常遇到的缩写词DRBD实际上是Distributed Replicated Block Device的缩写,中文直译为“简介分布式复制块设备”。这个术语主要应用于计算机和网络领域,特别是数据存储和灾备解决方案中。DRBD提供了一种网络化的数据镜像功能,归类于RAID-1级别的冗余磁盘阵列。
Redis,凭借其高效的数据操作和丰富结构,已成为开发者信赖的基石。然而,随着业务规模的增长,单点的扩展限制催生了Codis,一个专注于提供无感知水平扩展和高可用性的分布式Redis集群。本文将深入剖析Codis的核心架构、数据可靠性、扩展策略以及运维实践,展示它如何在直播行业中的广泛应用。
比如,SSD将内存换成了磁盘,以换取更大的容量。更自然的想法是将Redis变成一个可以水平扩展的分布式缓存服务,在Codis之前,业界只有Twemproxy,但是Twemproxy本身是一个静态的分布式Redis方案,进行扩容/缩容时候对运维要求非常高,而且很难做到平滑的扩缩容。
redis-trib.rb脚本(rub语言)为集群的管理工具,比如自动添加节点,规划槽位,迁移数据等一系列操作。节点的fail是通过集群中超过半数的节点检测失效时才生效。
Zookeeper :保存所有 redis 集群的实例地址, redis 实例按照约定在特定路径写入自身地址,客户端根据这个约定查找 redis 实例地址,进行读写。Redis 实例:我们修改了 redis 源码,当 redis 启动或主从切换时,按照约定自动把地址写到 zookeeper 特定路径上。
集群高可用:考虑堆叠控制平面或外部etcd节点,实现集群的高可用性。 高级功能扩展 Dashboard与访问控制:安装并配置Kubernetes Dashboard,设置NodePort服务以供外部访问。 监控与负载均衡:部署Nginx+Keepalived,实现k8s-api-server的高可用性。
准备3台机器,分别设置hostname如下所示(此处主要是为了便于标识不同的机器,其实不设置hostname也可以正常搭建):参考《 使用Kubeadm搭建Kubernetes(11)集群 》在 master1 搭建一个单master节点的k8s集群。
一般建议5个节点,超过五个虽然容错性更高,但是集群写入性就会差。
本文主要在centos7系统上基于 docker 和 flannel 组件部署 v26 版本的k8s原生集群,由于集群主要用于自己平时学习和测试使用,加上资源有限,暂不涉及高可用部署。此前写的一些关于k8s基础知识和集群搭建的一些 方案 ,有需要的同学可以看一下。机器均为8C8G的虚拟机,硬盘为100G。
最近依照网上不少文章部署K8s高可用集群,遇到了一些麻烦,在这里记录下来。根据K8s官方文档将HA拓扑分为两种,Stacked etcd topology(堆叠ETCD)和External etcd topology(外部ETCD)。