设为首页 收藏本站
查看: 1019|回复: 0

[经验分享] 利用memcached + 三款缓存监控,打造强大的memcached缓存服务器。

[复制链接]

尚未签到

发表于 2018-12-24 12:05:23 | 显示全部楼层 |阅读模式
  memcached 简介
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
  在中型网站中的应用
使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。我这里简单提出我的个人看法,未经实践,权当参考。
[分布式应用]
Memcache本来支持分布式,我们客户端稍加改造,更好的支持。我们的key可以适当进行有规律的封装,比如以user为主的网站来说,每个用户都有UserID,那么可以按照固定的ID来进行提取和存取,比如1开头的用户保存在第一台Memcache服务器上,以2开头的用户的数据保存在第二台Mecache服务器上,存取数据都先按照User ID来进行相应的转换和存取。
但是这个有缺点,就是需要对User ID进行判断,如果业务不一致,或者其他类型的应用,可能不是那么合适,那么可以根据自己的实际业务来进行考虑,或者去想更合适的方法。
[ 减少数据库压力]
这个算是比较重要的,所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能急剧下降,无法同时服务更多的用户,比如MySQL,特别频繁的锁表,那么让Memcache来分担数据库的压力吧。我们需要一种改动比较小,并且能够不会大规模改变前端的方式来进行改变目前的架构。

  ---------------------------------------------开始安装----------------------------------------------
  解决依赖:

yum install zlib-* zlib*  
安装libevent(memcached 对此软件依赖很多,一定要安装)

wget https://github.com/downloads/libevent/libevent/libevent-1.4.11-stable.tar.gz./configure --prefix=/usr/local/libevent
make && make install  安装memcached

wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz./configure -prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib
ln -s /usr/local/libevent/lib/libevent* /lib64/  启动memcached 服务端

/usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root  
启动参数详解:
-d 选项是启动一个守护进程-m是分配给Memcache使用的内存数量,单位是MB,我这里是128MB
-u 是运行Memcache的用户,我这里是root
-l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1
-p 是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,这里使用默认端口11211
-c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件,这里是保存在/var/run/memcached.pid
  
memcached 的启动和关闭:
启动:

/usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root -P /var/run/memcached.pid  关闭:

killall -9 memcached     或者  kill `cat /var/run/memcached.pid`  实时取得stats数据:

echo stats | nc 127.0.0.1 11211  循环实时状态:
watch “echo stats | nc 127.0.0.1 11211”  测试memcached 安装启动成功

telnet 127.0.0.1 11211  输入
stats  退出telnet :ctrl + ]    然后输入quit

  
---------------------------------------服务端安装完成-----------------------------------------
  让php支持memcached  安装memcache
wget http://pecl.php.net/get/memcache-2.2.7.tgz
cd memcache-2.2.7/usr/local/php/bin/phpize./configure -enable-memcache --with-php-config/usr/local/php/bin/php-config --with-zlib-dir
make && make install  添加模块:
  安装完成后会有提示内容:
  Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/
  

vim /usr/local/php/etc/php.ini  修改php.ini中的extension_dir = “./” 如果没有就新增加
  
添加以下内容 (大约在730行):
#extension_dir  参数后面的地址  ,打开该目录看是否存在memcache.so
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20100525/"
extension=memcache.so  
重启apache:
/usr/local/apache/bin/httpd -k restart  验证php -m 是否支持了memcache:
/usr/local/php/bin/php -m | grep memcache  出现memcache   即可!
  
--------------------------------php 支持 memcache 模块配置完成----------------------------------
  第一款图形监控工具
  解压软件并且转移至网站根目录(注意权限和 php.ini 里面的 open_basedir 这个选项):

wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz
tar -zxvf memadmin-1.0.12.tar.gz
mv memadmin /usr/local/apache/html/
cd memadmin
vim config.php  在里面修改帐号密码(默认:admin,admin)
  http://127.0.0.1/memadmin/index.php
  添加memcached 服务器:

  开始管理:

  
第二款监控软件 memcache.php
wget http://livebookmark.net/memcachephp/memcachephp.zip
unzip memcachephp.zip
vim memcache.php  修改帐号和密码 (默认:memcache,password)
我的改成了root 123456

  注意此处要修改成你的memcached 的服务器ip:
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
改成
$MEMCACHE_SERVERS[] = '你的memcached的IP:11211';

  我的
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array

  http://127.0.0.1/memcache.php
  输入帐号和密码 即可看到界面:

  第三款 监控软件:
  memcached-tool
# memcached-tool
Usage: memcached-tool  [mode]
  memcached-tool 10.0.0.5:11211 display    # shows slabs
      memcached-tool 10.0.0.5:11211            # same.  (default is display)
      memcached-tool 10.0.0.5:11211 stats      # shows general stats
      memcached-tool 10.0.0.5:11211 dump       # dumps keys and value

  --------------------------------- memcached 监控部分至此完成    -------------------------------------
  写个测试文件:

