RHEL/CentOS平台 php 5.5 php-fpm, memcached, memcacheQ安装详细指南
一、安装前的准备工作
1. 生产环境Linux版本的选择
推荐安装 RHEL 5.8+, CentOS 5.8及以上版本系统,因为我发现此版本的系统自带的库比较齐全,也比较新,如cmake已经包含在rhel 5.8之中,但RHEL 5.6就不包含这些库文件(不得不从第三方源码编译),另一方面,rhel 5.8包含的libevent库版本为1.4, 完全满足memcached, memcacheq的版本要求。
2. Linux分区方案
分三个区即可,根分区/用于安装Linux及常用软件,20G左右足够,swap分配4G即可,剩余空间(建议使用LVM建立逻辑卷)分配给/data/,作为数据保存目录,如mysql数据存储、网站程序等。至于是否单独建立启动分区,仁者见仁智者见智。另外一些文章中提出应该给swap分配1.5至2倍内存大小空间,但现在的服务器搭配8G、16G以上内存很常见,分配过大的swap则没有任何意义,服务器运行中频繁使用swap是不正常的现象,要么是应用程序配置有问题,要么就是机器物理内存确实不够。频繁使用swap说明整个系统的性能已经非常低,我们要尽量避免此现象发生。
3. 安装Linux时定制软件包
开发库和开发工具必须安装(Development Libraries, Development Tools),大量的软件依赖它。
以下软件包强烈建议安装
管理工具(Administration Tools)
编辑器(Editors)
老软件开发(Legacy Sooftware Development)
老软件支持(Legacy software Support)
服务器配置工具(Server Configuration Tools)
系统工具(System Tools)
基于文本的互联网工具(Text-based Internet)。
除此之外,其它软件包可不必安装。
4. 安装完毕之后,设置正确的系统时区, 并更新时间
用正确的时区文件替换系统正在使用的时区文件
cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime |
再设置文件/etc/sysconfig/clock中的内容为
ZONE="Asia/Chongqing" UTC=false ARC=false |
更新系统时间:ntpdate time.windows.com 最好将这个命令加入到计划任务中,定期更新系统时间,执行crontab -e 增加以下内容(每天凌晨6点自动更新时间)
0 6 * * * /sbin/ntpdate time.windows.com 2>&1 | /bin/logger |
设置终端显示为英文(设置显示中文麻烦更多),配置文件/etc/sysconfig/i18n 设置
LANG="en_US.UTF-8"
再执行source /etc/sysconfig/i18n 使配置生效
5. 配置好Linux的yum源,CentOS可以直接使用在线yum源,这里描述RHEL使用本地光盘(虚拟机使用ISO镜像也可)制作yum源.
加载光盘或ISO文件至光驱
建立挂载目录 mkdir /mnt/cdrom
挂载光驱 mount /dev/hdc /mnt/cdrom
或挂载镜像 mount -o loop rhel-server-5.8-i386-dvd.iso /mnt/cdrom
编辑文件/etc/yum.repos.d/local.repo 输入以下内容
[local] name=Red Hat Enterprise Linux Local Source baseurl=file:///mnt/cdrom/Server enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release |
二、正式开始安装
只要你严格按照本文步骤一步步来,完全可以很顺利地安装好PHP运行环境的。
本文假设所有软件的源码包位于 /usr/local/src,后面不再赘述。
1. 更系统系统库
yum install gd gd-devel pcre* libxml* libjpeg* libpng* libevent* \ libtool* autoconf* freetype* libstd* gcc44* ncurse* bison* openssl* \ libcurl* cmake* |
更新系统库,非常重要,PHP编译不能通过的绝大多数原因都是与此有关。
提示:我看到一些教程中提到libpng libjpeg libevent freetype等库使用第三方源码编译,生产环境证明,但这样做存在太多兼容性和稳定性问题,应该优先使用系统库,以保证兼容和稳定性。网络上的教程,有一定的误导。
提示:系统已经自带了这些库文件,不必舍近求远、劳力伤神。
2. 安装libmcrypt库(php的mcrypt加密函数需要此库支持),这个库并不包含在Redhat(CentOS实测也并未包含)的YUM源中,需要单独安装,这里以安装libmcrypt-2.5.7为例。
Libmcrypt下载地址:http://mcrypt.hellug.gr/lib/index.html
cd /usr/local/src/ tar -xf libmcrypt-2.5.7.tar.gz cd libmcrypt-2.5.7/libltdl/ ./configure --enable-ltdl-install && make && make install cd .. ./configure && make && make install |
至此,libmcrypt库安装完成。
不要指定安装路径,使用默认路径安装,否则会让后面的工作非常麻烦(否则编译php时指定此库的路径)
3. 预先安装msyql ?
PHP 5.3.0及以上版本已经内置mysqlnd驱动, 所以安装php时并不需要预先安装mysql, 你可以在安装php之后再安装mysql(这与之前版本的php安装顺序差异较大). mysqlnd是php官方专为php开发的驱动程序, 其在内存管理和性能上都比传统的libmysql驱动要好,故推荐使用mysqlnd, 不使用传统的libmysql.
4. 安装php, 本文以php 5.3.9为例(php 5.5安装方法与本文完全一致)
cd /usr/local/src tar -xf php-5.3.9.tar.gz cd php-5.3.9
#按以下参数编译 最重要的是--enable-fpm选项 请注意php安装路径和mysql路径,常用的模块全部打开 --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir \ --enable-xml \ --disable-rpath \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --with-curl \ --with-mcrypt \ --with-curlwrappers \ --enable-mbregex \ --enable-fpm \ --enable-mbstring \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-zip \ --enable-soap \ --enable-ftp \ --without-pear \
make && make install
|
安装完成之后,设置系统环境变量PATH,以便我们可以在任何目录下直接运行php命令
echo 'export PATH=$PATH:/usr/local/php/bin' >> ~/.bashrc source ~/.bashrc |
命令测试:
php -i
php -r 'phpinfo();'
6.1. 建立php.ini配置文件
复制源码目录中的php.ini-production到默认加载位置
cp /usr/local/src/php-5.3.9/php.ini-production /usr/local/php/lib/php.ini |
原始文件中注释太多,可能会影响编辑,可将大段的注释删除掉。
并按以下提示修改配置项:
short_open_tag = On #开启短标记 以便直接使用<?=$var?>形式输出变量 output_buffering = On #或设置为4096, 此项关闭会严重影响性能 expose_php = Off #防止响应header中暴露php标记及版本号 error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT #如果不显示错误,就难以发现程序中的问题 display_errors = On #建议开启,否则程序在维护阶段难以调试错误 display_startup_errors = On #建议开启,可以显示php-fpm进程启动时的错误 error_log = syslog #php程序运行时错误,会被记录到系统日/var/log/messages cgi.fix_pathinfo=0 #禁止pathinfo路径解析(nginx的图片解析漏洞),可能会影响程序正常运行,请酌情处理
date.timezone = Asia/Chongqing #设置默认时区 (phpinfo中警告建议,很多系统管理员没有设置此项,是有纰漏的) |
如果觉得自己编辑太繁琐,请直接使用以下内容覆盖php.ini即可
[PHP] ;; /usr/loca/php/lib/php.ini engine = On short_open_tag = On asp_tags = Off precision = 14 y2k_compliance = On output_buffering = On zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = 17 allow_call_time_pass_reference = Off
safe_mode = Off safe_mode_gid = Off disable_functions = disable_classes = zend.enable_gc = On expose_php = Off max_execution_time = 300 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED display_errors = On display_startup_errors = On log_errors = On log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off
report_memleaks = On track_errors = Off html_errors = Off error_log = syslog variables_order = "EGPCS" request_order = "GP" register_globals = Off register_long_arrays = Off
register_argc_argv = Off auto_globals_jit = On
post_max_size = 8M magic_quotes_gpc = Off magic_quotes_runtime = Off
enable_dl = Off cgi.fix_pathinfo=0 file_uploads = On
upload_max_filesize = 16M max_file_uploads = 10
allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60
;extension=memcached.so ;extension=apc.so ;extension=memcache.so [Date] date.timezone = Asia/Chongqing |
6.2. 建立php-fpm的配置文件,编辑文件/usr/local/php/etc/php-fpm.conf,内容如下(直接复制即可)
[global] pid = run/php-fpm.pid log_level = notice error_log = log/php-fpm.log syslog.facility = daemon syslog.ident = php-fpm emergency_restart_threshold = 30 emergency_restart_interval = 60s process_control_timeout = 0 process.max = 0 daemonize = yes rlimit_files = 65535 rlimit_core = 0
[www] user = nobody group = nobody listen = 127.0.0.1:9000 listen.backlog = 128 pm = dynamic pm.max_children = 100 pm.start_servers = 50 pm.min_spare_servers = 20 pm.max_spare_servers = 60 pm.max_requests = 0 pm.status_path = /php-status.php slowlog = var/log/php-slow.log request_slowlog_timeout = 1s request_terminate_timeout = 60 rlimit_files = 65535 catch_workers_output = no #此参数开启时,才会将错误日志记录到log/php-fpm.log,但是在高负载网站上会对性能有少许影响---原始配置文件中的说明。 |
比较重要的几项参数解释如下:
log_level = notice
error_log = log/php-fpm.log #php程序中的错误,会被记录到这个文件之中
user=nobody
group=nobody #fpm工作进程以nobody帐号运行,这是合理的,一些系统管理员将其设置为网 #站文件所有者帐号,是相当不安全的
listen = 127.0.0.1:9000 #指定fpm进程监听的地址,请根据实际要求修改
pm.max_children =100 #fpm子进程(工作进程)最多数量,请根据实际需要修改,生产环境建议设置到 #50甚至100以上,至于设置过多少合适,本人其它文章会有说明,若有疑问, 请发邮件到[email protected]
rlimit_files = 65535 #系统默认只允许每个进程打开1024个文件,在高负载机器上过低,设置为65535
pm.start_servers = 50 #fpm启动时,初始子进程数,建议可设置最大进程数一半左右
pm.min_spare_servers = 20 #最小空闲子进程数
pm.max_spare_servers = 60 #最大空闲子进程数
#pm.start_servers应该介于pm.min_spare_servers和pm.max_spare_servers之间。
pm.status_path = /php-status.php #配置一个虚拟URL, 可以通过这个虚拟URL观察FPM的进程状态(生产环境性能调优大有帮助,至少可以观察fpm子进程数是否够用, 以及活跃进程数等等)
slowlog = log/php-slow.log #执行过慢的PHP程序的信息会被记录到些文件中(生产环境性能调化帮助很大)
request_slowlog_timeout = 1s #执行时间超过1秒的PHP脚本,就被认为是过慢的,会被记录到slowlog中,此项在生产环境中非常有用,通过它可详细了解PHP程序过慢的详细信息。
上面介绍的配置参数,是经过生产环境使用总结而出的,可放心使用。
测试配置文件是否有错误
/usr/local/php/sbin/php-fpm -t -y /usr/local/php/etc/php-fpm.conf
php-fpm更多参数可通过/usr/local/php/sbin/php-fpm --help取得。
如果没有问题,即可运行php-fpm
/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf
使用命令 netstat -npl 观察输出,若发现php-fpm监听在9000端口,说明进程成功启动。
停止php-fpm进程 pkill php-fpm
6.3. 建立php-fpm的服务控制脚本/usr/sbin/php-fpm,以方便地控制之(启动,停止,重载加载、轮转日志等)
/usr/sbin/php-fpm文件的内容:
#!/bin/bash
exec=/usr/local/php/sbin/php-fpm config=/usr/local/php/etc/php-fpm.conf pidfile=/usr/local/php/var/run/php-fpm.pid
start(){ $exec -y $config || echo -n "start $exec -y $config failed." }
stop(){ kill -QUIT `cat $pidfile` || echo "stop $exec failed." }
reload(){ kill -HUP `cat $pidfile` || echo "reload $exec failed" }
test(){ $exec -t -y $config }
status(){ if [ -f $pidfile ] ; then if [ -f /proc/`cat $pidfile` ] ; then echo "$exec -y $config is running ..." else echo "$exec -y $config is stopped ..." fi fi echo "$exec -y $config is stopped ..." }
case "$1" in start) echo "starting $exec -y $config ..." start ;; stop) echo "stopping $exec ..." stop ;; reload) test reload ;; restart) echo "restarting $exec ..." stop start ;; test) test ;; *) echo "usage: $0 {start|stop|restart|reload|status|test}" exit 3 ;; esac exit 0 |
将此内容保存为文件/usr/sbin/php-fpm, 并给其执行权限:
chmod +x /usr/sbin/php-fpm
然后进行运行测试:
#停止之前可能正在运行的php-fpm进程
pkill php-fpm
#测试刚刚建立的启动脚本
php-fpm restart
观察命令netstat -npl的输出,若发现php-fpm监听在9000端口上,证明其启动成功。
如果测试没有问题,将其加入到开机启动项中
echo '/usr/sbin/php-fpm start' >> /etc/rc.local |
提示:如果需要此脚本文件,请发邮件至[email protected]索取。
6.4. 给PHP安装必备的模块 memcache, apc,memcched等。PHP扩展模块的安装方法大同异,只要掌握其中一种方式,即可触类旁通。
APC是php官方推荐的加速模块,经过实际测试表明,使用APC可以提升服务器负载能力约2倍(使用apache ab测试),脚本的平均执行效率提升约10%~~20%,效果相当明显,强烈建议安装。其它第三方模块(如xcache, eAccelerator之类)在生产环境中使用,遇到过使得PHP进程负载变得很高导致不稳定现象产生,故后来就只安装APC, 没安装其它加速模块。
但是使用APC之后,可能会影响自定义session接管处理, 需要作一些特殊处理
详细见本人的blog 《php APC 造成的session无法保存bug及解决方法》
http://zhangxugg-163-com.iteye.com/blog/1039902
APC源码可从PHP官方网站下载 http://pecl.php.net/package/APC
实测apc 3.1.9与php 5.4.0配合安装后PHP启动时会报错(故本人暂不推荐使用PHP 5.4):
glibc detected *** php-fpm: free(): invalid pointer: 0xb7e80518
开始安装APC cd /usr/local/src/ tar -xf APC-3.1.8.tgz cd APC-3.1.8 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install |
接下来,修改php.ini文件,加入此模块的加载指令,编辑/usr/local/php/lib/php.ini 加入以下配置:
extension=apc.so
重启php-fpm进程 php-fpm restart
接下来安装php的memcache客户端扩展
下载地址http://pecl.php.net/package/memcache
cd /usr/local/src/ tar -xf memcache-2.2.7.tgz cd memcache-2.2.7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install |
接下来,同样在/usr/local/php/lib/php.ini文件中加入
extension=memcache.so
再重启php-fpm即可。
为php安装memcached客户端扩展
memcached是php 5.2+以上版本自带的一个加强的函数库,其支持的函数更为丰富,要比memcache扩展功能更为全面,强烈建议有好学精神的朋友安装。另外memcache的服务器端也叫memcached, 而给php安装的memcached只是客户端扩展,并不是一回事。给php安装memcached扩展,并不需要在本机安装memcache的服务器程序memcached。这个问题要注意区分。
此扩展使用了libmemcached库提供的api与memcached服务端进行交互。它同样提供了一个session处理器(memcached)。
这个扩展需要 libmemcached客户端库。
提示:CentOS已经自带libmemcached库,可直接使用命令yum install libmemcached安装。但RHEL则需要源码安装。
准备相关软件包:
libmemcached http://libmemcached.org/libMemcached.html #CentOS可直接通过yum安装
memcached http://pecl.php.net/package/memcached
安装过程如下:
先安装libmemcached
cd /usr/local/src/ tar -xf libmemcached-1.0.14.tar.gz cd libmemcached-1.0.14 export CC=/usr/bin/gcc44 export CXX=/usr/bin/g++44 ./configure && make && make install |
再安装memcached for php
cd /usr/local/src/ tar -xf memcached-2.1.0.tgz cd memcached-2.1.0 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install |
同理,修改php.ini, 加入extension=memcached.so 重启php-fpm即可。
7. nginx的安装及配置
本例中以最新的nginx 1.2.7为例说明安装及配置的过程
7.1. 安装
源码可从http://nginx.org/en/download.html处取得,将下载的源码保存到/usr/local/src目录下。
cd /usr/local/src/ tar -xf nginx-1.2.7.tar.gz cd nginx-1.2.7
./configure --prefix=/usr/local/nginx \ --with-http_xslt_module \ --with-http_xslt_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_sub_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_stub_status_module
make && make install |
安装完毕之后,给nginx主程序增加一个符号链接,以便我们可在任何目录位置运行nginx主程序。
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx |
建立nginx的主配置文件 /usr/local/nginx/conf/nginx.conf
user nobody;
error_log logs/error.log notice; worker_rlimit_nofile 65535; pid logs/nginx.pid; worker_processes 8;
events { worker_connections 65535; }
http { include mime.types; default_type application/octet-stream; access_log off; sendfile on; keepalive_timeout 30; gzip on; gzip_min_length 1k; gzip_types text/css text/xml application/x-javascript; access_log off;
server { listen 80; server_name localhost; root /data/wwwroot/localhost;
index index.html index.htm index.php;
location /server-status { stub_status on; access_log off; }
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } #include vhosts.conf; } }
|
测试配置是否有误
nginx -t
若没有提示错误,则启动nginx
nginx
配置开机启动nginx
echo /usr/sbin/nginx >> /etc/rc.local |
建立文件/data/wwwroot/localhost/phpinfo.php, 输入以下内容,进行测试
<?php phpinfo(); |
然后浏览http://服务器ip/phpinfo.php进行验证,另外可以通过以下几个URL观察php-fpm的进程状态(强烈建议多使用)
http://服务器ip/php-status.php
http://服务器ip/php-status.php?json
http://服务器ip/php-status.php?html
http://服务器ip/php-status.php?xml
http://服务器ip/server-status
/php-status.php是一个虚拟的URI, 并不需要实际存在这个文件,它是由/usr/local/php/etc/php-fpm.conf配置文件指定的
这些输出的信息才是优化php-fpm的数据依据,如果在网站峰值期间空闲的进程数过少,则说明php-fpm进程数设置低了,应该加大。反之应该减少(不必要浪费太多内存资源)
提示:生产环境下,请对/server-status, /php-status.php进行访问保护
关于nginx, php-fpm的安全配置,请关注我的blog:
《正确设置网站文件所有者 提高网站安全性 防止被挂木马》
http://zhangxugg-163-com.iteye.com/blog/1171572
或者可发邮件至[email protected]索取PDF版本。
高负载环境中影响nginx性能的几个参数(红色字体表示影响性能最为直接):
配置名称 |
位置 |
说明 |
worker_rlimit_nofile 65535; |
全局 |
Linux系统默认只允许打开1024个文件和连接,高负载机器上此值应该加大,65535足够。 |
worker_processes 8; |
全局 |
工作进程数,一般设置为cpu的个数 |
worker_connections 65535; |
events |
每个进程能同时处理的TCP连接数 |
ccess_log off; |
http |
默认是记录访问日志的,应该关闭以得到小许性能提升 |
sendfile on; |
http |
通过Linux系统调用sendfile处理IO,提高性能 |
keepalive_timeout 30; |
http |
保持连接的时间,这个值不能太大。活动连接数与此值成正比。 |
gzip on; |
http |
开启Gzip,提升网站访问速度 |
gzip_min_length 1k; |
http |
小于1KB的文件,不作gzip压缩,过小的文件压缩后节省不了太多流量。 |
gzip_types text/css text/xml application/x-javascript; |
http |
默认只压缩text/html文件,css,js也应该被压缩 |
keepalive 32; |
upstream |
nginx 1.1.4之后开始支持后端机器长连接特性,使用此参数可明显降低后端机器的连接数和负载。这个值要设置小一些。详细配置请参照http://zhangxugg-163-com.iteye.com/blog/1551269 |
fastcgi_keep_conn on; |
location |
用于支持fastcgi长连接特性 |
|
|
|
如果你对配置nginx觉得有麻烦,但又需要一个能稳定、高效用于生产环境的配置,请发邮件至[email protected]索取。
7. 安装memcached服务器
安装文件可从http://memcached.org/下载,并统一保存到/usr/local/src目录下
php有个客户端pecl扩展也叫memcached,但这里的memcached指的是memcache的服务器程序,请明确区分。
memcached需要libevent 1.3及以上版本,但RHEL 5.4自带的libevent版本只是1.1。RHEL 5.8的libevent库为1.4可以满足安装需要。使用以下命令查看系统已经安装的libevent的版本
rpm -qa | grep libevent |
如果其版本低于1.3,则请按以下方式安装(这里以libevent 2.0.20为参照)
cd /usr/local/src tar -xf libevent-2.0.20-stable.tar.gz cd libevent-2.0.20-stable ./configure --prefix=/usr/local/libevent && make && make install
注意:我们将其安装到其它目录,并未删除系统自带的老版本libevent, 这是为了保证系统的稳定性。当然这样处理之后,在安装memcached的时候,需要指定libevent库的安装位置 |
cd /usr/local/src tar -xf memcached-1.4.15.tar.gz cd memcached-1.4.15 ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ make && make install
注意:如果没有从源码安装libevent, 请不要指定--with-libevent=/usr/local/libevent/ 注意:我们安装libevent时指定了路径,故这里需要使用--with-libevent指定libevent库的位置 |
这就将memcached安装到了/usr/local/memcached目录中,使用以下命令验证安装:
/usr/local/memcached/bin/memcached -h
测试没有问题,可启动服务
/usr/local/memcached/bin/memcached -l 127.0.0.1 -d -c 5000 -u root -m 64 |
以上命令将使memcached监听在127.0.0.1地址上,同时接受5000连接,并分配64M内存空间。
配置开机启动项
echo '/usr/local/memcached/bin/memcached -l 127.0.0.1 -d -c 5000 -u root -m 64' >> /etc/rc.local |
提示:要重启memcached可使用命令 pkill memcached先停止进程,再使用上述命令行启动之.
8. 安装异步消息队列服务器memcacheQ
memcacheq是基于memcached协议的高性能异步队列服务器, 其使用Berkeley DB数据库持久保存数据. 已经被成功用于新浪微博这种超大型应用中(所以,我想你的应用使用它一点问题也没有), 因其使用了memcached网络协议,故在使用中非常容易,非常轻量级.通过客户端程序的容错考虑,可很好地解决单点故障问题(无须服务器架构上实现之),实践证明其稳定性、可靠性、高性能均是可以得到保证的。
实现高可用,随时扩展,道理非常简单,也很容易实现,无须太复杂的服务器架构层次上的实现。基本原理如下:
客户端消息推送程序(如PHP)随机从memcacheq服务器中选择一台尝试写入数据,如果写入失败,则尝试另外一台写入。而消息处理程序轮询所有的memcacheq即可。
参考网站
http://wenku.baidu.com/view/cad10018227916888486d70f.html
memcacheq的官方网站
http://memcachedb.org/memcacheq/
memcacheq使用Berkeley DB保存数据,故需要先安装Berkeley DB,准备好bdb的源码db-5.3.21.tar.gz,下载地址http://www.oracle.com/database/berkeley-db/db/index.html
cd /usr/local/src tar -xf db-5.3.21.tar.gz cd db-5.3.21/build_unix/ ../dist/configure && make && make install
安装完成之后提示安装位置为/usr/local/BerkeleyDB.5.3 |
接下来安装memcacheq
cd /usr/local/src tar -xf memcacheq-0.2.0.tar.gz cd memcacheq-0.2.0 ./configure --prefix=/usr/local/memcacheq \ --with-bdb=/usr/local/BerkeleyDB.5.3 \ --with-libevent=/usr/local/libevent/
make && make install
注意:如果没有从源码安装libevent, 请不要指定--with-libevent=/usr/local/libevent/参数 |
测试 /usr/local/memcacheq/bin/memcacheq -h(如果此步没有报错,请跳过下面的排错步骤)
报错排除 error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory 看来memcacheq无法找到bdb的库文件位置,我们将bdb的库路径加入到系统的库搜索目录中,编辑/etc/ld.so.conf追加以下行 /usr/local/BerkeleyDB.5.3/lib/ 并执行 ldconfig, 再尝试执行/usr/local/memcacheq/bin/memcacheq -h,再一次报错无法找到libevent的库文件 error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
同理,将/usr/local/libevent/lib/目录追加到文件/etc/ld.so.conf中,并再执行ldconfig即可。 再测试终于不再报错 |
#创建一个目录用于memcacheq保存数据文件 mkdir -p /data/memcacheq #启动服务 /usr/local/memcacheq/bin/memcacheq -l 127.0.0.1 -d -r -u root -c 5000 \ -H /data/memcacheq -B 65536 -N -R
重要参数说明: -B 65536 指定单条消息最大长度为为65536字节(64KB) -N 使用bdb的DB_TXN_NOSYNC机制大大提高性能,此项对性能影响很重要,默认关闭 -R 自动清理掉不再使用的日志文件 否则日志文件会占用大量磁盘空间,默认不清理。 |
最后,请不要忘记了将启动命令添加到 /etc/rc.local以实现开机启动,如果要停止memcacheq服务,请使用
pkill memcacheq
若有任何问题或交流需要,请发邮件给笔者 [email protected]
好了,本文先写到这里,未完待续。