草庐IT

如何调试Kubernetes集群中的网络延迟问题

就在不久前我也遇到了类似的问题,看似是玄学事件,刚开始归结于网络链路抖动,一段时间后依然存在,虽然影响都是P99.99以后的数据,但是扰人心智,最后通过多方面定位,解决了该问题。最后发现跟业务、网络都没有什么关系,而是基础设施自身出了问题,如下文给了一个具体排查方案,并从一定程度上解释了容器、cgroup、CPU会给网络延迟带来怎样的影响。随着Kubernetes集群规模不断增长,我们对于服务延迟的要求越来越严苛。我们开始观察到一些运行在我们Kubernetes平台上的服务正在面临偶发的延迟问题,这些断断续续的问题并不是由于应用本身的性能问题导致的。我们发现,Kubernetes集群上的应用产

使用企业微信发送Zabbix告警信息

Zabbix作为一款传统的监控软件一直保持稳定的迭代,到目前为止稳定版已经更新到5.4了。Zabbix内置非常多现成的监控项,从操作系统到常用的软件Redis、MySQL等,几乎都可以找到对应的监控项,差不多可以做到零配置就实现操作系统三大件:CPU、硬盘、内存的监控。此外Linux和Windows,Zabbix都支持。Zabbix内置丰富的告警媒介,但很遗憾没有内置企业微信告警。企业微信在很多公司都有使用,得益于它强大的消息推送API,我们可以自己实现使用企业微信作为告警媒介,本文就从零开始介绍如何使用企业微信发送Zabbix告警。一、企业微信配置相关浏览器登录企业微信管理后台,在“应用管理

十分钟彻底理解 Redis 的持久化和主从复制

什么是Redis持久化?Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示:这样做有什么问题呢?其实,只要稍微有点计算机基础知识的人都知道,存储在内存当中的数据,只要服务器关机(各种原因引起的),内存中的数据就会消失了,不仅服务器关机会造成数据消失,Redis服务器守护进程退出,内存中的数据也一样会消失。对于只把Redis当缓存来用的项目来说,数据消失或许问题不大,重新从数据源把数据加载进来就可以了,但如果直接把用户提交的业务数据存储在Redis当中,把Redis作为数据库来使用,在其放存储重要业务数据,那么Redis

Ceph存储节点系统盘损坏集群恢复

本文主要介绍ceph16版本集群节点系统磁盘故障后的集群恢复,虽然系统盘很多都是做了raid1,但从实际做的项目看,总是有很多未知意外发生,节点挂掉后,上面的mon和osd,mgr都会down掉,如果所在节点的mgr服务是激活状态,则其他节点所在的备用节点将会升级为激活状态。移除问题主机节点挂掉后,在确定不能继续开机进入系统的情况下,需要在其他正常的节点将故障节点进行移除,此次宕机的节点为node4,以下命令可能会导致数据丢失,因为osd将通过调用每个osd来强制从集群中清除。cephorchhostrmnode4--offline--force节点初始化操作将node4节点即故障节点更换新的

Zabbix 随笔:6.0 LTS 升级指南之一

本文主要针对Zabbix5.0LTS如何升级到6.0LTS做一个探讨。正文本文环境注意本文环境,有可能与您的环境有所出入,所以问题有可能不同!CentOS7.9.2009Mariadb10.3ZabbixLTS5.0.20虚拟机环境为VMwareZabbix5.0.20升级思路系统升级–>数据库升级–>ZabbixServer升级停止相关服务systemctlstopzabbix-serverzabbix-agentrh-nginx116-nginxrh-php72-php-fpmmariadb准备工作安装epel源、yum-utils工具yum-yinstallepel-releaseyum

一次K8s中的Pod解析外网域名错误的问题排查

1、故障现象我们一个agent代理服务,发布到k8s集群之后,pod状态是Running,但是server一直无法收到心跳信号,因此到集群内部去排查日志,发现该服务日志中出现大量的连接某一个ip地址tcptimeout2、故障排查过程通过查看日志发现是大量的错误日志,连接某个ip地址产生i/otimeout,因此排查服务的业务逻辑,该服务只会去连接server端,在服务的环境变量里配置了server端的域名,怀疑是不是有可能server端挂掉,在本地和集群宿主机上调用server的地址,发现是可以通的,因此排除掉了server端本身的问题因为server端连接地址在我本地和集群宿主机上是可以正

SpringBoot整合Druid连接池并打开监控页

项目整合完MybatisPlus、Mysql之后,接下来就该接入一个数据库连接池了。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。框架选择上我选择了Druid(德鲁伊)连接池,性能不错,功能全面。首先在pom中引入数据库连接池-->dependency>groupId>com.alibabagroupId>artifactId>druid-spring-boot-starterartifactId>ve

如何在 Kubernetes 上优雅的运行一个 MySQL 主从架构集群

一般情况下Kubernetes可以通过ReplicaSet以一个Pod模板创建多个Pod副本,但是它们都是无状态的,任何时候它们都可以被一个全新的Pod替换。然而有状态的Pod需要另外的方案确保当一个有状态的Pod挂掉后,这个Pod实例需要在别的节点上重建,但是新的实例必须与被替换的实例拥有相同的名称、网络标识和状态。这就是StatefulSet管理Pod的手段。对于容器集群,有状态服务的挑战在于,通常集群中的任何节点都并非100%可靠的,服务所需的资源也会动态地更新改变。当节点由于故障或服务由于需要更多的资源而无法继续运行在原有节点上时,集群管理系统会为该服务重新分配一个新的运行位置,从而确

使用 SwiftUI 的 Eager Grids

介绍早在2020年,我们就拥有了在SwiftUI(LazyVGrid和LazyHGrid)中绘制网格的新视图控件。两年后,我们又获得了另一种在网格(Grid)中显示视图的视图控件。但是,这些新增功能非常不同,不仅在您使用它的方式上,而且在它内部的行为方式上。2020年的观点很懒惰。这些新人很热心。lazygrids不会渲染甚至实例化屏幕外的视图。单元格视图仅在它们被滚动时创建,并且在它们滚动时停止计算。这篇文章的主题EagerGrids正好相反。SwiftUI不在乎它们是在屏幕上还是在屏幕外。所有视图都被同等对待。这可能会出现大量单元的性能问题。然而,多少是一个很大的数字是一个不可能回答的问题

Android音频采集常用方式详解

前言Android音频采集android音频采集一般两种方式:AudioRecord和MediaRecorder两种都可以录制音频,MediaRecorder已实现大量的封装,操作起来更加简单,而AudioRecord使用起来更加灵活,能实现更多的功能一、Android音频采集1.AudioRecord基于字节流录音;可以实现语音的实时处理,进行边录边播,对音频的实时处理;AudioRecord是一个比较偏底层的API,它可以获取到一帧帧PCM数据,之后可以对这些数据进行处理;输出的是PCM的语音数据,如果保存成音频文件是不能被播放器播放的。要用到AudioTrack这个去进行处理;2.Med