最新的php 5.5安装文档

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路径,常用的模块全部打开
./configure --prefix=/usr/local/php \

--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,但是在高负载网站上会对性能有少许影响---原始配置文件中的说明。
为了在生产环境提高性能,建议关闭此参数,并在php.ini中指定error_log=syslog,如此将错误日志重定向到syslog即/var/log/messages

比较重要的几项参数解释如下:

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以上,至于设置过多少合适,本人其它文章会有说明,若有疑问, 请发邮件到zhangxugg@163.com

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_serverspm.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

提示:如果需要此脚本文件,请发邮件至zhangxugg@163.com索取。

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

或者可发邮件至zhangxugg@163.com索取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觉得有麻烦,但又需要一个能稳定、高效用于生产环境的配置,请发邮件至zhangxugg@163.com索取。

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

若有任何问题或交流需要,请发邮件给笔者 zhangxugg@163.com

好了,本文先写到这里,未完待续。



转载于:https://my.oschina.net/zxu/blog/141154

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值