LNMMP之nginx+“php-fpm”及memcached

LNMMP之nginx+“php-fpm”及memcached


说明:nginx不能像apache一样动态的装卸载php模块,所以只能使用fastcgi协议跟后端php建立连接。Nginx提供静态页面,并将动态页面提交给后端php-fpm服务器处理,

  为了应付更大的访问量对服务器造成的压力,方案引进了memcached做为缓存服务器。

Memcached是一种开发工具,作为一个服务器启动使用。要想使用它需要程序员在php代码中调用使用。需要结合使用memcachephp扩展来实现调用这一功能。

wKioL1NbqiTjOtw9AAF4nmmDP-k487.jpg

Memcached简介:

Memcached是一种免费、开源、高性能、分布式内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载。可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。
Memcached简单而强大。它的简单的设计促进快速部署,易于开发,解决了大数据缓存面临许多问题。是一款比较常用的开发工具。

Memcached工作机制

1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。、

2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;

3. 各服务器间彼此无视:不在服务器间进行数据同步;

4. O(1)的执行效率

5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;

官网下载地址:http://www.memcached.org/


安装:

l Nginx源码安装:

编译安装nginx需要事先需要安装开发包组"Development Tools"和 "Development Libraries"。同时,还需要专门安装pcre-devel包:

首先添加用户nginx,实现以之运行nginx服务进程:

# groupadd -r nginx
# useradd -r -g nginx nginx
接着开始编译和安装:
# ./configure \
  --prefix=/usr/local/nginx \
  --sbin-path=/usr/local/nginx/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre
# make && make install

l 工作于fastcgi模式的php的安装

# yum -y groupinstall "X Software Development"
如果想让编译的php支持mcrypt、mhash扩展和libevent,此处还需要如下几个rpm包并安装之:
libmcrypt-2.5.8-4.el5.centos.i386.rpm
libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm
mhash-0.9.9-1.el5.centos.i386.rpm
mhash-devel-0.9.9-1.el5.centos.i386.rpm
mcrypt-2.6.8-1.el5.i386.rpm
# tar xf php-5.4.4.tar.bz2
# cd php-5.4.4
#  ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --enable-sockets --enable-sysvshm  --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl



   实验步骤:

       一、配置nginx

       1、配置nginx提供虚拟主机


