Linux+Nginx+PHP+MySQL+MemCached+eaccelerator安装优化记录

http://admclub.com/view/linux-nginx-php-mysql-memcached-eaccelerator-%E5%AE%89%E8%A3%85%E4%BC%98%E5%8C%96%E8%AE%B0%E5%BD%95
近日,某论坛因发展需要,增加了一台服务器,他们装好系统,叫我帮安装服务器环境,数据同步处理并希望做到负载均衡等。以下为过程记录。中间可能会有些过程被跳过,本来想写成教程的,但是年关已近,实在是太多事情需要处理。现只能先把记录发上来,以后看有没有时间重新整理成教程。

需要安装的软件:

Web服务器软件:Nginx 1.0.11
FCGI:php 5.2.17
数据库:MySQL 5.1.x(服务器A),MySQL 5.5(服务器B)
服务器优化:MemCached,eaccelerator,google-perftools
实时同步软件:rsync,inotify-tools

以下是两服务器可以相同的操作记录:

安装常见的依赖软件/lib/so:

yum install  autoconfig automake make gcc gcc-c++ \
pcre-devel openssl-devel patch pam-devel libmcrypt-devel gd-devel -y

安装 google-perftools

先要安装 libunwind:

?
1
2
3
4
5
6
7
8
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz
tar zxvf libunwind-0.99.tar.gz
cd libunwind-0.99/
CFLAGS=-fPIC ./configure --prefix=/usr
make CFLAGS=-fPIC
make CFLAGS=-fPIC install

cd ..
然后才开始安装google-perftools:

?
1
2
3
4
5
6
7
wget http://google-perftools.googlecode.com/files/google-perftools-1.7.tar.gz
tar xzvf google-perftools-1.7.tar.gz
cd google-perftools-1.7
./configure --prefix=/usr --enable-frame-pointers
make
make install
cd ..
接着安装Nginx

为了优化Nginx,我使用了agentzh-memc-nginx-module模块和ngx_cache_purge,ngx_http_upstream_keepalive模块,ngx_cache_purge用来管理Nginx中缓存在Memcache中的内容而ngx_http_upstream_keepalive则用来保持Nginx与Memcached之间的连接,不用频繁建立和断开连接,也是优化Nginx吧。

不过,首先还是修改一下Nginx源码,这样可以使本来是5M大的Nginx内核减肥到只有680K大小!

?
1
2
3
4
wget http://nginx.org/download/nginx-1.0.11.tar.gz
tar xzvf nginx-1.0.11.tar.gz
cd nginx*
cd auto/cc


?
1
vi gcc
找到

# debug
CFLAGS="$CFLAGS -g"

然后在CFLAGS前面加上#号,得到:

# debug
#CFLAGS="$CFLAGS -g"

好了,保存退出。

回到 Nginx目录

?
1
cd ../..
开始编译安装Nginx,注意,由于原来该论坛使用Apache,所以我保留了原来的用户权限。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
./configure --user=apache --group=apache --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module --with-openssl= \
--with-http_addition_module \
--with-zlib= \
--add-module=../agentzh-memc-nginx-module-a0bc33a \
--add-module=../ngx_cache_purge-1.3 \
--with-file-aio --with-google_perftools_module \
--with-http_gzip_static_module \
--add-module=../ngx_http_upstream_keepalive-d9ac9ad67f45

make -j8
make install
为google-perftools添加线程目录



?
1
2
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
将Nginx注册成系统服务

?
1
vi /etc/init.d/nginx
/etc/init.d/nginx文件内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
保存退出。

设置相关权限,并启动Nginx

?
1
2
3
4
chmod +x /etc/init.d/nginx
chkconfig –add nginx
chkconfig nginx on
service nginx start
完成Nginx安装。



安装PHP和php-fpm
先下载PHP,PHP-FPM和freetype2源码

?
1
2
3
wget http://cn.php.net/get/php-5.2.17.tar.gz/from/this/mirror
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
wget http://downloads.sourceforge.net/project/freetype/freetype2/2.3.12/freetype-2.3.12.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ffreetype%2Ffiles%2Ffreetype2%2F2.3.12%2F&ts=1314417995&use_mirror=softlayer
安装FreeType2

