GithubHelp home page GithubHelp logo

c0refast.github.io's People

Stargazers

 avatar

Watchers

 avatar  avatar

c0refast.github.io's Issues

使用udev重命名网卡 | C0reFast记事本

https://www.ichenfu.com/2020/06/08/rename-nic-names/

在老的Linux中,特别是CentOS 6系统下,网卡大多数都是命名为eth0,eth1这样的形式,但是这样的命名是不稳定的,因为后面的数字是根据驱动的加载顺序来的,那么就有可能出现两次启动导致网卡名称不一样的情况了。在CentOS 7中,由于有了Systemd,所以引入了一种新的命名规则叫一致网络设备命名,具体的可以参考文档第 8 章 一致网络设备命名,这里就不再赘述了。 现在问题来了,如何真正

替换PHP底层函数实现 | C0reFast记事本

https://www.ichenfu.com/2015/03/01/override-php-function/

在PHP中,有很多内置的函数,这些函数包括绝大部分的功能,还有一些函数,是PHP的扩展提供的,只有安装了扩展并开启,函数才可以被使用,这些函数的实现,都是用C来实现的,因此有着最好的效率。 在某些情况下,可能要对这些用C实现的函数进行一些额外的更改,比如说,对其进行一个伪实现,或者,在调用之前检查是否满足特定的情况,也就是说,对这些函数进行Hook。比较暴力的办法,就是找到需要伪实现或者Hook的

Kubernetes Pod dnsPolicy 配置 | C0reFast记事本

https://www.ichenfu.com/2018/12/20/k8s-pod-dns-policy/

在Kubernetes中,可以针对每个Pod设置DNS的策略,通过PodSpec下的dnsPolicy字段可以指定相应的策略,目前支持的策略如下: “Default“: Pod继承所在宿主机的设置,也就是直接将宿主机的/etc/resolv.conf内容挂载到容器中。 “ClusterFirst“: 默认的配置,所有请求会优先在集群所在域查询,如果没有才会转发到上游DNS。 “ClusterFi

Intel X700系列网卡(i40e驱动)收不到LLDP包问题 | C0reFast记事本

https://www.ichenfu.com/2020/05/07/intel-x700-i40e-do-not-receive-LLDP-frames/#more

在我们的机房服务器上,启用了LLDPD服务,通过LLDP协议实现网络层的自动发现,从而根据收到的消息绘制网络拓扑关系。 之前的大部分机器一直工作正常,也没有多关注,然而今天突然发现有一批机器工作不太正常,因为后期的工作依赖这个拓扑关系,如果关系不正确,后面的工作就没办法进行,所以遇到不正常的机器还是需要具体分析一下为什么。 正常情况下,启动lldpd服务,并调用lldpctl可以看到网卡连接到的交

再谈CPU的电源管理(如何做到稳定全核睿频?) | C0reFast记事本

https://www.ichenfu.com/2020/07/17/cpu-idle-time-managment/

在之前的一篇Blog: 服务器的能耗控制以及高性能模式配置(Dell)中,说到在Dell的服务器BIOS中打开Performance模式。就可以实现真正非软件管理的高性能模式,让CPU时刻处在最高性能状态上。但是呢,最近的一批机器,升级到CentOS 7.7系统之后,这个行为发生了一些变化,而针对这批机器的两个供应商的表现呢,也不完全一致,这个现象驱使我研究了一下到底怎么样设置,可以实现期望的运行

Istio的流量劫持和Linux下透明代理实现 | C0reFast记事本

https://www.ichenfu.com/2019/04/09/istio-inbond-interception-and-linux-transparent-proxy/

一般情况下,如果一个程序需要使用代理服务器,那么需要在运行的时候设置一下参数,或者,在Linux下,大部分的程序支持http_proxy这个环境变量,设置这个环境变量,意味着程序将使用设置值作为代理。这样的问题在于,设置代理这个操作是不透明的,也就是说,客户端必须要知道代理的存在,需要手动设置将流量导入到代理,如果程序本身不支持代理,或者我们不希望执行所有程序的时候都手动设置代理,那么就需要一个相

Calico的IP分配策略以及存在的一些问题 | C0reFast记事本

https://www.ichenfu.com/2019/09/21/calico-ip-allocation-problems/

