暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NIFI异常运行环境模拟

NIFI实战 2021-06-06
798
做NIFI二次开发,因为架构扩展性很强,一般也就实现几个钩子函数,所以按照官方文档进行开发,一般问题都不大。但是我们的程序经过单元测试、集成测试、系统的测试之后,并且稳定运行良久的程的,一个我们以为的比较稳定的程序,为什么依旧可能存在故障呢?我总结为1.环境的不可预测性导致的2.量变引起质变。所以这里总结常见系统环境问题例如,网络故障(网络延迟、丢包、包损坏、包重复)、系统负载问题(高内存、高CPU、高Io)上述是环境不可预测。量变引起质变不做深入探讨,举个正常有可能的例子,如controller service 连接关闭异常,积累导致系统故障。欢迎留言区留下更多系统环境异常场景。
进入今天正题,模拟系统故障。
网络故障模拟
    1、模拟延迟传输
      # tc  qdisc  add  dev  eth0  root  netem  delay  100ms
      该命令将 eth0 网卡的传输设置为延迟100毫秒发送。 
      更真实的情况下,延迟值不会这么精确,会有一定的波动,我们可以用下面的情况来模拟出带有波动性的延迟值:
      # tc  qdisc  add  dev  eth0  root  netem  delay  100ms  10ms
      该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。 
      还可以更进一步加强这种波动的随机性:
      # tc  qdisc  add  dev  eth0  root  netem  delay  100ms  10ms  30%
      该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送。
    2、模拟网络丢包
      # tc  qdisc  add  dev  eth0  root  netem  loss  1%
      该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包。
      也可以设置丢包的成功率:
      # tc  qdisc  add  dev  eth0  root  netem  loss  1%  30%
      该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30% 。
    3、模拟包重复
      # tc  qdisc  add  dev  eth0  root  netem  duplicate 1%
      该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包 。
    4、模拟包损坏
      # tc  qdisc  add  dev  eth0  root  netem  corrupt  0.2% 
      该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。(内核版本需在2.6.16以上)
    5、模拟包乱序
      # tc  qdisc  change  dev  eth0  root  netem  delay  10ms   reorder  25%  50%
      该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟 10 秒。 
      新版本中,如下命令也会在一定程度上打乱发包的次序:  
      # tc  qdisc  add  dev  eth0  root  netem  delay  100ms  10ms
    6、模拟恢复
        # tc qdisc del dev eth1 root
    7、列出所有现有规则
        # tc -s qdisc ls dev eth0
    备注:验证网络延迟、丢包是否成功,ping即可
    系统负载问题
      1、cpu使用率单核
      # cat /dev/zero > /dev/null
      # cat /dev/urandom | gzip -9 > /dev/null
      # dd if=/dev/zero of=/dev/null
      # yes > /dev/null
      2、cpu多核施压 # for i in 'seq 1 $(cat /proc/cpuinfo | grep "physical id" | wc -l)'; do cat /dev/zero > /dev/null & done
      # cat /dev/urandom | gzip -9 | gzip -d | gzip -9 | gzip -d > /dev/null
      3、磁盘io
      # dd if=/dev/zero of=loadfile bs=1M count=1024
      # while true; do cp loadfile loadfile1; done
      其他比较好用工具stress和lookbusy
      stress
        stress --cpu 2 # 产生 2 个工作进程对 CPU 施加压力,也就是将会占用两个 CPU 核心
        stress --vm 1 --vm-bytes 128M --vm-hang 0 # 产生 1 个工作进程,占用 128MB 内存并保持
        stress --io 1 # 产生 1 个工作进程对 IO 施加压力
        lookbusy
          lookbusy -c 50 # 占用所有 CPU 核心各 50%
          lookbusy -c 50 -n 2 # 占用两个 CPU 核心各 50%
          lookbusy -c 50-80 -r curve # 占用所有 CPU 核心在 50%-80% 左右浮动
          lookbusy -c 0 -m 128MB -M 1000 # 每 1000 毫秒,循环释放并分配 128MB 内存
          lookbusy -c 0 -d 1GB -b 1MB -D 10 # 每 10 毫秒,循环进行 1MB 磁盘写入,临时文件不超过 1GB
          特别提示:请勿生产环境使用上述命令,tc开启策略要记得关闭。
          参考
          https://www.cnblogs.com/wuzm/p/11096276.html
          https://learnku.com/articles/22744
          文章转载自NIFI实战,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论