zoukankan      html  css  js  c++  java
  • 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





  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/zwCHAN/p/3994360.html
Copyright © 2011-2022 走看看