随笔分类 - 分布式
摘要:1. Hashicorp Raft实现分析 在raft算法中,典型的领导者选举在本质上是节点状态的变更。具体到raft源码中,领导者选举的入口函数就是run(),在raft.go中以一个单独的协程运行,来实现节点状态的变更 在下面的实现代码中,可以看到Follower、Candidate和Leade
阅读全文
摘要:1. Prometheus简介 Prometheus是一个开源的系统监控和报警系统,在2012年由SoundCloud创建,并于2015年正式发布 2016年,Prometheus项目正式加入CNCF基金会,成为继kubernetes之后第二个在CNCF托管的项目,现在已经广泛用于容器和微服务领域
阅读全文
摘要:1. RabbitMQ介绍 RabbitMQ是采用Erlang编程语言实现的高级消息队列协议AMQP(Advanced Message Queuing Protocol)的开源消息队列中间件 消息队列中间件的作用: 应用解耦 流量削峰 异步处理 缓存存储 消息通信 提高系统扩展性 1.1 Rabbi
阅读全文
摘要:1. 一致性哈希算法 关于一致性哈希算法的详解,可以参见这篇博客文章 一致性哈希详解 简单来说,一致性哈希通过哈希环和增加虚拟节点来解决节点变更时的大范围数据迁移和冷热不均的问题 一致性哈希的一个开源实现为:stathat.com/c/consistent 1.1 数据迁移 我们首先从数据迁移的角度
阅读全文
摘要:转载: https://zhuanlan.zhihu.com/p/457375259 根据CAP原理,分布式系统在可用性、一致性和分区容错性上无法兼得,通常由于分区容错无法避免,所以一致性和可用性难以同时成立。对于缓存系统来说,如何保证其数据一致性是一个在应用缓存的同时不得不解决的问题。 需要明确的
阅读全文
摘要:1. 什么是服务器雪崩 雪崩是由于局部故障被正反馈循环,从而导致的不断放大的连锁故障,雪崩通常是由于整个系统中,一个很小的部分出现故障,进而导致整个系统不可用 雪崩出现的根本原因就是系统过载,如果在系统过载的情况下,不进行任何控制,那么会导致系统雪崩 想要避免雪崩有几种常见的方式,第一种就是快速减少
阅读全文
摘要:1. 什么是gRPC拦截器 我们以etcd一个写请求的流程来看gRPC拦截器做了什么工作 当etcd处理一个写请求,比如 put hello world 时,首先etcd client会使用负载均衡算法选择一个etcd节点,发起gRPC调用; 然后etcd节点收到请求后经过gRPC拦截器、Quota
阅读全文
摘要:环境:macos 1. 安装etcd 克隆etcd源码 v3.5.0 是etcd版本,想要下载指定版本在此指定即可 $ mkdir $GOPATH/src/github.com/etcd-io $ cd $GOPATH/src/github.com/etcd-io $ git clone -b v3
阅读全文
摘要:在高并发场景中,通常需要像mysql中那样的自增主键一样的不会重复且自增的id生成 twitter的snowflake就是一种典型的解法,id数值长64位,是一个int64类型,被分为四个部分: 最高位不使用 41位表示收到请求的时间戳,单位为毫秒 5位表示数据中心的id 5位表示机器实例的id 1
阅读全文
摘要:1. StatefulSet为什么而生 在之前的Deployment中,已经可以看到这个控制器有多强大了,对于无状态应用可以做到滚动更新、回滚、扩容等一系列操作 但是对于有状态应用呢? 首先需要明确一个概念,什么是有状态应用? 有状态应用:实例之间有不对等关系、对实例外部数据有依赖关系的应用。最典型
阅读全文
摘要:1. Secret 加密数据并存放在etcd中,让pod内容器以挂载volume方式访问 应用场景:凭据、用户名密码、https证书、docker仓库认证 pod使用secret的两种方式: 变量注入 挂载 1.1 secret使用 首先创建一个secret来保存一个常规的用户名和密码 如果我们要存
阅读全文
摘要:视频类: 尚硅谷docker入门教程,快速上手 【尚硅谷】Docker迅速入门丨零基础学docker 周阳主讲_哔哩哔哩_bilibili 尚硅谷k8s入门教程,快速上手,偏向运维 尚硅谷Kubernetes教程(K8s入门到精通)_哔哩哔哩_bilibili 【尚硅谷】Kubernetes(k8s
阅读全文
摘要:1. service 防止pod失联(服务发现) 定义一组pod的访问规则(负载均衡) 服务发现 假设现在是一个deployment控制器,一般为了保证高可用都会至少部署三个副本,而且三个pod都有独立的ip地址 当一个pod挂掉之后,deployment会立刻拉取一个新的pod,但是新pod的ip
阅读全文
摘要:1. Contriller简介 1.1 什么是控制器 controllers:在集群上管理和运行容器对象 通过label-selectors关联 Pod通过控制器实现应用的运维,如伸缩和回滚 k8s中常见的控制器主要有: deployment job cronjob daemon statefuls
阅读全文
摘要:1. 什么是Pod 1.1 Pod的基本概念 Pod就是一组共享了某些资源的容器 Pod的设计是为了亲密性应用可以共享存储和网络而设计 什么是亲密性应用场景: 两个应用之间发生文件交互 两个应用需要通过127.0.0.1或者socket通信 两个应用需要发生频繁调用 1.2 pod的实现机制和设计模
阅读全文
摘要:1. 常用指令 1.1 创建一个java测试项目 kubectl create deployment java-web --image=lizhenliang/java-demo apply和create的区别: apply是资源的创建和更新,create只能用于资源创建,再更新yaml之后是不能用
阅读全文
摘要:1. 配置要求 至少三台虚拟机,一个master两个node 硬件配置:2GBRAM,2个CPU,30GB磁盘 操作系统:centos 7.x 禁止swap分区 可以访问外网,网络互通 角色 IP k8s-master 192.168.241.133 k8s-node1 192.168.241.13
阅读全文
摘要:1. k8s架构组件 kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统 1.1 k8s的基本架构 和一些分布式存储和分布式数据库集群类似,在k8s集群中,也存在着master节点和node节点 其中master节点主要负责pod调度、服务注册、服务发现等一系列管理相关的工作
阅读全文
摘要:首先需要导入依赖 go get gopkg.in/amz.v1/aws go get gopkg.in/amz.v1/s3 1. 初始化ceph连接 在初始化连接之前,我们需要创建一个用户得到accessKey和secretKey,新增用户的指令如下: docker exec ceph-rgw ra
阅读全文
摘要:1. 状态机 从中我们可以得到几个我们需要实现的过程 初始化所有节点为follower 需要一个选举超时定时器,当定时器超时时,一个follower状态转为candidate candidate向其他节点请求投票,得到半数以上票数成为leader candidate发现新的leader或者自己的te
阅读全文