?
1
2
3
4
5
6
tar xzvf freetype-2.3.12.tar.gz
cd freetype-2.3.12
make setup
make
make install
cd ..
为PHP打上php-fpm补丁

?
1
2
tar xzvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
再装一次依赖

?
1
yum install libxml2-devel gd-devel curl-devel -y
开始装PHP

?
1
2
3
4
5
6
7
8
9
./configure --enable-fastcgi --enable-fpm --with-mysql \
--with-mysqli --with-gd=/usr --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d --with-curl \
--enable-calendar --with-openssl --with-zlib --without-sqlite --disable-pdo \
--enable-mbstring --with-freetype-dir=/usr \
--enable-sockets --enable-zip

make
make install
不知道是不是兼容性问题,在CentOS 6.2上我怎么也没办法让PHP支持libmhash和libmcrypt,尽管我已经正常安装了这些libs。以后有时候再处理这个。

安装Memcached

?
1
2
3
4
5
wget http://pecl.php.net/get/memcache-2.2.6.tgz
tar xzvf memcache-2.2.6.tgz
cd memcache-2.2.6
phpize
./configure --enable-memcache && make && make install
安装eaccelerator

?
1
2
3
4
5
6
wget http://downloads.sourceforge.net/project/eaccelerator/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Feaccelerator%2Ffiles%2F&ts=1325686230&use_mirror=nchc -O eaccelerator-0.9.6.1.zip

unzip eaccelerator-0.9.6.1.zip
cd eaccelerator-0.9.6.1
phpize
./configure --enable-eaccelerator && make && make install
修改PHP配置,使PHP支持Memcache和eaccelerator

?
1
vi /etc/php.ini
添加

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
extension= memcache.so

[eaccelerator]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.cache_dir="/var/tmp/eaccelerator_cache"
eaccelerator.shm_size="64"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

[memcache]
memcache.hash_strategy = "consistent"
memcache.default_timeout_ms = 300
保存退出。
运行下面两行命令,创建eaccelerator缓存目录

?
1
2
mkdir /var/tmp/eaccelerator_cache -p
chmod 0777 /var/tmp/eaccelerator_cache
启动Memcached和php-fpm

?
1
2
3
4
memcached -d -p 11211 -u memcached -m 64 -c 1024
memcached -d -p 11212 -u memcached -m 64 -c 1024
memcached -d -p 11213 -u memcached -m 1024
memcached -d -p 11214 -u memcached -m 1024
启动php-fpm

?
1
php-fpm start
安装MySQL 5.5

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.19.tar.gz/from/http://mysql.cdpa.nsysu.edu.tw/
tar xzvf mysql-5.5.19.tar.gz
yum install cmake -y
cd mysql-5.5.19

cmake . -DCMAKE_INSTALL_PREFIX=/usr/ \
-DMYSQL_DATADIR=/var/mysql \
-DDEFAULT_CHARSET=utf8 \
-DWITH_EXTRA_CHARSETS=utf8,gbk,gb2312 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_LIBWRAP=1 \
-DWITH_SSL=yes \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1

make
make install
初始化MySQL

?
1
2
3
4
5
6
7
8
9
10
useradd mysql
mkdir /var/mysql
chown -R mysql:mysql /var/mysql

chmod +x scripts/mysql_install_db
scripts/mysql_install_db --basedir=/usr --datadir=/var/mysql
chown -R mysql:mysql /var/mysql

cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
将MySQL 5.5注册成系统服务

?
1
2
3
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
最后一步,启动MySQL

?
1
service mysqld start
好了,到这里就完成了基本的WEB环境的安装了。

休息下,写文章跟写代码一样累啊。

下一篇再把Nginx,PHP,MySQL的配置贴出吧,顺便将MySQL数据主从同步,图片实时同步和其它的一些优化配置写出来。

猜你喜欢

转载自mw-fang.iteye.com/blog/1659532