之前线上运行的K8S集群出现了一个Pod IP无法访问问题,调查了一下,发现和CalicoIP地址的分配策略相关,具体表现为一个/26的IP Block192.168.100.0/26分配给了A机器之后,在另外一台B机器上又出现了该IP Block内的一个IP 192.168.100.10,同时因为A机器上有该IP Block的blackhole路由blackhole 192.168.100.0/

编写Udev规则文件开机设置网卡SR-IOV | C0reFast记事本

https://www.ichenfu.com/2020/08/23/simple-example-for-enabling-sriov-using-udev/

在虚拟化场景下,SR-IOV(Single Root I/O Virtualization)是一个很常用的功能,通过SR-IOV,一个物理的设备(Physical Function),可以派生出很多虚拟设备(Virtual Function),这些虚拟设备具有简单的PCIe功能。以网卡为例,通过SR-IOV,我们可以将一块网卡,虚拟化成很多块网卡,这些虚拟出来的网卡,有自己独立的PCIe地址,中断

Unrecoverable Read Error Rate (URE) | C0reFast记事本

https://www.ichenfu.com/2016/12/04/ure/

很久之前,对于磁盘的了解,就知道一个很关键的指标MTBF,即相邻两次故障之间的平均工作时间,也称为平均故障间隔,这个值越大越好,越大意味着硬盘更不容易坏。对于RAID,也是很相信,觉得大多数情况下,使用RAID,就能保证数据的安全性,几乎不会有数据丢失的风险。 突然的,读到一篇对于RAID 6的文章 Why RAID 6 stops working in 2019,这是一篇2010年的文章,很遗憾

Ceph Monitor标记OSD DOWN分析 | C0reFast记事本

https://www.ichenfu.com/2021/03/18/ceph-osd-mark-down/

在上篇Blog:Ceph OSD的心跳机制分析的最后,我们知道Ceph OSD将心跳检测失败的OSD打包成MOSDFailure消息发送给Monitor,但是还遗留了一个问题,就是Monitor是怎么处理这个消息的?又是在什么的情况下会把这个OSD标记为Down状态?所以这篇就是要把整个流程补完。 还是来看代码,首先需要注意的是,MOSDFailure不是一个原始的消息,我们得先找到这个消息对应得

纯手动部署Ceph之OSD部署 | C0reFast记事本

https://www.ichenfu.com/2017/02/09/ceph-osd-manual-deployment/

Monitor部署结束后,需要部署Ceph的OSD,OSD是Ceph实际存储的核心,有了OSD,数据才能正常进行存储,这里还是在一台机器上部署3个OSD,实际生产环境中,会有更多的OSD以及更多的机器。这里默认机器上已经装好了所有Ceph对应的包。出于简单考虑,所有的OSD只分配一个对应的数据目录。实际生产环境中,一般一个OSD会对应一个设备。

CVE-2016-3714 - ImageMagick漏洞分析和解决 | C0reFast记事本

https://www.ichenfu.com/2016/05/08/cve-2016-3714/