vim /usr/local/apache/html/test.php  测试截图:
http://127.0.0.1/test.php
  看到This is a test! 测试成功

  
然后看看监控页面 是不是有数值的变化了?? 如果你的和我的一样有了数值的变化被监控到了 恭喜你!!! 成功了!
------------------------------至此php支持memcache模块安装完成-------------------------------------
  安装过程中可能发生的错误:
  1) 没有phpize:
解决方法:
centos是默认没有安装php-devel的

yum install php-devel  2) make: *** [memcache.lo] Error 1
没有安装zlib,我的php -m 里面也确实存在zlib 的支持,最后是换了版本得到的解决。从 3.X 版本降到2.2.7 版本

yum install zlib-devel  3)PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/local/apache2/htdocs/memcache.php on line 726

  没有设置php里面的zone.time ,我设置在了配置文件的本身
  4)PHP Warning:  session_start(): open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (./tmp:/usr/local/apache/htdocs) in /usr/local/apache/htdocs/memadmin/include/class/memadmin.class.php on line 75

  找到open_basedir =  这行加上/usr/local/apache/htdocs/memadmin  目录即可解决问题。
  -------------------------------------错误排除至此完成------------------------------------------
  ------------------------------以下内容摘自网络,未经实验 仅供参考---------------------------------
  memcached 的stats
  通过stats命令分析Memcached的内部状态 收藏
Memcached有个stats命令,通过它可以查看Memcached服务的许多状态信息。使用方法如下:
先在命令行直接输入telnet 主机名端口号,连接到memcached服务器,然后再连接成功后,输入stats 命令,即可显示当前memcached服务的状态信息。
比如在我本机测试如下:
stats
STAT pid 1552
STAT uptime 3792
STAT time 1262517674
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 1
STAT total_items 2
STAT bytes 593
STAT curr_connections 2
STAT total_connections 28
STAT connection_structures 9
STAT cmd_get 3
STAT cmd_set 2
STAT get_hits 2
STAT get_misses 1
STAT evictions 0
STAT bytes_read 1284
STAT bytes_written 5362
STAT limit_maxbytes 67108864
STAT threads 1
END
这里显示了很多状态信息,下边详细解释每个状态项:
1. pid: memcached服务进程的进程ID
2. uptime: memcached服务从启动到当前所经过的时间,单位是秒。
3. time: memcached服务器所在主机当前系统的时间,单位是秒。
4. version: memcached组件的版本。这里是我当前使用的1.2.6。
5. pointer_size:服务器所在主机操作系统的指针大小,一般为32或64.
6. curr_items:表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
7. total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
8. bytes:表示系统存储缓存对象所使用的存储空间,单位为字节。
9. curr_connections:表示当前系统打开的连接数。
10. total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数。
11. connection_structures:表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
12. cmd_get:累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
13. cmd_set:累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
14. get_hits:表示获取数据成功的次数。
15. get_misses:表示获取数据失败的次数。
16. evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
17. bytes_read:memcached服务器从网络读取的总的字节数。
18. bytes_written:memcached服务器发送到网络的总的字节数。
19. limit_maxbytes:memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
20. threads:被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
总结:stats命令总体来说很有用,通过这个上命令我们很清楚当前memcached服务的各方面的信息。除此之外,我还没有其他方法可以知道这些状态信息。可能还有其他途径,可能我对memcached组件还不太熟悉吧。
  -----------------------------------------一些简单用法--------------------------------------------
  下面是一些简单用法:
Memcache::add // 添加一个值,如果已经存在,则返回false
Memcache::addServer // 添加Memcache地址
Memcache::close // 关闭一个Memcache的连接
Memcache::connect // 打开一个到Memcache的连接
Memcache::decrement // 对保存的某个key中的值进行减法操作
Memcache::delete // 删除一个Memcache上的key值
Memcache::flush // 刷新所有Memcache上保存的项目(类似于删除所有的保存的项目)
Memcache::get // 从Memcache上获取一个key值
Memcache::getExtendedStats // 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus // 获取运行服务器的参数
Memcache::getStats //获取当前Memcache服务器运行的状态
Memcache::getVersion // 返回运行的Memcache的版本信息
Memcache::increment // 对保存的某个key中的值进行加法操作
Memcache::pconnect // 打开一个到Memcache的长连接
Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::set // 向Memcache添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold // 对大于某一大小的数据进行压缩
Memcache::setServerParams // 在运行时修改服务器的参数
  实例(仅供参考):

  ------------------------------------------------------------
  ---------------------至此全篇 (完)-------------------------




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655278-1-1.html 上篇帖子: memcached缓存数据库 下篇帖子: 【Memcached】CentOS上安装memcached
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表