介绍

  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

yagent使用说明的更多相关文章

  1. ycache分布式缓存框架

    介绍   ycache是yhd的分布是缓存框架,设计目的是提供易扩展.高可靠的分布式缓存系统.ycache从全局视角分配和管理缓存,检测缓存的状态并做故障恢复.   当应用(应用:使用ycache的上 ...

  2. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  3. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  4. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  5. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  6. Map工具系列-02-数据迁移工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  7. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  8. jQuery验证控件jquery.validate.js使用说明

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

  9. gdbsever 使用说明

    gdbsever 使用说明 在新塘N3292x平台下 编译 gdbsever ./configure --target=arm-linux --host=arm-linux arm-linux-gdb ...

随机推荐

  1. springboot(十八)-session共享

    前言 在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图: 在这样的架构中 ...

  2. docker toolbox的redis 配置主从及哨兵模式保证高可用

    redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一   主从模式1 搜索redis镜像  docker search redis2 拉取镜像docker pul ...

  3. python之pymysql

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. 安装: pip3 install PyMySQL 常用参数: pymysq ...

  4. ssh无密码访问设置(ssh-keygen 的详解)

    [原文链接]http://blog.csdn.net/wh_19910525/article/details/7433164 为了让两个linux机器之间使用ssh不需要用户名和密码.所以采用了数字签 ...

  5. QT 托盘 hover事件捕捉

    1. QSystemTrayIcon hover事件 参考:https://stackoverflow.com/questions/21795919/how-to-catch-the-mousehov ...

  6. Redis位操作介绍

    在学习redis的过程了,看到了redis还能用于大数据处理,具体场景如下:腾讯10亿用户,要几个毫秒内查询到某个用户是否在线,你能怎么做?千万别说给每个用户建立一个key,然后挨个记(你可以算一下需 ...

  7. Qualcomm_Mobile_OpenCL.pdf 翻译-1

    1 前言 1.1 目的 这篇文档的主要目的是,向原始设备制造商(OEMs),独立软件供应商(ISVs),第三方开发者们,提供在基于高通骁龙400系列.600系列,和800系列的手机平台和芯片上进行开发 ...

  8. 从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))…..

    从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))-.. 博客分类: 工具使用 SVNsubversion配置管理Apache应用服务器  </div> 花了一 ...

  9. Python中的序列

    Python中有四种内建的数据结构,即列表.元组.字典.集合.其中字典和集合我会以后再写,现在先说列表和元组,它们两个和以前提到很多次的字符串, 其实都属于——序列. 一.列表(list): 1. l ...

  10. DevExpress ASP.NET v19.1版本亮点:发布全新的Gantt控件

    行业领先的.NET界面控件DevExpress 发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Controls v19.1中新增的一些控件及增强的控件功能 ...