在一个实际的集群中,可能有几十上百台服务器,每次自己检测集群健康状态时,一台服务器一台服务器检测,一个字母一个字母敲,我都累成狗 。鉴于此,写了一个小脚本,自动跑ping,减轻工作量,呀吼吼,爽歪歪。
For example..............
This’s my test environment..............
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.131 ceph-node1
192.168.200.130 ceph-node2
192.168.200.136 ceph-node3
解决思想(Trouble Shooting):提取这个文件中集群所有的ip地址形成一个单独的文件,在通过读取文件中的ip,自动跑ping...
两大难点:1.提取所有集群IP 2.读取文件中的ip
脚本如下:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' >> a.sh
while read line
do
ping $line
done < a.sh
第一条提取所有的ip 统一放在a.sh中
下面全部是读取这里面的ip做ping.
缺点 :脚本可以考虑读取hosts文件中的IP,不需要在生成另外的ip地址文件在读取
可以做做一个计数 ping_count ping几次自动跳转ping下一个ip。
![跳跳](https://i-blog.csdnimg.cn/blog_migrate/ce9a8f29d0ce4bc3ff299e41bd0ea063.gif)
![跳跳](https://i-blog.csdnimg.cn/blog_migrate/ce9a8f29d0ce4bc3ff299e41bd0ea063.gif)
For example..............
This’s my test environment..............
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.131 ceph-node1
192.168.200.130 ceph-node2
192.168.200.136 ceph-node3
解决思想(Trouble Shooting):提取这个文件中集群所有的ip地址形成一个单独的文件,在通过读取文件中的ip,自动跑ping...
两大难点:1.提取所有集群IP 2.读取文件中的ip
脚本如下:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' >> a.sh
while read line
do
ping $line
done < a.sh
第一条提取所有的ip 统一放在a.sh中
下面全部是读取这里面的ip做ping.
缺点 :脚本可以考虑读取hosts文件中的IP,不需要在生成另外的ip地址文件在读取
可以做做一个计数 ping_count ping几次自动跳转ping下一个ip。
可以有更加人性话的交互,例如ping失败,会显示ping不同的主机名或IP.
改进:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' >> a.sh
while read line
do
ping $line -c 3 | grep -q "ttl=" && echo "$line yes" || echo "$line no"
done < a.sh
通过修改do下面执行语句成功解决了上述第2.3问题,但是还是发现了一个的bug,每ping一次,生成的ip地址文件中都会重复增加集群地址,导致做了n倍的重复性工作,应该将a.sh改成覆盖,而不是追加。
最终:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' > a.sh
while read line
do
ping $line -c 3 | grep -q "ttl=" && echo "$line yes" || echo "$line no"
done < a.sh
记录下自己写的第一个脚本的思考过程,哈哈哈哈哈