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

本文涉及的产品
云数据库 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>
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21小时前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
8 3
|
2天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
4天前
|
运维 监控 安全
2023年最详细的:本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录
2023年最详细的:本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录
|
6天前
|
Linux 网络安全 数据库
linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
|
5月前
|
Linux Memcache
Linux - 安装memcached
Linux - 安装memcached
52 0
Linux - 安装memcached
|
6月前
|
Docker 容器
Docker下安装memcached
Docker下安装memcached
58 0
|
9月前
|
Shell C语言
脚本用源码来安装 memcached 服务器
脚本用源码来安装 memcached 服务器
35 1
|
10月前
|
Java 程序员
【memcached】下载、安装、、出错一分钟全搞定
【memcached】下载、安装、、出错一分钟全搞定
132 0
|
PHP
安装memcached 和 php-memcached 实现PHP访问memcached
安装memcached 和 php-memcached 实现PHP访问memcached
86 0
安装memcached 和 php-memcached 实现PHP访问memcached
|
缓存 安全 Java
【技术分享】Memcached介绍及php-memcache扩展安装
【技术分享】Memcached介绍及php-memcache扩展安装
95 0
【技术分享】Memcached介绍及php-memcache扩展安装