• yagent使用说明


    介绍

      yagent是ycache的一个组件,用于管理memcached或redis的缓存实例。主要功能包括启动cache实例、将cache实例的信息写到zk上给yconsole使用、检测cache实例的状态并做实例级别的故障恢复、redis主备切换的切换、缓存的简单统计信息收集等功能。

    原理
     yagen的原理很简单,它是cache服务器上的一个守护进程,并且按照配置要求启动很多cache实例(例如可配置每个cache实例4G空间,那32G内存的服务器就自动起7个实例,预留一些内存给系统使用),并调用kazoo的zk接口将cache服务器和cache实例的信息写到zk上。它在zk上创建了一个ephemeral状态节点标明自己是否处于active状态; 然后它没5s检测一次所有实例的状态(通过向cache实例获取一个key来检测),如果这个cache实例响应超时,就直接重启这个cache实例(很暴力,直接kill -9后从新启动)。当然,它会向yhd的监控系统发一个告警信息。。

    redis的主备切换

    统计功能

    设计一个简单的统计功能,初衷有两个:
    • 可以在yconsole上很容易看到一些比较重要的统计信息,例如命中率、get/set命令的速度、evicted的数量、key总数等。这样可以方便的对比同一个cache id内部负载是否均匀;不同的机器之间负载是否均衡。
    • 可以在分配机器给新的cache id的时候,选取负载低的机器,从而更好的实现负载均衡。
    这两个功能,使用监控系统的信息是很麻烦的。实现上,yagent主要负责统计数据的收集,写到zk上;yconsole读取zk上的数据,显示给用户。

    yagent 中的功能实现:
    yagent会按某个时间间隔读取一次cache的统计信息(间隔可以配置,默认5s),并将这个间隔的统计信息保存到一个链表里(内存中);用户可以配置需要聚合的统计信息的时间间隔(例如指定按每分钟、每小时、每天统计),从链表中将与当前时间对应时间间隔的统计信息取出来,计算这些时间差内的统计增量,将计算结果以字符串的格式保存到这个每个实例在zk的节点的info子节点的内容中。

    依赖

    linux机器上要有nc这个命令,用于检查mecached和redis的tcp端口是否正常服务。
    python的:主要是kazoo这个zk client依赖,其他都是默认有的。


    配置

    配置项很简单,看名字就明白内部做了什么动作了。

    1. [global]
    2. zoo_svr=
    3. cf_svr_file=/var/www/config/env.ini
    4. localip=
    5. CheckInterval=5
    6. group=default
    7. priority=100
    8. system_res_mem=3072
    9. statsEnable=1
    10. #statsIntervalNum: the interval that update statistics(unit is CheckInterval). default is 600s or 10min
    11. statsIntervalNum=12
    12. #showStatIntervalSec: The statistics interval to be show(unit is second). 5min/1hour/1day
    13. showStatIntervalSec=60,3600,86400
    14. [memcached]
    15. mc_maxmem=4096
    16. mc_meta_size=16
    17. mc_count=-1
    18. mc_args=-u nobody -d -c 10240 -o tail_repair_time=7200 slab_reassign slab_automove
    19. mc_port=11211
    20. mc_port_step=10
    21. mc_fpath=/usr/bin/memcached
    22. mc_enabled=1
    23. mc_port_file=/var/log/yagent_mc_port.cfg
    24. [redis]
    25. peers=
    26. timeout=60
    27. redis_maxmem=128
    28. redis_meta_size=128
    29. redis_count=-1
    30. redis_port=16379
    31. redis_port_step=10
    32. redis_conf=/etc/redis/redis.conf
    33. redis_fpath=/usr/local/bin/redis-server
    34. redis_enabled=0
    35. redis_port_file=/var/log/yagent_redis_port.cfg
    36. check_master_interval=1
    37. get_slaves_interval=100

    存在问题:

    当前yagent长时间运行后会出现挂死的情况(特别是在开启了统计功能后),还没有找到原因。好在yagent的挂死或重启不会影响ycache-client,所以现在运维检测一下这个,如果挂死就重启它。
    1. [root@whtest144-57 11685]# pstack 11685
    2. Thread 3 (Thread 0x2b5b4a6d6940 (LWP 11704)):
    3. #0 0x000000348580ce51 in sem_wait () from /lib64/libpthread.so.0
    4. #1 0x00000000004bf8fd in PyThread_acquire_lock ()
    5. #2 0x00000000004c27c0 in lock_PyThread_acquire_lock ()
    6. #3 0x0000000000493ca5 in PyEval_EvalFrameEx ()
    7. #4 0x00000000004945f5 in PyEval_EvalCodeEx ()
    8. #5 0x0000000000492331 in PyEval_EvalFrameEx ()
    9. #6 0x00000000004945f5 in PyEval_EvalCodeEx ()
    10. #7 0x0000000000492331 in PyEval_EvalFrameEx ()
    11. #8 0x00000000004945f5 in PyEval_EvalCodeEx ()
    12. #9 0x00000000004ea56c in function_call ()
    13. #10 0x0000000000417bbd in PyObject_Call ()
    14. #11 0x000000000048e945 in PyEval_EvalFrameEx ()
    15. #12 0x00000000004932a8 in PyEval_EvalFrameEx ()
    16. #13 0x00000000004932a8 in PyEval_EvalFrameEx ()
    17. #14 0x00000000004945f5 in PyEval_EvalCodeEx ()
    18. #15 0x00000000004ea46d in function_call ()
    19. #16 0x0000000000417bbd in PyObject_Call ()
    20. #17 0x000000000041ef4f in instancemethod_call ()
    21. #18 0x0000000000417bbd in PyObject_Call ()
    22. #19 0x000000000048bfb6 in PyEval_CallObjectWithKeywords ()
    23. #20 0x00000000004c2bcd in t_bootstrap ()
    24. #21 0x000000348580683d in start_thread () from /lib64/libpthread.so.0
    25. #22 0x0000003484cd526d in clone () from /lib64/libc.so.6





  • 相关阅读:
    机器学习笔记5:决策树
    假设检验、T检验
    机器学习中的生成模式和判别模式
    机器学习笔记3:朴素贝叶斯
    机器学习笔记2:线性回归、逻辑回归
    机器学习之逻辑回归详解
    机器学习笔记1:机器学习中的一些基本概念
    标准化和归一化和独热编码
    正十二面体万花筒
    李代数E8 的根系 python绘图
  • 原文地址:https://www.cnblogs.com/zwCHAN/p/3994360.html
Copyright © 2020-2023  润新知