《高性能Linux服务器构建实战》——3.3节Memcached的管理与性能监控

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本节书摘来自华章社区《高性能Linux服务器构建实战》一书中的第3章,第3.3节Memcached的管理与性能监控,作者:高俊峰,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.3 Memcached的管理与性能监控

3.3.1 如何管理Memcached
1.通过Memcached的监听端口进行管理
Memcached的管理相对比较容易,通过命令行登录到Memcached的监听端口,然后执行一些命令,通过这些命令的输入即可查看Memcached的运行状态。
管理Memcached的命令如下:
stats,统计Memcached的各种信息。
stats reset,重新统计数据。
stats slabs,显示slabs信息。通过这个命令能获取每个slabs的chunksize长度,从而确定数据到底保存在哪个slab。
stats items,显示slab中的item数目。
set | get, gets,前面已经介绍过,用来保存或获取数据。
例如,要查看Memcached的统计信息,执行“telnet ip 监听端口”命令,登录成功之后执行stats命令。具体过程如下:

[root@web181 ~]# telnet 192.168.1.181 11211
Trying 192.168.1.181...
Connected to web181 (192.168.1.181).
Escape character is '^]'.
stats
STAT pid 19900   #Memcached启动的进程ID
STAT uptime 2115676  #到目前为止启动了多少秒
STAT time 1287937993 
STAT version 1.4.5     #Memcached的版本信息
STAT pointer_size 64
STAT rusage_user 0.003999
STAT rusage_system 0.001999
STAT curr_connections 10  #当前的并发连接数
STAT total_connections 16  #总的连接数
STAT connection_structures 11 
STAT cmd_get 1   #执行的get命令的次数
STAT cmd_set 4    #执行的set命令的次数
STAT cmd_flush 0 #执行flush命令的次数
STAT get_hits 1     #get的命中数
STAT get_misses 0  #get的非命中数
STAT delete_misses 0
STAT delete_hits 0 
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 157
STAT bytes_written 129
STAT limit_maxbytes 33554432  #允许使用的最大内存容量
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 149
STAT curr_items 2
STAT total_items 2
STAT evictions 0
STAT reclaimed 0
END

通过以上信息可以看到Memcached的状态、连接的次数、当前的并发连接数。通过这些信息可以分析出,当前Memcached的换入换出是否比较厉害,容量是否足够。
2.利用memcached-tool管理Memcached
memcached-tool是Brad Fitzpatrick利用Perl编写的一个Memcached管理脚本。这个脚本通过将之前的命令行进行封装,使输入的值更加规整,进而更便于分析查看。可以通过下面的网址下载memcached-tool:http://code.sixapart.com/svn/memcached/trunk/server/scripts/memcached-tool
下面是memcached-tool的基本用法:

[root@web181 ~]# perl memcached-tool
Usage: memcached-tool <host[:port]> [mode]
       memcached-tool 10.0.0.5:11211 display
       memcached-tool 10.0.0.5:11211
       memcached-tool 10.0.0.5:11211 stats
       memcached-tool 10.0.0.5:11211 move 7 9
memcached-tool的执行示例如下:
[root@web181 ~]# perl memcached-tool 127.0.0.1:11211
  1      96 B      278 s       1       2      no
[root@web181 ~]# perl memcached-tool 127.0.0.1:11211 display
  1      96 B      278 s       1       2      no

以上过程格式化输出的stats命令的信息非常规整,如图3-7所示。


66e4514b618a3164ad81454d6a62e0d203d7fec3

总的来说,对单个或少量的Memcached服务器的维护相对容易,如果Memcached量非常大(这里说的量是指由单个Memcached运行100GB的数据容量或者有多台大容量的Memcached运行服务时),如何组织这些资源,以及在某一个Memcached服务器宕机时,如何能保证后端的数据库压力不会产生瓶颈,这是需要考虑的问题。在进行大规模部署时,需要根据业务分配不同的Memcached服务,同一类型的业务使用相同的资源,并且记录这些业务使用的端口资源,定期分析这些资源是否足够,以及利用一致性散列算法来确保在扩容Memcached的情况下,尽量减少对数据库的影响。

3.3.2 Memcached的监控
部署好Memcached之后,需要对Memcached的使用情况进行跟踪:监控Memcached的状态信息、内存使用情况、hit/miss的值。通过对Memcached的监控不仅能立刻了解Memcached出现问题,还能够利用状态信息来分析业务数据的增长并为未来的容量规划提供依据。
监控Memcached的工具很多,目前常用的监控工具有:memcache.php、Nagios和cacti。下面分别对这三种监控方法进行介绍。
1.利用memcache.php对单台Memcached进行监控
利用memcache.php进行监控是最简单的监控方法,只要机器支持PHP环境即可。这种监控的执行过程是:把这个文件放到可以访问的目录中,然后对这个memcache.php文件进行修改。下载此文件的网址如下:
http://livebookmark.net/memcachephp/memcachephp.zip
在使用memcache.php文件之前需要先修改用于访问的用户名和密码。

vi memcache.php
.....
define('ADMIN_USERNAME','memcache');    // 定义用户名
define('ADMIN_PASSWORD','password');    // 定义密码
.....
$MEMCACHE_SERVERS[] = 'mymemcache-server:11211'; //定义要查看的IP和端口
$MEMCACHE_SERVERS[] = 'mymemcache-server2:11212'; //可添加多个
修改自己定义的用户名和密码之后,就可以通过URL访问这个php文件了。输入用户名和密码后Memcached的状态图如图3-8所示。

<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/f78c37d67755e3268ab36f7272f936ea0f95b069.png" >
</div>

