为什么zookeeper会导致磁盘IO高【转】

由于早期的storm版本心跳信息严重依赖zookeeper,心跳风暴会导致zookeeper的事务日志频繁的写磁盘,带来的问题首当其冲的是磁盘IO会爆掉。

优化思路

将zookeeper事务的日志放入内存中,降低对磁盘的依赖,受内存空间容量限制,需要控制事务日志大小。

这个方案的风险就是一旦机房断电会导致zookeeper中的部分数据丢失,所以特别重要的数据不建议这样做,SSD会是个不错的选择。

方案步骤

  • 事务日志指向内存文件系统dataLogDir=/dev/shm
  • 关闭自动事务日志的管理#autopurge.purgeInterval=1
  • 启用脚本删除历史事务日志以便控制内存的使用

清理事务日志

Java代码  收藏代码
  1. #!/bin/bash  
  2. source /etc/profile  
  3.   
  4. #snapshot file dir   
  5. dataDir=/opt/zookeeperdata/version-2  
  6. #tran log dir   
  7. dataLogDir=/dev/shm/version-2  
  8.   
  9. #leave transaction files  
  10. leaveTran=10  
  11. #leave snapshot files  
  12. leaveSnap=10000  
  13.   
  14. echo ""  
  15. echo ""  
  16. echo "before purge memory:"  
  17. free -m  
  18. ls -t $dataLogDir/log.* | tail -n +$leaveTran  | xargs rm -f  
  19. ls -t $dataDir/snapshot.* | tail -n +$leaveSnap | xargs rm -f  
  20. echo "after purge memory:"  
  21. free -m  

zookeeper配置

Java代码  收藏代码
  1. dataDir=/opt/zookeeperdata  
  2. dataLogDir=/dev/shm  
  3.   
  4.   
  5. #自动清理时保存在datadir里的数据快照数。最小值3  
  6. #autopurge.snapRetainCount=3  
  7.   
  8. #自动清理任务的间隔小时数  
  9. #autopurge.purgeInterval=1  
  10.   
  11. # 每当10000条事务日志写入时,创建snapshot文件  
  12. snapCount=10000  

 

 磁盘IO低至可以忽略

原文地址:https://www.cnblogs.com/seaspring/p/7521209.html