运维
文章平均质量分 75
钟大發
这个作者很懒,什么都没留下…
展开
-
故障发散-从一个Nginx502问题来复习一下SNI
现象:某日某服务通过代理访问某公网地址:xxx-test.hhfx.cn,出现502 的情况,但直接访问该网站可以正常完成请求,查看502报错时间段的日志,出现了SSL_do_handshake() failed (SSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv1 alert handshake failure的报错。分析目前内网服务调用公网接口,使用的是Nginx正向代理的方式进行的,且默认使用4层代理,仅做TCP层面的端口转原创 2022-05-19 10:38:12 · 622 阅读 · 0 评论 -
Kubernetes开发(1)—环境以及代码目录结构
Big Picture环境Kubernetes 版本:v 1.19.7golang 版本:1.16.2(因为m1,不得不使用如此高版本的go…)目录结构.├── BUILD.bazel -> build/root/BUILD.root├── CHANGELOG├── CHANGELOG.md -> CHANGELOG/README.md├── CONTRIBUTING.md├── LICENSE├── LICENSES├── Makefile -> build/原创 2021-05-14 17:25:07 · 438 阅读 · 0 评论 -
ansible开发(3)
插件自定义开发插件的执行优先级是高于模块的,且和模块的使用有很大的区别和模块使用不同,插件是在ansible 服务器上执行的由于是在ansible 服务器上执行的,所以需要遵循ansible 和 本地python的版本做匹配,且开发语言只能是python使用场景除Paramiko, SSH, Local, Winrm连接方式外,希望Ansible基于新的通信方式与远程主机交互,比如需要支持SDN的一些协议,比如netconf等。基于Connection类型插件进行编写,在配置文件/a原创 2021-05-08 15:51:22 · 339 阅读 · 2 评论 -
ansible开发(2)
模块自定义开发ansible的模块非常多,官方/社区提供的模块数量非常多,大多数都可以满足需求,但有时候需要满足公司业务的一些特殊需求,则需要自己对模块的开发。ansible module的原理根据ansible 搜索路径找到inventory 以及对应的模块路径加载模块文件ansible 将模块加载到内存中,并同步生成对应的临时py文件(python脚本), 并将文件传到目标服务器(基于ssh),期间会打开3次ssh 链接,分别是传脚本-传文件-赋权限执行并返回结果删除临时py文件原创 2021-05-08 15:50:34 · 312 阅读 · 2 评论 -
ansible开发(1)
Big Pictureansible 的用途和使用场景就不再赘述了,日常使用中难免会遇到一些定制化需求,比如对接自动化操作平台需要将ansible api化,对接一些其他平台/网络设备/存储设备等需要自己定制模块进行自动化运维等,所以ansible的二次开发比较常见。开发类别ansible 开发主要分为4大类:api的调用&&重封装modules的开发plugin的开发源码的修改api的调用&&重封装ansible 一般使用都是基于命令行的方式进行原创 2021-05-08 15:49:50 · 373 阅读 · 0 评论 -
K8S水平伸缩-HPA
HPA(Horizontal Pod Autoscaler)K8S的水平扩缩容其实也是由一个独立的控制器管理的, 也就是HPA。API 细节HPA 属于 autoscaling API 组的资源组kubectl api-versions | grep autoscalautoscaling/v1autoscaling/v2beta1autoscaling/v2beta2autoscaling/v1:只支持基于CPU指标的缩放。autoscaling/v2beta1:支持Reso原创 2021-04-26 11:27:34 · 403 阅读 · 0 评论 -
故障发散-vm.min_free_kbytes
之前有次DBA 新来了个小朋友,申请了30台VM 进行部署,没多久和我说机器无法登录了,排查后发现机器无脑重启,盲猜一定改了一些内核参数(公司DBA的一个坏习惯,老是喜欢百度一下直接改,却从不关心为啥这么改),DBA 支支吾吾说改了vm.min_free_kbytes, 数字大到可怕,原来他以为单位是字节,但其实是kb,我说你知道这个参数的意义以及后果么,小朋友支支吾吾,只能感叹一知半解多可怕也多害人,最后只能救援模式慢慢改回来了。vm.min_free_kbytes即强制Linux 系统最低保留多少空原创 2021-03-16 17:01:24 · 623 阅读 · 0 评论 -
Kafka运维&&开发扫盲(1)
开发的时候经常使用kafka来解耦自己的代码,运维中的kafka 大多数也是稳定就不管了,大致记录一下一些基本概念和常见的优化方案,以及代码的常规使用方式。概念扫盲基本体系架构: producer + broker + consumer + zk集群producer: 生产者, 用于生产消息Broker: 服务代理,可以理解为kafka集群的服务器,通常一台机器部署一个Kafka实例consumer: 消费者, 用于消费消息consumer group: 多个consumer组成一个con.原创 2021-02-05 11:41:09 · 262 阅读 · 0 评论 -
Linux Signal(信号)
Kill 与信号进程间的通信可以通过信号进行通信,基于这个方式,所以kill说白了就是kill 作为一个进程,对另外一个进程发送了一个signal的信号,程序捕获这个信号,进行操作。信号的作用信号的常规使用是为了程序的优雅退出,重载,热更新等等,为了实现这个目的,程序会在代码里进行信号的监听,常规的做法就是在主程序里写个(while listen…)Linux 本身会有很多信号,可以kill -l 看下默认支持得信号。信号得种类大家习惯使用KILL -9 杀进程,不知道有没有遇到过没有杀掉进程的情原创 2021-02-02 15:33:29 · 741 阅读 · 0 评论 -
Linux运维面试题(1)
Big Picture年底了,面试/被面试的需求比较多,整理一下传统运维的基础面试题,每次10题,随缘更新介绍下HTTP请求/响应报文结构一个HTTP请求报文由四个部分组成:请求行,请求头部,空行,请求数据请求行 GET /data/info.html HTTP/1.1(请求方法, URL, HTTP版本)请求头 大多数服务器在请求中都会在头部带上游览器信息等空行 空行标识请求头部的结束请求数据:请求主体,在GET方法中这里一般会是空一个HTTP响应报文由三个部分组成: 状态行,原创 2021-01-28 11:30:37 · 354 阅读 · 0 评论 -
调整CPU频率
cpu性能模式一台物理服务器使用时候,如果发现明显的延迟,就连ping都比平时慢很多,那么怀疑点可以放在cpu的性能模式上,或者说,可以关注一下cpufreq,即cpu的使用频率。一台服务器出厂之后,bios如果没有初始化,可能五花八门的cpu频率设置,服务上生产后,可能就会发生一些意想不到的问题。不过好在可以直接在线修改。cpufreq的五种模式五种模式本质上表示的是对cpu频率的五种策略userspace 让用户态的程序可以通过接口动态调整cpufreqconservative 动态调整,l原创 2021-01-28 11:26:32 · 2784 阅读 · 0 评论 -
calico源码分析-ipam(2)
Big Picturecalico 释放IP的逻辑相比分配IP的逻辑要简单很多,老样子,先画个图:然后看代码,从cmdDel开始看:func cmdDel(args *skel.CmdArgs) error { ...... handleID := utils.GetHandleID(conf.Name, args.ContainerID, epIDs.WEPName) ...... if err := calicoClient.IPAM().ReleaseByHandle(原创 2021-01-28 11:20:37 · 972 阅读 · 0 评论 -
calico源码分析-ipam(1)
背景生产要把网络插件换成calico,对于IP的分配方法有点存疑,花了2天看下了calico-ipam的源码,学习下calico的IP分配逻辑,对比生产环境,看看有没有明显的坑。calico比较突出的一点是可以指定单个pod的ip,也可以指定一个RS的网段,但实际用的比较少,首先不可能单个pod部署,一个rs指定一个ippool的意义并不是很大,所以主要看下自动分配的代码逻辑,代码其实不是很多,但几个概念挺绕的,根据目前的了解,简单画了一个流程图:IPAM的入口还是老三样,分IP 从cmdAdd开始原创 2021-01-27 14:47:44 · 2171 阅读 · 0 评论 -
从iptables 到 nf_conntrack(1)
Big Picture1公司的监控服务器开启ipatbles 以后,经常会报kernel: nf_conntrack: nf_conntrack: table full, dropping packet的内核报错,原因是conntrack 表满了,常规的做法是以下几种:sysctl –w net.netfilter.nf_conntrack_max = 2097152 #状态跟踪表的最大行数的设定sysctl -w net.netfilter.nf_conntrack_buckets = 104857原创 2021-01-19 16:58:26 · 558 阅读 · 1 评论 -
tmux分屏操作
产线如果需要批量操作,有时候需要一起来一起观察日志,比如同时tail日志,同时开启top等,这样用ansible就不太合适了,以前用screen 手动一个个开窗口,或者借助xshell自带的一些功能进行处理,之前一个同事推荐了tmux,网上教程一大堆,其实大致逻辑就是新建session->新建window->划分pane, 其中比较好的一篇教程是这个:[https://www.w3cschool.cn/tmux/tji9dozt.html],但实际使用中,老是记命令其实也记不全,所以根据需求..原创 2021-01-18 10:11:02 · 889 阅读 · 0 评论 -
Linux 宕机-Kernel Crash的原因分析-第一批
日常工作中,经常遇到各类服务器"hang"死,load暴涨,无法ssh只能无奈重启的情况,“hang” 死只是表象,其实大多数原因都可以避免,简单总结下:场景1:task blockedJan 1 09:30:03 mydev kernel: INFO: task java:18777 blocked for more than 120 seconds.Jan 1 09:30:03 mydev kernel: "echo 0 > /proc/sys/kernel/hung_task_t.原创 2021-01-06 18:01:05 · 3193 阅读 · 0 评论 -
亲和性&&反亲和性 污点&&容忍
亲和性 && 反亲和性在默认的K8S调度中,一般经过预选和优选即可完成调度,但是生产的实际使用中,考虑到部分业务的特殊性,一般会手动进行一些"指定", K8S 把这些"指定"分为nodeAffinity(节点亲和性)、podAffinity(pod 亲和性) 以及 podAntiAffinity(pod 反亲和性), 这在调度过程中,称之为亲和性调度,亲和性调度可以分成软策略(preferredDuringSchedulingIgnoredDuringExecution )和硬策略(re原创 2021-01-06 14:28:14 · 673 阅读 · 0 评论 -
K8S的调度优先级与抢占机制
Big Picture在调度过程中,会有各种预选和优选算法,在经过了那么多道门槛之后,一个POD才能完成调度,提供服务,在调度过程中,假设有一个很重要的系统服务调度失败了,导致了故障,为了避免这种情况,我们可以对该应用设置一个相对较高的优先级,在调度失败后,将一些优先级相对较低的不是那么重要的应用”挤走“,这就是K8S调度的优先级和抢占的作用。优先级K8S有一个专门的API对象,就是优先级,比如:apiVersion: scheduling.k8s.io/v1beta1kind: Priority原创 2020-12-28 17:09:57 · 1378 阅读 · 0 评论 -
K8S的调度算法
Big PictureK8S的调度说实话一般没啥人改,因为一般的体量,基于K8S内置的算法基本就满足了,但对于大体量和特殊场景来说,还是很有必要进行修改的,比如假设有好几种业务场景的pod,需要按需要调度到不同的rack上,传统做法当然可以对Node进行label,然后在不同业务的pod上做match,同样的,也可以修改调度器,在调度的时候自动进行调度,类似的场景有点像openstack的filter模块,所以理解K8S的调度还是非常有必要,毕竟先了解了,才能修改。informer机制,调度的开始K8原创 2020-12-28 17:08:33 · 2780 阅读 · 0 评论 -
K8S的Qos如何保障重要服务?
什么是Qos众所周知,k8s的资源分配主要基于container的resources进行限制,其中又分为了requests和limits 两个字段,分别表示容器的基本所需资源以及最大限制,该2个字段的最大作用,就是为K8S的调度以及资源回收服务。Qos是啥,假设一条通道只能容纳100人,当我们有120人需要疏散的时候,如何让老人小孩先走,Qos就是将老人小孩的重要级调高,从而保障老人小孩可以在第一批通过。回到K8s,当一台Node的资源即将耗尽,如何保障我们的Node上的系统服务(比如calico的da原创 2020-12-28 17:06:00 · 477 阅读 · 0 评论 -
Flannel 三大模式原理分析
基本概念容器的网络交互,大致上分为overlay和underlay 两大类,underlay 一句话总结就是底层传统网络,服务底层服务器/网络设备的互联互通, overlay 一句话总结就是基于隧道技术在underlay上的叠层网络,流量需要跑在underlay上。Flannelflannel作为K8S最常见的一个非官网CNI,支持3种网络实现: UDP, VXLAN, HOST-GW, 学习一下用于理解传统意义上的overlay网络方案还是非常好的。UDP模式UDP模式利用了Linux的一个特殊原创 2020-12-23 18:19:44 · 2504 阅读 · 0 评论 -
Calico BGP搭建(TOR)
calico 架构组件清单组件版本k8s集群1.14calico-kube-controller3.8.9calico-node3.8.9calicoctl3.8.9docker18.09.6etcdv3其中calico-node 包含了相同版本的CNI(即calico-cni 和calico-ipam)基本架构图基本架构基于calico-BGP 的网络互联方式,BGP 互联地址 && Node管理IP都在同一原创 2020-12-23 11:22:42 · 2133 阅读 · 0 评论 -
K8S存储插件-FlexVolume && CSI
K8S的自定义存储插件和K8S的网络不太一样,K8S的网络只有CNI一种接口暴露方式,所有的网络实现基于第三方进行开发实现,但存储的内置实现就多达20多种,#K8S目前支持的插件类型#。但内置的往往不满足定制化的需求,所以和CNI 一样,K8S 也暴露了对外的存储接口,和CNI 一样,通过实现对应的接口方法,即可创建属于自己的存储插件,但和CNI 有点区别的是,K8S的存储插件的自定义实现方式,有FlexVolume 和 CSI 两种,两者的差别可以看做是新老功能的差异,但目前为止,FlexVolume原创 2020-12-22 17:49:15 · 3186 阅读 · 0 评论 -
prometheus sd(service discovery)学习
生产上线prometheus后遇到了一个监控覆盖度的问题,prometheus 是通过server端配置里的targets来获取监控对象的,targets的获取又是依赖discovery模块进行获取的,prometheus默认支持很多的discovery的模块,以2.19版本为例,他就支持了如下sd的方式: "github.com/prometheus/prometheus/discovery/azure" "github.com/prometheus/prometheus/discovery/cons原创 2020-11-05 00:02:28 · 1560 阅读 · 0 评论 -
常用Linux性能工具汇总
Linux的性能分析一直是个挺讨厌的问题,一般半年遇不到,遇到一次就很够折腾的,Linux的性能分析工具又层出不穷,这边简单汇总下我日常常用的一些工具。vmstat[root@dev001 ~]# vmstat 2 2procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in原创 2020-11-02 22:36:06 · 420 阅读 · 0 评论 -
Linux 文件系统备用知识点
最近因为一些需求,需要复习一下Linux的文件系统,简单对磁盘&&文件系统做一个归纳,温故而知新。硬盘是怎么变成文件系统的硬盘这东西不知道大家拆过没,里面是一片片带有磁性的盘片,每个盘片有两个面,都可记录数据。一个圆盘基于圆心又有好几个同心圆,这个圆就是磁道。每个磁道又按照512个字节为单位划分为等分,这就是存放数据的基本单位,即扇区。每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。而磁盘就是由上面三个项构成的,磁盘容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节原创 2020-11-01 23:58:15 · 219 阅读 · 0 评论 -
CNI开发的基本套路
背景CNI 这东西搞容器的运维想必都不陌生,要知道,kubernetes的设计之初是不包含网络的,网络这玩意每家公司有每家公司自己的玩法,对各个公司来说,没有那种大一统的完美方案,只有最适合自己的方案,所以,kubernetes在设计的时候,没有设计统一的网络方案,只提供了统一的容器网络接口,Container Network Interface,也就是所谓的CNI。CNI 和 IPAM一般说的CNI都是包含IPAM的,但其实2个功能是分开实现的。CNI用于实现网络构建(network部分,网原创 2020-10-30 00:12:41 · 1198 阅读 · 0 评论 -
如何用好你的CPU,NUMA小笔记
背景NUMA 这个词干运维的同学一定不陌生,因为往往会唤起很多惨痛的血泪史,个人认为NUMA作为CPU发展的一个必然趋势,是很值得好好学习(复习)一下的。CPU 架构的进化关于什么是NUMA,我们可以拆开我们的笔记本电脑看一下,会发现哪怕有多个CPU的槽位,但依然只有一根线接入到内存条那里,类似下面那个逻辑图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ex3ObT4u-1603987772920)(DB9E72D35C4A4ABFAAAC503EB1C8098原创 2020-10-30 00:10:18 · 645 阅读 · 0 评论 -
重新认识CPU飙高
只要是玩Linux的,只要CPU变高了,想到的第一个Linux性能排查工具大多数是TOP,然后即使使用TOP,很多运维同学看的也永远是那几行,server load, mem 使用率,CPU使用率等,然后看看哪个进程高了,然后看看是不是core了之类的,在这个过程中,有些很基础但是很容易被大家忽略的问题,load多少算高?有啥评判标准?万一每个进程CPU使用率都很高/很低,那我该杀哪个呢?CPU使用率有些进程已经超过100%了,这个100%怎么来的呢?首先我觉得要先理解啥是load 和 cpu usage原创 2020-10-30 00:09:10 · 314 阅读 · 0 评论 -
helm实战小攻略
Why Helm日常操作kubernetes 的编排,一般都是以下几个步骤:创建namespace->创建对应的rs(deployment,statefulset)->创建对应的service->创建对应的Ingress可能有些app还需要pv/pvc或者secretmap之类。纯靠手工管理简直反人类,所以一般的云平台都会直接调用client-go进行各类resource的创建,通过提前预置的信息作为模板调用K8S API,实现统一管理,该做法比较正规,但是对于云平台的开发者来说,原创 2020-10-30 00:06:39 · 719 阅读 · 0 评论 -
TCP三次握手&&四次挥手
常见的业务故障或者性能瓶颈大多数都是TCP连接问题造成的,所以细致的理解各个tcp状态非常方便排障。TCP三次握手链接状态:客户端像服务端发送请求连接包,标识位为SYN,seq=x, 客户端状态SYN_SEND服务端收到消息SYN包,需要客户端确认一次,所以回了一个数据包, 标识位为SYN+ACK,seq=y,ackno=x+1,服务端状态为SYN_RECV3.客户端收到服务端发来的...原创 2020-03-06 15:47:52 · 242 阅读 · 0 评论 -
Linux 常见Kernel优化
kernel常见优化linux内核参数其实一般不改也没关系,一般公司的业务服务器很少会突破默认的kernel限制,但是对于一些特殊应用如nginx之类业务入口或者高并发服务器,如果出现性能问题导致故障,其实挺难查的,所以记录一下日常遇到过的一些优化方案。tcp_retries2控制内核向已经建立连接的远程主机重新发送数据的次数,低值可以更早的检测到与远程主机失效的连接,因此服务器可...原创 2020-03-06 15:43:32 · 701 阅读 · 0 评论 -
KVM备忘录(2)
kvm 管理工具对于管理kvm 其实已经有了很多比较成熟的工具,常用的比如以下这种:libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。Virsh:基于 libvirt 的 命令行工具 (CLI)...原创 2020-03-06 15:38:09 · 649 阅读 · 0 评论 -
KVM 备忘录(1)
背景KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度。kvm基于内核空间,相当于内核空间的一个模块,但由于是存在于内核空间的,所以用户无法调用它,所以需要qemu作为用户空间工具。CPU 对虚拟化的支持以及性能kvm基于X86的...原创 2020-03-06 15:36:54 · 274 阅读 · 0 评论 -
cpu三大架构 numa smp mpp
背景系统的性能很大程度上依赖于cpu 硬件架构的支持。这里记录一下cpu 常见的三大架构的区别smpSMP (Symmetric Multiprocessing) , 对称多处理器. 顾名思义, 在SMP中所有的处理器都是对等的, 它们通过总线连接共享同一块物理内存,这也就导致了系统中所有资源(CPU、内存、I/O等)都是共享的,当我们打开服务器的背板盖,如果发现有多个cpu的槽位,但是...原创 2020-03-06 15:35:40 · 448 阅读 · 0 评论 -
Redis高可用解决方案
哨兵哨兵是个基于redis HA解决方案,他支持redis 自身的主从角色替换,所以严格来说他其实只是个redis的主从监控服务,当主从角色关系发生变化后,由于IP 发生变化,仍然需要手动干预,当然同样可以通过脚本解决。基本主从复制redis 的主从复制主要有以下几点:redis从在服务起来后,像主redis 发送sync包,通知redis 主服务我是你的从之一(redis支持一主多从)...原创 2020-03-06 15:34:16 · 265 阅读 · 0 评论 -
Redis 持久化详解
转载自:http://blog.nosqlfan.com/html/3813.html时间久远,竟然打不开了。。持久化什么是持久化,简单来讲就是将数据放到断电后数据不会丢失的设备中。也就是我们通常理解的硬盘上。写操作的流程首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程。1.客户端向服务端发送写操作(数据在客户端的内存中)2.数据库服务端接收到写请求的数据(数...转载 2020-03-06 15:23:17 · 465 阅读 · 0 评论 -
Redis 集群备忘录
背景redis cluster 是基于redis3.0出的redis 集群架构,从网上down 了一张图可以比较清晰的说明redis cluster的工作方式:有几点比较重要,redis cluster 内部使用二进制协议优化传输速度和带宽。节点是否fail 是根据半数以上的node 投票决定的。客户端与redis节点直连,理论上随便选个端口和IP就能连接redis cluster是...原创 2020-03-06 15:19:58 · 286 阅读 · 0 评论 -
svn搭建(webdav 协议)
基础环境SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。系统版本cat /etc/debian_version7.4三种访问模式tcp/ip协议 svn://webdav协议 http://本地或网络...原创 2020-03-06 15:17:52 · 906 阅读 · 0 评论 -
Somkeping 搭建
smokeping 是由perl 写的一个用于实时监控外网网络的软件,通过rrd 生成图表监控,用于IDC网络的监控是非常有效果的依赖包安装yum install libxml2-devel libpng-devel pango pango-devel libart_lgpl libart_lgpl-devel freetype freetype-devel fontconfig cairo ...原创 2020-03-06 15:15:43 · 397 阅读 · 0 评论