2016年5月3号,一个被广泛使用的图片处理库ImageMagick被爆出存在一处远程命令执行漏洞(CVE-2016–3714),当其处理的上传图片带有攻击代码时,攻击代码中的远程命令将会被执行,进而可能控制服务器。这个漏洞被命名为ImageTragick,甚至还有了一个属于这个漏洞自己的网站(https://imagetragick.com/)同样,SAE上也是安装了这个库的,在PHP运行环境中

京东云主机试用 | C0reFast记事本

https://www.ichenfu.com/2017/01/03/jd-vm/

前几天拿到了京东云的代金券,87块钱,刚好能用一台1核1G的虚拟机一个月,外加1M的外网带宽。于是就随便试用了一下,感觉还行,说说感受吧。 首先是镜像,目前镜像不是很多,主要集中在CentOS、Ubuntu、Windows。CentOS还是比较全的,从5.8到7.3都有,Ubuntu只用12.04和14.04两个LTS版本,Windows还是有一些的,不过没怎么关注。除了官方的镜像,还有安全镜像,

Kubernetes DNS-Based Service Discovery 翻译 | C0reFast记事本

https://www.ichenfu.com/2018/05/17/kube-dns-spec/

本文是Kubernetes DNS-Based Service Discovery的翻译,也就是Kubernetes DNS specification的翻译,目前最新版本号是1.0.1。 0 - 关于此文档本文档是Kubernetes基于DNS的服务发现的规范说明,尽管在Kubernetes中还有其他方式的服务发现协议和机制,但是DNS仍然是最常见而且是最推荐使用的扩展。实际的DNS服务并不一定

使用iptables结合ipset封锁国外的异常IP访问 | C0reFast记事本

https://www.ichenfu.com/2020/01/07/block-ips-outside-china-with-iptables-and-ipset/

最近遇到了网站不断被一些国外的IP扫描的问题,想了想,决定将所有非国内的客户端全部封锁,只允许国内的用户进行访问。 首先需要找到所有国内的IP段,这个比较简单,ipip.net的github提供了一个china_ip_list项目,记录了目前所有国内的IP地址段,每月更新。这个列表可以通过wget https://raw.githubusercontent.com/17mon/china_ip_l

Kubernetes CronJob Controller源码分析 | C0reFast记事本

https://www.ichenfu.com/2018/05/10/k8s-cronjob-source-code/

最近的一个项目需要用到Kubernetes的CronJob,主要用来定时执行一个备份任务,刚开始使用的时候发现没有按照预期的情况运行,所以决定看看CronJob Controller的代码,看看他是怎么实现对应的功能的,正好发现网上也没有其他人写过关于CronJob Controller代码的解析(可能是太简单了不用写吧)。所以也就正好记录一下。 CronJob Controller的代码在kub

Kubelet启动报错Failed to start ContainerManager failed to initialize top level QOS containers | C0reFast记事本

https://www.ichenfu.com/2019/12/06/kubelet-failed-to-initialize-top-level-qos-containers/#more

最近往K8s集群中添加节点的时候,发现部分节点的kubelet进程无法启动,导致节点处于NotReady状态。journalctl -u kubelet查看日志可以发现类似的日志: 1....2Nov 29 23:32:13 localhost kubelet[3830]: I1129 23:32:13.311881 3830 server.go:333] Adding debug hand

lspci命令输出的一些解释 | C0reFast记事本

https://www.ichenfu.com/2019/11/03/interpreting-the-output-of-lspci/

最近一段时间在折腾虚拟化,想把SR-IOV硬件直通给用起来,所以免不了要利用lspci这个工具,用来查看当前系统连接的所有PCI/PCIe设备。其实之前也有用到过,也有一些不理解的地方,只是当时无脑跟着文档设置,也就没多关心了,这次需要好好的理解一下相关的概念什么的。 首先很简单,看看不加参数直接调用lspci命令的输出结果,下面的是我笔记本上的输出: 100:00.0 Host bridge:

使用rpmbuild打包时不对文件进行strip操作 | C0reFast记事本

https://www.ichenfu.com/2017/11/20/rpmbuild-not-strip/

默认情况下,在使用rpmbuild打包时,会对安装的所有文件进行strip操作,去除文件的一些调试信息,并将这些调试信息放到debuginfo包中,但在很多时候,我们并不需要rpmbuild帮我们执行strip,也不需要生成debuginfo包,所以我们可以修改一下spec文件,关闭这些选项。 针对文件的strip操作是在__os_install_post这个宏中定义的,我们可以运行一下rpmbu

NetworkManager简单教程 | C0reFast记事本

https://www.ichenfu.com/2021/02/16/networkmanager-tutorial/

最近在尝试切换到CentOS 8,虽然不久前CentOS宣布从RHEL下游转向CentOS Stream了,但是相信以后会有类似的替代品出现,本质上也是在适应RHEL 8。这一试不要紧,一开始就被NetworkManager给吓住了,这都什么玩意,怎么这么难用? 一开始呢,想着先用被废弃但是还没被删除的老network-scripts顶一顶,想回滚也很简单:执行dnf install -y net

Git的浅克隆功能 | C0reFast记事本

https://www.ichenfu.com/2019/07/25/git-shallow-clone/