图3-8很直观地反映了当前Memcached的使用情况、命中和不命中的比例等各种状态。
2.利用Nagios监控Memcached
利用Nagios来监控Memcached的方式有两种:一种方式是直接使用check_tcp(mixi)的方法来监控,代码如下:

define command {
command_name check_memcached
command_line $USER1$/check_tcp H$HOSTADDRESS$ -p 11211 –t 5 -E
-s 'statsrnquitrn' –e 'uptime' –M crit
}


这种方式很简单,可以直接使用,不需要安装其他插件。
另一种方式是通过Nagios 的Memcached监控插件可以详细地监视Memcached的get和add等动作。例如,可以通过stats命令来确认Memcached的运行状态。下载Nagios的Memcached监控插件的网址如下:
http://search.cpan.org/CPAN/authors/id/Z/ZI/ZIGOROU/Nagios-Plugins-Memcached-0.02.tar.gz
编译安装Nagios的Memcached监控插件后,通过Nagios的check_memcached直接访问Memcached服务器的监听端口。当然,也可以在将此插件安装在Memcached服务器后利用check_nrpe来获取Memcached服务器的状态信息,过程如下:

define command {

     command_name check_memcached_11211
     command_line $USER1$/check_memcached -H 192.168.1.221:11211 --size-warning 80 --size-critical 90
     }
配置完成后,在Memcached的界面会看到如图3-9所示的信息。

<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/25e9abbb3cfd0182e41252a019a8a1e9e4c448ac.png" >
</div>

也可以将stats目录的结果通过rrdtool转化成图形,以进行性能监视,并将每天的内存使用量做成报表,通过邮件发送出去。
3.利用cacti监控Memcached
在cacti中采用一套监控Memcached的模板,可以图形化显示Memcached当前的状态信息。这个模板可以从以下网址下载:http://dealnews.com/developers/cacti/memcached.htmls
这里不介绍配置过程。配置完成后cacti监控Memcached的效果图如图3-10、图3-11、图3-12和图3-13所示。

<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/35bf0bf74587a9dcf8ce5ed5ee89f59bc78dfb5d.png" >
</div>

当有多台Memcached时,可以考虑使用cacti和Nagios来配置统一的监控界面,这有利于后期对Nemcached进行运维。而memcache.php适合单台机器来使用。

**3.3.3 Memcached变种产品介绍**
国内外有很多基于Memcached开发的产品,这些产品支持所有Memcached的协议,同时侧重不同的应用场景,可以根据自己的应用需求选择合适的Memcached变种。下面分别介绍几种Memcached的变种产品。
1. memcachedb
memcachedb是新浪网基于Memcached开发的一个开源项目。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合需要超高性能读写速度、持久化保存的应用场景,例如,将memcachedb应用于新浪博客的管理。如果对Memcached有持久化需求,可以考虑使用memcachedb。
2. repcached
repcached是日本人开发的基于Memcached的一个patch,实现Memcached的复制功能,它支持多个Memcached之间相互复制,可以解决Memcached的容灾问题。有cache容灾需求的可以尝试使用这一功能。
3. memcached_functions_mysql
这个功能相当于MySQL的UDFs(User Defined Functions),在MySQL中通过触发器更新Memcached。这样可以做到把数据写入MySQL,然后从Memcached获取数据,以减轻数据库的压力,同时减少很多开发的工作量。
关于memcached_functions_mysql的使用和经验会在下一节进行详细介绍。
4. memcacheQ
memcacheQ在Memcached的基础上实现了消息队列。下面以PHP客户端为例介绍memcacheQ实现消息队列的方式。
消息从尾部入栈:memcache_set
消息从头部出栈:memcache_get
memcacheQ最大的优势是:它是基于Memcached开发的,可以通过各种Memcached命令对它进行操作。基于Memcached开发的应用完全不需要做任何修改。
memcacheQ应用于数据库的多机房分布式部署环境,数据库分布在各地,各自写各自的数据库,同时写入本地的memcacheQ,本地的memcacheQ通过调度程序(需要自己开发)把数据从memcacheQ中读取出来,然后写入其他机房的数据库主库,最终使每个机房的数据库数据一致。如图3-14所示为memcacheQ在两个机房的部署情况。
<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/cf582b55a0fec9072096dd40710526a3186a5583.png" >
</div>
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
安全 Java Linux
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
53 0
|
2天前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
53 28
|
1天前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
66 28
|
14天前
|
JavaScript Linux Python
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
61 20
|
20天前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
90 20
|
24天前
|
人工智能 安全 大数据
【限时特惠】阿里云服务器7折抢购!高性能+高性价比,开发者与企业必备攻略
阿里云服务器限时7折特惠,高性能、高性价比,为开发者和企业量身打造!新老用户均可参与,灵活配置满足多种需求,全球节点低延迟覆盖。自研神龙架构保障稳定性,安全防护全面,操作便捷,生态丰富。适用于个人开发、企业部署、跨境业务及AI计算等场景。点击专属链接立即抢购,活动名额有限,速来享受云端算力带来的高效体验!
48 0
|
1月前
|
存储 运维 监控
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
1月前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
152 1
|
11月前
|
SQL 运维 监控
关系型数据库性能监控工具
【5月更文挑战第21天】
191 2
|
9月前
|
运维 监控 Java
(十)JVM成神路之线上故障排查、性能监控工具分析及各线上问题排错实战
经过前述九章的JVM知识学习后,咱们对于JVM的整体知识体系已经有了全面的认知。但前面的章节中,更多的是停留在理论上进行阐述,而本章节中则更多的会分析JVM的实战操作。
205 1

热门文章

最新文章