C0reFast记事本

to inspire confidence in somebody.

0%

针对网卡名字这个问题,其实之前也讨论过一次,主要是如何利用udev去重命名网卡,里面提到了新的一致性命名规则,但是没有细说。

当然肯定是遇到问题了,所以针对网卡命名的细节,需要再探讨一下。

其实目前大家还是更熟悉老的那种eth0,eth1…那种命名,目前我们大部分生产环境里也是这么用的。但是随着网卡数量越来越多(在我们使用的SR-IOV场景,加上VF虚拟网卡,机器上已经有超过16个网卡)这种命名规则已经不适应现代的硬件和操作系统了,所以最近我们也从老的命名方式,切换到操作系统默认的一致网络设备命名

不过因此也带来了一些问题,发现不同厂商,或者不同机器会有命名不一致的情况,举个例子:

这是某台机器的网卡名字:

阅读全文 »

事情的起因呢,是我们收到了一条内存报警,提示某台机器的可用内存不足,可用内存剩下不到14G。原本只是一个很简单的问题,但是呢,这次却发现了一些不一样的点。
登录机器后,free -m命令执行的结果如下:

]# free -m
              total        used        free      shared  buff/cache   available
Mem:         385445      363181        1917           4       20346       21147
Swap:             0           0           0

问题来了,报警里的14G内存,是从哪来的?好像没有一个数字和这个14G接近?

阅读全文 »

最近在我们的集群中遇到一个问题,在一台机器上,尝试挂载CephFS失败了,报错如下:

~]# mount -t ceph mon1.ichenfu.com:6789,mon2.ichenfu.com:6789,mon3.ichenfu.com:6789:/ /tmp/data
mount: wrong fs type, bad option, bad superblock on mon1.ichenfu.com:6789,mon2.ichenfu.com:6789,mon3.ichenfu.com:6789:/,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

因为之前遇到挂载CephFS时出现failed: No such process的问题,这两个问题看起来有点相似,但是确实有些不一样。因为有前车之鉴,所以顺着之前的思路,首先根据报错的提示,看看dmesg里有没有什么有用的信息:

阅读全文 »

在虚拟化场景下,SR-IOVSingle Root I/O Virtualization)是一个很常用的功能,通过SR-IOV,一个物理的设备(Physical Function),可以派生出很多虚拟设备(Virtual Function),这些虚拟设备具有简单的PCIe功能。以网卡为例,通过SR-IOV,我们可以将一块网卡,虚拟化成很多块网卡,这些虚拟出来的网卡,有自己独立的PCIe地址,中断,配置空间等,这些虚拟出来的网卡,可以作为单独的PCIe设备被attach到虚拟机中,实现网络功能,当然,场景并不局限于VM。

这里先不关注SR-IOV的应用场景,或者其实现原理,而是关心一个简单的问题:如何设置SR-IOV,并且能稳定的实现开机启动时就设置好呢?

阅读全文 »

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

那么问题来了,怎么在Linux上实现稳定的单核睿频呢?这里给一个稍微暴力点的办法。

阅读全文 »

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

阅读全文 »

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

现在问题来了,如何真正意义上实现按意愿去设置网卡的名称呢?这里有个通用的方法:

编辑/etc/udev/rules.d/70-persistent-net.rules文件,如果有这个文件,则直接编辑就可以,如果没有就新建一个。
然后在文件中按以下的格式输入规则:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:22:33:44:01", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:22:33:44:02", NAME="ethxyz"

只需要根据情况,填写MAC地址和名字就可以了。另外,针对已有的网络配置,如CentOS下/etc/sysconfig/network-scripts/底下的那些ifcfg-xxxx配置文件,也需要针对性的进行修改。修改完成后重启机器即可生效。

针对udev规则,还有很多可以MATCH和修改的地方,可以实现很多复杂功能,具体的这里就不赘述了,感兴趣的可以参考一下udev - ArchWiki,或者其他udev相关的文章。

在我们的机房服务器上,启用了LLDPD服务,通过LLDP协议实现网络层的自动发现,从而根据收到的消息绘制网络拓扑关系。

之前的大部分机器一直工作正常,也没有多关注,然而今天突然发现有一批机器工作不太正常,因为后期的工作依赖这个拓扑关系,如果关系不正确,后面的工作就没办法进行,所以遇到不正常的机器还是需要具体分析一下为什么。

正常情况下,启动lldpd服务,并调用lldpctl可以看到网卡连接到的交换机信息:

阅读全文 »

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

]# cpupower frequency-set -g performance
Setting cpu: 0
Error setting new values. Common errors:
- Do you have proper administration rights? (super-user?)
- Is the governor you requested available and modprobed?
- Trying to set an invalid policy?
- Trying to set a specific frequency, but userspace governor is not available,
   for example because of hardware which cannot be set to a specific frequency
   or because the userspace governor isn't loaded?
阅读全文 »

最近遇到了网站不断被一些国外的IP扫描的问题,想了想,决定将所有非国内的客户端全部封锁,只允许国内的用户进行访问。

首先需要找到所有国内的IP段,这个比较简单,ipip.net的github提供了一个china_ip_list项目,记录了目前所有国内的IP地址段,每月更新。
这个列表可以通过wget https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt直接进行下载。

有了IP列表,接下来的事情相对简单不少,虽然理论上可以通过iptables针对文件里的每一个IP段添加规则,但是这样会添加几千条规则,不是最优解,所以就借助ipset和iptables进行封锁。

阅读全文 »