Skip to main content

Command Palette

Search for a command to run...

神奇小事杂记

Updated
2 min read

小众命令:getent

getent 是什么

get entries from Name Service Switch libraries

根据我的观察,身边共事过的同事,都没用过、甚至没听过getent

与getent的偶遇

这要回到 2022 年了,当时作为刷推爱好者,偶然刷到了以下推文

在没有 ping/dig/nslookup 的时候,可以使用 getent 命令解析域名。 getent hostshttp://google.com

第一眼就觉得很神奇,惊呼,还能这样玩?果断点赞+收藏。推特果然是一个学习技术的好地方。更神奇的是一周后,我在排查 k8s 环境中的一个问题时,需要在一个业务 pod 中进行域名解析,但是当时运维团队可能是出于安全原因,不允许直接在 pod 中安装第三方软件,当时也就灵光一现,马上用到了 getent,简单、小众、好用。最重要的是getent是一个标准的 GNU 工具, 因此几乎所有的 Linux 发行版都包含了它,非常值得收藏。

最近同事有类似域名解析的需求,果断推荐了一把 getent ,它值得更广泛的传播度。

如何获取 zk 角色

一些前置背景:

笔者所在的团队主要项目就是做一个云原生大数据运维管控平台,通俗来说就是将大数据组件诸如:zk、kafka 等部署在 k8s 上、hdfs 则在主机上以容器化方式部署。

笔者日常review代码的过程中,发现一个有意思的地方,在 k8s 中部署 zk 集群,每个 zk 节点都要暴露 nodeport,有一个需求是获取这个 zk 集群中每个节点的角色,历史做法是进入到这个 zk 的 pod 中,并执行以下命令

# zkServer.sh status
Mode: follower

来看看具体耗时

time kubectl -n enginemanager-w70f exec -it pod-zknode-9809-42051  bin/zkServer.sh status
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

real    0m0.324s
user    0m0.066s
sys     0m0.028s

笔者天然觉得这种做法不够友好了,秉承着相信一定有更好的解决办法的信念,开启搜索大法,果真找一个更高效的做法:

# time echo stat | nc 172.18.5.30 32507 | grep Mode
Mode: follower

real    0m0.013s
user    0m0.009s
sys     0m0.006s

0.324s 与 0.013s,25 倍的差距,不可谓不惊人,也是没想到 nc 还可以这么用。

如何获取 hdfs 的 active namenode

与 zk 的不同之处在于,hdfs是以容器化的方式部署在主机上,而非部署在 k8s 中,获取 active的 namenode 方式则是进入 namenode 容器中执行命令获取

# time docker exec -it 1b5d208efc1e /opt/hadoop/bin/hdfs haadmin -getServiceState nn42168
……
active

real    0m1.096s
user    0m0.022s
sys     0m0.011s

耗时1s多,还是挺费时间的,通过笔者的调研,发现更高效的办法:使用 hdfs 的 jmx 接口,如下所示:

# curl   -s -w 'Total: %{time_total}s\n'  http://172.18.5.155:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus
{
  "beans" : [ {
    "name" : "Hadoop:service=NameNode,name=NameNodeStatus",
    "modelerType" : "org.apache.hadoop.hdfs.server.namenode.NameNode",
    "NNRole" : "NameNode",
    "HostAndPort" : "hadoop-4zd6-501:8020",
    "SecurityEnabled" : false,
    "LastHATransitionTime" : 1709638327400,
    "BytesWithFutureGenerationStamps" : 0,
    "SlowPeersReport" : null,
    "SlowDisksReport" : null,
    "State" : "active"
  } ]
}Total: 0.002s

才 0.002s 而已,也就是 1s 的 1/500,可怕的差距。

总结

getent 属于一个经验之道,知道就是知道,不知道也会想到其它方法,只是可能没有 getent 那么称手而已;zk 与 hdfs 的优化,更多的是一种偏执的信念,对于不友好实现的敏感,以及对于高效的孜孜不倦的追求。


参考

60 views

More from this blog

2025: 祛魅 灰度 念头通达

今天是2025年的最后一天,当大家都在准备下班的时候,好巧不巧的,我刚好发现了一个不大不小的问题,大胆猜想,小心求证,向上反馈,暴露风险,作为2025年工作注解,实在是再有趣不过了。 今年的工作,从结果上看,还算平稳,至于过程,有太多不可言说的部分。厂里打镙丝的牛马,有工资可拿,理应知足了,至于其它的,与己无关,也没那么重要了。 祛魅 近距离观察大厂,才发现一些违背常识/直觉的事实:路人以为的高大

Feb 28, 20261 min read21

大厂祛魅:破碎的专注力

毁掉一个人最直接的方法,就是毁掉ta的专注力。 这句话的出处已然模糊,但放在大厂环境中,却显得格外深刻。 围城 大厂宛如一座围城。城外的人满怀憧憬,目之所及皆是光鲜;城内的人却如困笼之鸟,翅膀日渐退化,每日挣扎求生。 高大上 不可否认,大厂的硬件设施确实令人艳羡:宽敞的独立园区内,来往穿梭的人群中,几乎人人手握智能设备。这看似现代化的景象背后,却藏着一个无奈的事实:在工作时段,每台电脑都被严密监控,连听音乐都成奢望。于是,工作之余玩手机,成了许多人难得的解压方式。 大厂的品牌效应确实强大。外界对...

Jul 29, 20251 min read138

Black Swan

黑天鹅理论 是指极不可能发生,实际上却又发生的事件 来到大厂打工已经满一个月了,从一开始的手足无措,到逐渐度过不适期,也算是适应了吧。 不适应 刚入职时,不适应的地方还是挺多的。 第一次只使用台式机工作,这就限制了我一天中的绝大部分时间,都必须呆在自己的工位上,好在工位足够大。只是人与人的沟通少了很多,有问题只能在工位上通过 IM 呼对方,有种魔幻又现实的感觉 第一次只能用 Windows,也不能 WSL,这给我的工作效率带来了很大影响,不能用熟悉的软件,就连写代码用的 VSCode 的...

Jan 24, 20251 min read74

2024年: 逐渐平静

这个世界是一面镜子,会把你的感受反射给你 2024 开端: 相由心生 那时,还带着一着愤懑,因为拿到了低绩效,虽然内心知道这是公司经营困难,想让我离开的一种策略,但仍然感受到自己那可笑的自尊受到了践踏。自那之后,非必要不加班,只做份内事,尽可能地不去涉及份外之事。 2024 年中: 与人为善 组里的项目眼见不行了,我被迫去支援 AI 项目,久违地写起了 python,项目接近完成时,意外收到通知:我拿到大礼包了。在这之前,架构师因故裸辞。在我离开之后不到两周,我的 TL 也裸辞了,直到同事告诉...

Jan 9, 20251 min read92

企业软件之殇

殇 动词 未成年而死。 名词 战死者。 笔者经历了两家打着云原生旗号的企业软件/解决方案公司,都是中途加入,项目都以解(失)散(败)告终。 云原生解决方案 NB 公司:一个传统的 IDC 小厂,想着借云原生的热度,进军企业软件市场。 在加入这个项目之前,笔者考取了 CKAD 认证,彼时对 K8s 相当着迷。先简要介绍一下这个项目背景: 基于 Rancher (换皮肤)的二次开发项目,名字叫:HCaaS ,在笔者加入这个团队之前,项目已经开发近两年了,除了 TL 之外,其它人之前都...

Jul 1, 20241 min read103

just for fun

57 posts

I'm a Software Engineer