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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
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>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
549 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
2月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
2月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
437 1
|
4月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
545 21
|
2月前
|
人工智能 JavaScript 前端开发
用 Go 语言轻松构建 MCP 服务器
本文介绍了使用 Go 语言构建 MCP 服务器的完整过程,涵盖创建服务器实例、注册工具、资源和提示词,以及通过 stdio 和 sse 模式启动服务的方法,帮助开发者快速集成 LLM 应用与外部系统。
|
3月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
342 13
|
3月前
|
监控 Linux 网络安全
FinalShell SSH工具下载,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux
FinalShell是一款国人开发的多平台SSH客户端工具,支持Windows、Mac OS X和Linux系统。它提供一体化服务器管理功能,支持shell和sftp同屏显示,命令自动提示,操作便捷。软件还具备加速功能,提升访问服务器速度,适合普通用户和专业人士使用。
241 0
|
3月前
|
存储 安全 Linux
Linux服务器上安装配置GitLab的步骤。
按照以上步骤,一个基础的GitLab服务应该运行并可以使用。记得定期检查GitLab官方文档,因为GitLab的安装和配置步骤可能随着新版本而变化。
248 0
|
4月前
|
监控 Ubuntu 安全
Ubuntu系统下构建FTP服务器的步骤
记住,时不时的巡视(监控)农场,更新工具(软件和安全性更新),以及恰当的维护同样重要,这样你的FTP农场才能长久繁荣。
76 4

热门文章

最新文章