记录一次exporter故障
现象: prometheus 上查看 exporter 节点爆红 exporter 的 pod 曾经 oom 过,重启后使用内存增长迅速,log 报错 timout,手动通过 url 访问没任何问题 1 考虑服务本身问题 1.1 查看事件 因为操作完写的文档,没有记录了,当时有OOM killed字段,怀疑硬件资源问题 1.2 查看系统硬件日志 搜索 oom 会找到报错,重点是:mems_allowed=0,所以 pod 被 kill 掉了 12345dmesg -T |grep oom[Mon Jun 6 14:15:29 2022] test-exporter-57bb88f4b4-92b6c invoked oom-killer: gfp_mask=0x40cc0(GFP_KERNEL|__GFP_COMP), order=0, oom_score_adj=999[Mon Jun 6 14:15:29 2022] oom_kill_process.cold+0xb/0x10[Mon Jun 6 14:15:29 2022] [ pid ] ...
Redis 常用命令
12#使用redis-cli连接到127.0.0.1 6379这个redis服务节点,集群模式需要加-c,输入密码加-a 后面可以直接接命令/opt/redis/redis-cli -h 127.0.0.1 -p 6379 # -c -a qweasd 1 基本 } 默认 16 个数据库,默认使用第 0 个 } } 集群模式只能用第 0 个 命令 说明 select dbNum 选择数据库,如 select 0 选择第一个 dbsize 查看当前数据库数据数量 flushdb 清空当前数据库 flushall 清空所有数据库 exists key 判断 key 是否存在 move key dbNum 把一个数据移动到指定的数据库,如 move key1 3,把 key1 移动到数据库 3 keys * 查询当前数据库所有 key,*代表所有,也可以模糊匹配,如 keys a*,代表查询 a 开头的所有 key expire key seconds 设置一个 key 多久过期,单位秒 ttl key 查询一个 key...
Redis 哨兵模式笔记
1 哨兵工作机制 1.1 环境架构 每个哨兵节点,每 10 秒向已知的各个主从节点发送 info 命令,获取最新的拓扑结构关系和各个节点详细信息; 每个哨兵节点每 1 秒向它已知的 Master、Slave 节点以及其他哨兵节点发送一个 ping 命令,从最后一次成功响应的时间开始,超过 down-after-milliseconds 设置的时间,则监测的哨兵标记为下线; 如果一个 Master 节点被哨兵标记为下线,其它所有哨兵节点再次每秒 1 个 ping,未收到 pong 则确认下线,进入主观下线状态; 确认 Master 主观下线的哨兵节点数,如果达到配置参数的值,则 Master 节点进入正式客观下线; 如果确认 Master 主管下线的哨兵节点数,达不到配置的值,客观下线状态移除; 如果哨兵节点能重新与 Master 节点进行 ping-pong ,主观下线状态移除。 1.2 为什么要用哨兵集群 防止误判:对于节点的故障判断是由多个 Sentinel 节点共同完成。 高可靠:即使个别 Sentinel 节点不可用,整个 Sentinel...
Redis 备份与恢复
有两种方案,远程与本地 集群与哨兵模式都适用,只不过集群备份还原多节点,哨兵备份还原单节点 1 远程备份: 优点: 一个节点可以备份所有节点,不用远程登录 缺点: 占用网络带宽与 redis 性能,备份相当于真实读取 redis 数据 1.1 备份 命令(redis-dump -u :password@host:port -d passwd > fileName.json)无密码可省略 123redis-dump -u 10.1.1.1:6379 -d passwd > 6379.jsonredis-dump -u 10.1.1.2:6380 -d passwd > 6380.jsonredis-dump -u 10.1.1.3:6381 -d passwd > 6381.json 执行完成命令之后 ,生成 3 个 json 文件,即为集群节点数据,为提升导入效率,可以将文件拷贝到目标集群机进行导入,也可以直接在本机导入。 1.2 还原 命令(cat filename.json | redis-load -u...
Redis 配置详解
1 基础配置 12345678910111213141516#带配置文件的启动方式cd /usr/local/redis./bin/redis-server redis.node1.6379.conf#将指定配置文件包含进当前配置文件include /usr/local/redis/redis-pub.conf#在redis配置文件中# 1k = 1000 bytes# 1kb = 1024 bytes# 1m = 1000000 bytes# 1mb = 1024*1024 bytes# 1g = 1000000000 bytes# 1gb = 1024*1024*1024 bytes# 并且这些单位字符不分大小写, 1MB 1mb 1mB 1Mb都是一样。 2 网络配置 123456789101112131415161718#绑定ipbind 0.0.0.0#绑定端口port 6379#是否保护模式#no,外部可以直接访问#yes则按照绑定ip、端口,如果设置了密码,还需匹配密码protected-mode yes#客户端连接,空闲多少秒关闭,0不关闭timeout...
Redis 集群模式笔记
注意: 因为测试,我一个节点部署多个服务,生产环境建议分开不然会报 are on same IP,导致主从切换失败 1 使用场景 哨兵模式已经能够实现高可用,实践中通常是分布式服务,某一个点的分类数据放在指定的一个哨兵主从,通常也足够,但如果某个分类数据量实在过于庞大,哨兵+主从这种模式,相当于每个节点都是一个全量的数据副本,从高可扩方面来说,它这种模式不是很方便,对资源也是很大的浪费。当哨兵+主从遇到资源瓶颈,或者对高可扩有一定要求的时候,集群模式便能解决这个问题 高可用原理 Redis 集群模式是没有中心节点的,它至少需要 3 个 master 节点,每个 master 节点至少一个 slave(默认读),也就是至少 6 个节点才能组建集群模式,已经内置了数据分片和故障转移。 数据分片是 16384 个虚拟槽位分散到不同的 master 节点,设置 key 的时候,服务节点通过 key 的 hashcode % 16384,转发存放到不同的节点的对应分片槽位上。当查询请求到一个节点时,服务节点根据 key...
Redis 杂七杂八
基本概念 Redis 是基于内存的数据库,读写内存数据是单线程完成的,官方提供测试数据,单线程支持 10w+ QPS,其主要原因以下几点: 单线程避免了多线程切换、竞争阻塞、锁,一个指令通常 1-4 微秒,单核 CPU 足够处理数十万请求 完全基于内存读写,数据存放于内存,查找和操作效率高于磁盘 多路 I/O 复用模型,采用 epoll 实现,一定程度上提高网络 I/O 吞吐性能 6.0 后支持多线程 I/O 模型,提高网络 I/O 瓶颈,内存数据操作仍然是单线程 多路 I/O 复用,多路复用机制是指在一个线程上处理多个网络 I/O 流,Redis 网络框架调用 epoll 机制,让 Linux 内核监听无数个套接字(Socket),每个监听套接字发生的不同事件,都进入事件队列,Redis 单线程对该事件队列进行处理并调相应的事件回调函数,Redis 本身无需一直轮询是否有连接请求。 1 单线程 单线程读写内存的缺点是无法发挥多核心的性能,可以在多核部署多个 Redis 实例避免浪费,或者利用容器机制,一个 Redis 容器分配 2 个核心足够。 ...
记录一次pod访问不了外部服务
一, pod 访问外界服务时断时续 1 现象 环境: k8s calico 网络插件 BGP 模式 redis 单节点 问题: 部分 pod 与 redis 无法通信,telnet 端口不通,有这几种情况 b pod 一开始可以通 redis,我删了重构下,可能在 node1,也可能在 node2,但是再 Telnet redis 就不通了 d pod 一直访问不了 redis,我删了重构下,可能在 node1,也可能在 node2,但是再 Telnet redis 就通了 2 排查 2.1 路由 2.1.1 查看无法通信 pod 信息 123kubectl get pod -n test -owideNAME READY STATUS RESTARTS AGE IP NODEservice-21189-54f674b658-ksj2b 1/1 Running 1 13h 172.18.239.103 ...
Tekton进阶使用
上篇文章简单介绍了基础操作,但是还有些功能没提到参考 这篇文章实现了: 如何构建其他语言程序 挂载 configmap,不覆盖其他目录 git 触发部署 1 构建 npm 项目 这里我用自己博客为例,就不开源了 1.1 下载代码 git clone https://git.ccops.cc/Kubernetes/tekton.git 123456789101112131415161718192021222324252627282930313233cat tekton/cicd/build-push-image-task.yamlapiVersion: tekton.dev/v1beta1kind: Taskmetadata: name: build-push-imagespec: params: - name: pathToDockerfile description: The path to the dockerfile to build (relative to the context) default: Dockerfile ...
Kubernetes证书管理
参考文档 后面 traefik 自己集成了证书管理,参考文档后面补充 1 准备工作 先安装对应 webhook,这里我使用腾讯的 DNSPod,其它的从这里找 git clone https://github.com/qqshfox/cert-manager-webhook-dnspod.git 1.1 获取 apiID 与 apiToken 文档参考 访问这里创建并记录 2 部署 cert-manager 12345678910helm repo add jetstack https://charts.jetstack.iohelm repo updatehelm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ # 命名空间名称 --create-namespace \ # 自动创建命名空间 --version v1.7.2 \ # 版本 --set ingressShim.defaultIssuerName=letsencrypt-prod \ #...












