lnmmp即Linux+nginx+memcache+mysql+php/jsp
一、实验准备
1.所需主机
node1:172.16.133.1
node2:172.16.133.2
2.所需软件

lnmmp的搭建及memcache的应用_第1张图片


二、lnmmp的安装
1.安装nginx
安装配置第三方模块,实现upstream中对后端http server的健康状态检测:
模块下载地址:https://github.com/cep21/healthcheck_nginx_upstreams;模块名称:ngx_http_healthcheck_module
安装配置方法:
(1).首先解压healcheck模块到某路径下,这里假设为/tmp/healthcheck_nginx_upstreams
(2).对nginx打补丁
 

   
   
   
   
  1. tar xf cep21-healthcheck_nginx_upstreams-16d6ae7.zip  
  2. mv cep21-healthcheck_nginx_upstreams-16d6ae7 /tmp/healthcheck_nginx_upstreams  
  3. tar xf nginx-1.0.14.tar.gz  
  4. cd nginx-1.0.14  
  5. patch -p1 < /tmp/healthcheck_nginx_upstreams/nginx.patch  

(3).编译安装nginx
 

   
   
   
   
  1. ./configure \  
  2.   --prefix=/usr \  
  3.   --sbin-path=/usr/sbin/nginx \  
  4.   --conf-path=/etc/nginx/nginx.conf \  
  5.   --error-log-path=/var/log/nginx/error.log \  
  6.   --http-log-path=/var/log/nginx/saccess.log \  
  7.   --pid-path=/var/run/nginx/nginx.pid  \  
  8.   --lock-path=/var/lock/nginx.lock \  
  9.   --user=nginx \  
  10.   --group=nginx \  
  11.   --with-http_ssl_module \  
  12.   --with-http_flv_module \  
  13.   --with-http_stub_status_module \  
  14.   --with-http_gzip_static_module \  
  15.   --http-client-body-temp-path=/var/tmp/nginx/client/ \  
  16.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \  
  17.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \  
  18.   --with-pcre \  
  19.   --add-module=/tmp/healthcheck_nginx_upstreams  
  20. make && make install  

(4).为nginx准备服务脚本
见:http://5142926.blog.51cto.com/5132926/931149
(5).ngx_http_healthcheck_module模块的使用方法
healthcheck_enabled
  启用此模块
healthcheck_delay
  对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000;
healthcheck_timeout
  进行一次健康检测的超时时间,单位为毫秒,默认值2000;
healthcheck_failcount
 对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器;
healthcheck_send
  为了检测后端服务器的健康状态所发送的检测请求;如:healthcheck_send "GET /health HTTP/1.0" 'Host: www.magedu.com';
healthcheck_expected
  期望从后端服务器收到的响应内容;如果未设置,则表示从后端服务器收到200状态码即为正确;
healthcheck_buffer
  健康状态检查所使用的buffer空间大小;
healthcheck_status
  通过类似stub_status的方式输出检测信息,使用方法如下:
  location /stat {
      healthcheck_status;
    }
例:
 

   
   
   
   
  1. http {  
  2.  
  3.   upstream backend {  
  4.     server 172.16.133.1;  
  5.     server 172.16.133.2;  
  6.     healthcheck_enabled;  
  7.     healthcheck_delay 1000;  
  8.     healthcheck_timeout 1000;  
  9.     healthcheck_failcount 3;  
  10.     healthcheck_expected 'I_AM_ALIVE';  
  11.     healthcheck_send "GET /.health.html HTTP/1.0";  
  12.   }  
  13.  
  14.   server {  
  15.     listen 80;  
  16.  
  17.     location / {  
  18.       proxy_set_header Host $http_host;  
  19.       proxy_pass http:172.16.133.2;  
  20.       proxy_connect_timeout 3;  
  21.     }  
  22.     location /stat {  
  23.       healthcheck_status;  
  24.     }  
  25.   }  
  26.  
  27. }

 

lnmmp的搭建及memcache的应用_第2张图片

另:这里nginx最好不要用最新的版本,会与healcheck模块不兼容出错
2.mysql的安装
这里我们用的是5.5.24的免安装版
具体安装步骤见http://5142926.blog.51cto.com/5132926/921873
3.php的安装
见:http://5142926.blog.51cto.com/5132926/931149
4.memcache的安装
memcache官网http://memcached.org
(1).安装libevent
 

   
   
   
   
  1. tar xf libevent-2.0.16-stable.tar.gz  
  2. cd libevent-2.0.16-stable  
  3. ./configure  
  4. make && make install  
  5. echo "/usr/local/lib" > /etc/ld.so.conf.d/libevent-2.0.16.conf  
  6. ldconfig  

(2).安装配置memcached
①.安装memcached
 

   
   
   
   
  1. tar xf memcached-1.4.14.tar.gz   
  2. cd memcached-1.4.14  
  3. ./configure  
  4. make && make install  
  5. cp /root/memcached-1.4.14/t/sasl/memcached.conf /etc  