随着Git仓库不断的被修改,整个仓库会变得越来越大,其中最主要的原因是历史提交特别的多,这个对于想立即阅读最新代码或者CI/CD场景下不是特别友好。 面对这种场景,可以利用git提供的浅克隆功能,只clone少部分历史到本地,这样可以极大的减少clone的仓库大小,以PHP源代码代码为例:

类似\xe4\xb8\xad等字符串的解码 | C0reFast记事本

https://www.ichenfu.com/2017/01/13/decode-hex-string/

经常会在日志,或者其他地方遇到类似 '\xe4\xb8\xad\xe5\x8d\x8e\xe4\xba\xba\xe6\xb0\x91\xe5\x85\xb1\xe5\x92\x8c\xe5\x9b\xbd' 的字符串,但是不知道实际是代表的什么,因此要做一个解码。 之前一直没有找到比较好的网页的工具,所以就直接尝试用Python进行解码,实际上类似的字符串就是二进制数据,所以作为

如何实现CPU单核睿频? | C0reFast记事本

https://www.ichenfu.com/2020/07/24/achieve-one-core-turbo/

之前的Blog:再谈CPU的电源管理(如何做到稳定全核睿频?)最终通过了tuned实现了CPU全核心运行在允许的全核睿频频率上。但是这个只是场景之一,并不是所有场景下都会用到很多的核心,从这些应用角度讲,更需要少量但是更高频率的核心,一个比较简单的例子就是DPDK,作为DPDK应用,一般来说也不会用到很多核心,但是他的polling模型,是希望单核频率越高越好的。针对类似的这种场景,实现少量核心,

树莓派启动时需要连接HDMI问题 | C0reFast记事本

https://www.ichenfu.com/2019/09/14/raspberrypi-boot-without-HDMI-connected/

前段时间将家里的树莓派3B系统换成了ArchLinux Arm,这样就可以用上64位指令集,不过遇到了一个问题,在没有连接HDMI时系统无法启动,刚开始还以为是什么其他的原因,因为之前接上显示器开机一切正常,但是换个地方不接显示器就启动不了,后来把显示器搬到旁边,一插上HDMI,立马就进入启动了。 定位到和HDMI相关之后,搜索了一下,刚开始以为和系统有关,后来搜到了Won’t boot with

纯手动部署Ceph之Monitor部署 | C0reFast记事本

https://www.ichenfu.com/2017/02/07/ceph-monitor-manual-deployment/

Ceph官网上介绍了使用ceph-deploy工具部署Ceph集群的方法,但是手工部署的方法文档中写的不够详细,花了点时间研究了一下,下面是手工部署一个简单的Ceph集群的步骤,先说怎么部署Monitor。 Monitor是Ceph的核心,用于存储所有的元信息,这里部署的是一个3 Monitor的集群,出于简单考虑,这三个Monitor被我放在了同一台机器上,实际部署的话,还是要放在不同的机器上保

一个epoll惊群导致的性能问题 | C0reFast记事本

https://www.ichenfu.com/2017/05/03/proxy-epoll-thundering-herd/

在我们内部的系统中,有一个tcp的代理服务,用户所有的网络相关的请求,比如访问外网,或者访问在内网的某些服务,都需要通过这个服务,一方面是实现对外网访问的计费,另外也通过白名单机制,对应用的内网访问进行相应的限制。随着业务量的增加,发现提供服务的机器负载逐渐变高,当流量高峰的时候,经常出现客户端无法连接的情况,本来这个服务也是一个无状态的服务,可以很方便的水平扩容,在添加机器的同时,也尝试去分析一

Cgroups Memory子系统数据不正确的问题 | C0reFast记事本

https://www.ichenfu.com/2015/03/25/cgroups-memory-fuzzy-usage/

工作中,需要对单个MySQL进程进行限制,并且对MySQL进程消耗的IO,CPU Time,Memory等进行统计,首先想到的就是使用Cgroups对进程进行限制,同时,Cgroups提供的一些接口,也可以非常方便地读取到进程消耗的IO,CPU Time, Memory等数据。 但是在实现自动化之后(使用了自己编写的一套管理程序来对MySQL进程进行管理),却发现了一个非常奇怪的问题:从Cgrou

记一次SAE Web服务器的调优过程 | C0reFast记事本

https://www.ichenfu.com/2015/12/07/tuning-webruntime/

