• 为什么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低至可以忽略

  • 相关阅读:
    Lucene.Net
    授权
    测试
    Upgrade ASP.NET 1.1 To ASP.NET 2.0 Cookie
    Highlight
    缓存
    base
    System.Environment.UserDomainName 为什么不返回 当前的 Domainname
    英语骂人一百句
    比较动态调用代码
  • 原文地址:https://www.cnblogs.com/seaspring/p/7521209.html
Copyright © 2020-2023  润新知