server {
        listen       80;
        server_name  www.a.com;
#       root /www/a.com;
        location ~\.php$ {
            fastcgi_pass   172.16.20.61:9000;
            root /web;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_cache fcgi;
            fastcgi_cache_valid 200 10m;
            fastcgi_cache_valid 301 302 3m;
            fastcgi_cache_valid any 1m;
        }
        location ~*/(status|ping){-----------可以查看php―fpm状态信息
#               root /www/a.com;
                fastcgi_pass 172.16.20.61:9000;
                fastcgi_param SCRIPT_FILENAME  $fastcgi_script_name;
                include fastcgi_params;
        }

       2、测试nginx和php的结合是否成功运行

后端php监听端口已开启

[root@My1 ~]# ss -tunlp
tcp   LISTEN     0      128       172.16.20.61:9000                *:*      users:(("php-fpm",2148,7),("php-fpm",2149,0),("php-fpm",2150,0))

wKioL1NbqSHC5Qj7AAU9BFTHmXg116.jpg



   二、memcached服务器的配置

       1、安装启动memcached

[root@My2 ~]# yum install memcached
   [root@My1 ~]# memcached -u memcached
[root@My1 ~]# ss -tunlp
udp    UNCONN     0      0                                                        :::11211                                                   :::*      users:(("memcached",2428,29))
tcp    LISTEN     0      128                                                      :::11211                                                   :::*      users:(("memcached",2428,27))
tcp    LISTEN     0      128                                                       *:11211                                                    *:*      users:(("memcached",2428,26))
tcp    LISTEN     0      128                                                      :::111                                                     :::*    


       2、查看memcached详细信息

[root@My2 ~]# memcached -u memcached -vv
3、slab class   1: chunk size        96 perslab   10922
4、slab class   2: chunk size       120 perslab    8738
5、slab class   3: chunk size       152 perslab    6898
6、slab class   4: chunk size       192 perslab    5461
7、slab class   5: chunk size       240 perslab    4369
8、slab class   6: chunk size       304 perslab    3449
9、slab class   7: chunk size       384 perslab    2730
10、slab class   8: chunk size       480 perslab    2184
11、slab class   9: chunk size       600 perslab    1747

       3、使用telnet连接查看memcached信息

   Memcached提供一组基本命令用于基于命令行调用其服务或查看服务器状态等。

[root@My2 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Stats------------------键入stats查看详情
STAT pid 2480
STAT uptime 46
STAT time 1398506695
STAT version 1.4.4
STAT pointer_size 64
STAT rusage_user 0.003999
STAT rusage_system 0.000000
STAT curr_connections 10
STAT total_connections 12
add xuxu 0 50 12
hello xuxuxu
STORED
get xuxu
VALUE xuxu 0 12
hello xuxuxu
END

       三、安装memcachephp扩展,让php连接测试memcached

程序员在开发的时候,自行调用了memcached的API,memcached的功能才能生效,而且要想使用还需要安装php和memcached 的扩展。可以去php官网下载memcache扩展包

在php所在的主机安装

[root@My1 ~]# cd memcache-2.2.7
[root@My1 memcache-2.2.7]# /usr/local/php/bin/ph
phar        phar.phar   php         php-cgi     php-config  phpize
[root@My1 memcache-2.2.7]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@My1 memcache-2.2.7]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
[root@My1 memcache-2.2.7]# make && make install

安装完成的时候会生成一个memcache.so模块的路径,记得把这个路径记下来写到php的配置文件中。

编辑/usr/local/php/lib/php.ini,在“动态模块”相关的位置添加如下一行来载入memcache扩展:

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so

然后就可以写一个测试页面,来测试php是否能与后端缓存服务器联系了。

[root@My1 php]# vim /web/testmem.php
<?php
$mem = new Memcache;
$mem->connect("172.16.20.62", 11211)  or die("Could not connect");
写上你的缓存服务器的ip地址。
$version = $mem->getVersion();
echo "Server's version: ".$version."<br/>\n";
$mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");
echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";
$get_result = $mem->get('hellokey');
echo "$get_result is from memcached server.";        
?>

Ok.打开浏览器测试吧。

wKiom1NbqcnyBN4qAAPJMR2Ai94498.jpg

刷新可见此值变大

wKiom1NbrDjC9PQ2AAD3IpYm6cY915.jpg

 四、好用的查看memcached服务器工作情况的工具的安装使用

   1.直接解压各种memcache管理类工具到页面目录下,修改连接的缓存服务器ip即可

wKioL1Nbrpajcs0GAAHws_C8XFA697.jpg

wKiom1Nbr7CQ2yicAATO5GOc6ss846.jpg

       2、好用的中文节目缓存服务器查看工具admin-master


wKiom1NbwaCQDnfKAATCaqm5hHQ386.jpg


    统计信息

参数 描述
pid 8337 memcache服务器进程ID
uptime 6536 服务器已运行秒数
time 1398023613 服务器当前Unix时间戳
version 1.4.4 memcache版本
pointer_size 64 操作系统指针大小
rusage_user 0.070989 进程累计用户时间
rusage_system 0.378942 进程累计系统时间
curr_connections 11 当前连接数量
total_connections 164 Memcached运行以来连接总数
connection_structures 12 Memcached分配的连接结构数量
cmd_get 60 get命令请求次数
cmd_set 59 set命令请求次数
cmd_flush 3 flush命令请求次数
get_hits 59 get命令命中次数
get_misses 1 get命令未命中次数
delete_misses 0 delete命令未命中次数
delete_hits 0 delete命令命中次数
incr_misses 0 incr命令未命中次数
incr_hits 0 incr命令命中次数
decr_misses 0 decr命令未命中次数
decr_hits 0 decr命令命中次数
cas_misses 0 cas命令未命中次数
cas_hits 0 cas命令命中次数
cas_badval 0 使用擦拭次数
auth_cmds 0 认证命令处理的次数
auth_errors 0 认证失败数目
bytes_read 4337 读取总字节数
bytes_written 74120 发送总字节数
limit_maxbytes 67108864 分配的内存总大小(字节)
accepting_conns 1 接受新的连接
listen_disabled_num 0 失效的监听数
threads 4 当前线程数
conn_yields 0 连接操作主动放弃数目
bytes 0 当前存储占用的字节数
curr_items 0 当前存储的数据总数
total_items 59 启动以来存储的数据总数
evictions 0 LRU释放的对象数目
      设置信息


参数 描述
maxbytes 67108864 最大字节数限制(0无限制)
maxconns 1024 允许最大连接数
tcpport 11211 TCP端口
udpport 11211 UDP端口
inter NULL IP地址
verbosity 0 日志(0=none,1=som,2=lots)
oldest 3397 最老对象过期时间
evictions on LRU可用(on/off)
domain_socket NULL Socketpath
umask 700 创建Socket的掩码
growth_factor 1.25 增长因子
chunk_size 48 chunk大小(key+value+flags)
num_threads 4 线程数(默认4,可通过-t参数设置)
stat_key_prefix : stats分隔符
detail_enabled no 显示stats细节信息(yes/no)
reqs_per_event 20 最大IO吞吐量(每event)
cas_enabled yes 是否启用CAS(yes/no,-C禁用)
tcp_backlog 1024 TCP监控日志
binding_protocol auto-negotiate 绑定协议
auth_enabled_sasl no 是否启用SASL验证(yes/no)
item_size_max 1048576 数据最大尺寸



你可能感兴趣的:(nginx,反向代理,php-fpm,Mamcached)