事情的原因,是发生在某个晚上的9点30左右,SAE的报警系统突然报出了异常,所有的Web服务器的负载突然变得很高,流量也变得异常的大。这个是很有问题的,在SAE最前面的反向代理上,是部署了SAE自己开发的‘CC防火墙’的,如果出现了异常的被攻击的情况,这些异常的流量是不会到达Web服务器的,现在这些流量都到达了Web服务器,说明要么是攻击没有被正常判断,要没就是这不是一次攻击。 事实上确实这也不是

再谈网卡的一致性命名 | C0reFast记事本

https://www.ichenfu.com/2020/11/10/consistent-network-device-naming/

针对网卡名字这个问题,其实之前也讨论过一次,主要是如何利用udev去重命名网卡,里面提到了新的一致性命名规则,但是没有细说。 当然肯定是遇到问题了,所以针对网卡命名的细节,需要再探讨一下。 其实目前大家还是更熟悉老的那种eth0,eth1…那种命名,目前我们大部分生产环境里也是这么用的。但是随着网卡数量越来越多(在我们使用的SR-IOV场景,加上VF虚拟网卡,机器上已经有超过16个网卡)这种命名规

Ceph OSD的心跳机制分析 | C0reFast记事本

https://www.ichenfu.com/2021/03/16/ceph-osd-heartbeat/

心跳机制在Ceph中承担非常重要的角色,所有OSD之间都需要通过心跳来确认各个OSD的状态,并且在OSD出现失联,Crash等情况下能及时的被发现,从而进行故障OSD摘除,触发数据重平衡等,保证数据的安全性。 所以弄明白当前Ceph的心跳机制,理顺OSD从故障到被集群踢出的流程是十分必要的。 心跳初始化 & 心跳发送首先我们从Ceph OSD进程的启动main函数开始,代码在src/cep

服务器的能耗控制以及高性能模式配置(Dell) | C0reFast记事本

https://www.ichenfu.com/2020/02/26/cpu-power-management/

事情的起因要算很久之前一次测试,一个同事借了我们的一台机器测试,在测试之前惯例使用cpupower frequency-set -g performance命令将CPU高性能模式打开,避免因为系统处于节能模式导致性能测试不准确。但是在我们这台机器上执行命令却报错了: 1]# cpupower frequency-set -g performance2Setting cpu: 03Error set

Calico网络中的ProxyARP | C0reFast记事本

https://www.ichenfu.com/2019/03/14/proxy-arp-in-calico/

如果K8s使用Calico作为网络方案的话,应该都会知道Calico是个纯3层的方案,也是就说,所有的数据包,都是通过路由的形式找到对应机器和容器的,然后通过BGP协议来将所有的路由同步到所有的机器或者数据中心,来完成整个网络的互联。简单的来说,Calico针对一个容器,在主机上创建了一堆veth pair,其中一端在主机,一端在容器的网络空间里,然后在主机和容器中分别设置几条路由,来完成网络的互

Qemu-KVM的CPUID初始化和自定义CPU Model显示 | C0reFast记事本

https://www.ichenfu.com/2020/12/28/qemu-kvm-fake-cpuid/

在上一篇Blog:/proc/cpuinfo里的CPU型号怎么来的?里,可以知道Linux系统是根据CPUID指令来显示具体的CPU型号的。所以很自然的一个想法:是不是可以自定义显示的内容呢? 答案显而易见,必然是可以的。但是如果要改物理CPU的寄存器,那确实会有些困难,不过没关系,我们还有虚拟机嘛,理论上虚拟机可以虚拟这些东西,那改动起来应该也是比较方便的。 想要修改这些寄存器,首先得先看看CP

PHP设置open_basedir导致的性能问题 | C0reFast记事本

https://www.ichenfu.com/2016/12/04/openbasedir-lstat/

某天收到报警,发现某台PHP Web机器的CPU比较高,压力比较大,登录到机器看了一下,发现,user的CPU还行,但是system的CPU比较高,导致了整个机器的负载比较高,于是就怀疑是不是系统某些地方存在性能瓶颈。 于是先用perf+FlameGraph生成了一下火焰图看一下: 发现有很多 __lxstat64 调用占用了很多的CPU时间,这个调用是 stat 函数在64位Linux下的实现,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.