②.为memcached配置服务脚本
 

   
   
   
   
  1. vim /etc/init.d/memcached  
  2.  
  3. #!/bin/bash  
  4. #  
  5. # Save me to /etc/init.d/memcached  
  6. And add me to system start  
  7. # chmod +x memcached  
  8. # chkconfig --add memcached  
  9. # chkconfig --level 35 memcached on  
  10. #  
  11. # Written by lei  
  12. #  
  13. # chkconfig: - 80 12  
  14. # description: Distributed memory caching daemon  
  15. #  
  16. # processname: memcached  
  17. # config: /usr/local/memcached/my.conf  
  18.  
  19. source /etc/rc.d/init.d/functions  
  20.  
  21. ### Default variables  
  22. PORT="11211" 
  23. USER="root" 
  24. MAXCONN="1024" 
  25. CACHESIZE="64" 
  26. OPTIONS="" 
  27. RETVAL=0  
  28. prog="/usr/local/bin/memcached" 
  29. desc="Distributed memory caching" 
  30. lockfile="/var/lock/subsys/memcached" 
  31. start() {  
  32. echo -n $"Starting $desc ($prog): " 
  33. daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE $OPTIONS  
  34. RETVAL=$?  
  35. echo  
  36. [ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached  
  37. return $RETVAL  
  38. }  
  39.  
  40. stop() {  
  41. echo -n $"Shutting down $desc ($prog): " 
  42. killproc $prog  
  43. RETVAL=$?  
  44. echo  
  45. [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/memcached  
  46. return $RETVAL  
  47. }  
  48.  
  49. restart() {  
  50. stop  
  51. start  
  52. }  
  53.  
  54. reload() {  
  55. echo -n $"Reloading $desc ($prog): " 
  56. killproc $prog -HUP  
  57. RETVAL=$?  
  58. echo  
  59. return $RETVAL  
  60. }  
  61.  
  62. case "$1" in 
  63. start)  
  64. start  
  65. ;;  
  66. stop)  
  67. stop  
  68. ;;  
  69. restart)  
  70. restart  
  71. ;;  
  72. condrestart)  
  73. [ -e /var/lock/subsys/$prog ] && restart  
  74. RETVAL=$?  
  75. ;;  
  76. reload)  
  77. reload  
  78. ;;  
  79. status)  
  80. status $prog  
  81. RETVAL=$?  
  82. ;;  
  83. *)  
  84. echo $"Usage: $0 {start|stop|restart|condrestart|status}" 
  85. RETVAL=1  
  86. esac  
  87. exit $RETVAL  
  88.  
  89.  
  90. chmod +x /etc/init.d/memcached  
  91. chkconfig --add memcached  
  92. chkconfig memcached on 
  93. service memcached start  
  94. netstat -tnlp  
  95.  

lnmmp的搭建及memcache的应用_第3张图片

③.memcached的常用命令
Ⅰ.memcached的基本命令(安装、卸载、启动、配置相关):
-p 监听的端口
-l 连接的IP地址, 默认是本机 
-d start 启动memcached服务
-d restart 重起memcached服务
   stop|shutdown 关闭正在运行的memcached服务
   install 安装memcached服务
   uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
Ⅱ.memcached的基本命令(当memcached 启动后 用于对memcached管理的数据和本身运行状态相关的命令):

lnmmp的搭建及memcache的应用_第4张图片


Ⅲ.对查看的信息的关键字中英文对照表

lnmmp的搭建及memcache的应用_第5张图片


可以通过memcached的交互式页面进行设置
telent 127.0.0.1 11211
5.memcache的安装配置
①memcache的编译安装
 

   
   
   
   
  1. tar xf memcache-2.2.6.tgz   
  2. cd memcache-2.2.6  
  3. /usr/local/php4nginx/bin/phpize  
  4. ./configure --with-php-config=/usr/local/php4nginx/bin/php-config --enable-memcache  

其中最后一句要记录下来
Installing shared extensions:     /usr/local/php4nginx/lib/php/extensions/no-debug-non-zts-20100525/
②配置memcache
 

   
   
   
   
  1. vim /etc/php.ini  
  2. echo "extension=/usr/local/php4nginx/lib/php/extensions/no-debug-non-zts-20100525/memcache.so" >> /etc/php.ini  

③对memcache进行测试,建立测试页面index.php
 

   
   
   
   
  1. vim /usr/html/index.php  
  2. $mem = new Memcache;  
  3. $mem->connect("127.0.0.1",11211);  
  4. $mem->set('mykey','Hello World',0,600);  
  5. echo "Store data in the cache (data will expire in 600 seconds)
    \n"
    ;  
  6. $get_result = $mem->get('mykey');  
  7. echo "$get_result is from memcached." 
  8. ?>  

修改nginx.conf
 

   
   
   
   
  1. location / {  
  2.         root   html;  
  3.         index  index.php index.html index.htm;  
  4.         }  

lnmmp的搭建及memcache的应用_第6张图片

6.使用linmemcached的客户端工具
①编译安装libmemcached
 

   
   
   
   
  1. tar xf libmemcached-1.0.2.tar.gz   
  2. cd libmemcached-1.0.2  
  3. ./configure  
  4. make&&make install  
  5. ldconfig  

②libmemcached常用命令
memcat --servers=127.0.0.1:11211 mykey
memping
memstat
memslap
7.Nginx+memcached
 

   
   
   
   
  1. server {  
  2.         listen       80;  
  3.         server_name  localhost;  
  4.  
  5.         #charset koi8-r;  
  6.  
  7.         #access_log  logs/host.access.log  main;  
  8.         location / {  
  9.                 set $memcached_key $url;  
  10.           memcached_pass     127.0.0.1:11211;  
  11.           default_type    text/html;  
  12.           error_page     404 @fallback;  
  13.         }  
  14.         location @fallback {  
  15.                 proxy_pass http://172.16.133.2  
  16.         }  
  17. }