LEMP构建高性能的WEB服务器(第四版)
LEMP 自动化编译脚本下载:http://docs.linuxtone.org/autoinstall/ (定期更新,欢迎多测试,找bug)介绍参考:http://bbs.linuxtone.org/thread-6976-1-1.html
作者:hamgua(哈密瓜) http://bbs.linuxtone.org(IT运维专家网|集群架构|性能调优)
欢迎转载,转载时请务必以超链接形式标明文章出处和作者信息及本声明。 更新时间:2011-03-06
平台搭建环境: CentOS5.5 x86_64
目标: 构建高性能的LEMP环境提供WEB服务
一、系统安装
1.系统分区建议 /boot 100M(大约100左右) SWAP 物理内存的2倍(如果你的物理内存大于4G,分配4G即可) / 分区15~20G /usr/local (用于安装软件) /data 剩余所有空间 【注】具体分区请根据相关业务划分,具体安装本文不作介绍,安装过程中选择最少的包,采用文本模式安装请不要安装图形模式。
2.系统初始化 系统初始化脚本(根据具体需求关闭不需要的服务) #sh network.sh //下载本文提供的lemp.zip包,即可找到此脚本。
二、编译安装基本环境
1.安装准备 1.1系统软件包安装规范 系统约定 /usr/local/src 软件源代码包存放位置 /usr/local/softname_version 源码包编译安装位置(prefix) /usr/local/sbin 脚本以及维护程序存放位置 /data/mysql/3306/data MySQL数据库位置(可按情况设置) /data/www/wwwroot 网站根目录(可按情况设置) /data/logs 虚拟主机日志根目录(可按情况设置) www:www nginx运行账户 mysql:mysql mysq运行账户 install_softwartname_version.sh 存放编译参数脚本习惯,将所有编译脚本存放在 install_softwartname_version.sh中,便于升级和更新软件。
创建网站帐号及相关存放目录 #sh add_nginx_user.sh - /usr/sbin/groupadd www
- /usr/sbin/useradd –g www www
- mkdir –p /data/{logs,www/wwwroot}
- chmod 755 –R /data/{logs,www/wwwroot}
- chown www:www –R /data/{logs,www/wwwroot}
复制代码
创建数据库帐号及存放目录
#sh add_mysql_user.sh - /usr/sbin/groupadd mysql -g 27
- /usr/sbin/useradd -u 27 -g mysql -c "MySQL Server" mysql -s /sbin/nologin
- mkdir –p /data/mysql/3306/{data,logs/{binlog,relaylog}}
- chown mysql:mysql –R /data/mysql
复制代码
1.2 系统环境部署及调整
检查系统是否正常 #tail –n100 /var/log/message (检查有无系统级错误信息) #dmesg (检查硬件设备是否有错误信息) #ifconfig (检查网卡设置是否正确) #ping bbs.linuxtong.org (检查网络是否正常)
1.3 使用yum程序安装所需开发包(以下为标准的RPM包名称) 添加国内镜像源,加速软件安装下载速度,请参照:http://bbs.linuxtone.org/thread-158-1-1.html #sh yum.sh - yum -y install dialog ntp vim-enhanced vixie-cron gcc gcc-c++ gcc-g77 flex bison autoconf automake glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel libtool* zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devel libXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel net-snmp net-snmp-devel nss_ldap openldap-clients openldap-servers libtidy libtidy-devel
复制代码
1.4 定时校正服务器时钟,定时与中国国家时间中心服务器同步
#crontab –e 加入一行: - 15 1 * * * /usr/sbin/ntpdate 210.72.145.44;/usr/sbin/hwclock -w > /dev/null 2>&1
复制代码
1.5 下载编译相关的源码包
#cd /usr/local/src #vi list.txt //在list.txt文件里填入下载地址列表 - http://docs.linuxtone.org/soft/lemp/packages/pcre-8.10.tar.gz
- http://labs.frickle.com/files/ngx_cache_purge-1.2.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/nginx-0.8.53.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/libiconv-1.13.1.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/libmcrypt-2.5.8.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/mcrypt-2.6.8.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/mhash-0.9.9.9.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/eaccelerator-0.9.6.1.tar.bz2
- http://docs.linuxtone.org/soft/lemp/packages/libevent-1.4.13-stable.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/memcache-2.2.6.tgz
- http://docs.linuxtone.org/soft/lemp/packages/memcached-1.0.2.tgz
- http://docs.linuxtone.org/soft/lemp/packages/memcached-1.4.5.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/libmemcached-0.44.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/ImageMagick.tar.gz
- http://docs.linuxtone.org/soft/lemp/packages/imagick-3.0.1.tgz
- http://download.suhosin.org/suhosin-patch-5.3.4-0.9.10.patch.gz
- http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
- http://pecl.php.net/get/tidy-1.2.tgz
- http://mirrors.sohu.com/php/php-5.3.4.tar.gz
- http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.8.tar.gz
- ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/1.3/GraphicsMagick-1.3.12.tar.gz
- http://pecl.php.net/get/gmagick-1.0.8b1.tgz
复制代码
#wget –i list.txt
2.编译安装软件包源码编译安装所需包(Source) 2.1编译安装Nginx - tar zvxf pcre-8.10.tar.gz
- cd pcre-8.10
- ./configure && make && make install
复制代码- tar zvxf nginx-0.8.53.tar.gz
- cd nginx-0.8.53
- ./configure --user=www --group=www --prefix=/usr/local/nginx-0.8.53/ --add-module=../ngx_cache_purge-1.2 --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_gzip_static_module
- make && make install
复制代码- mkdir -p /data/cache/nginx_cache
- mkdir -p /data/cache/nginx_temp
复制代码
2.2编译安装MySQL
注:MySQL的5.5把本来用的autotools的换成CMake了。
mysql5.5融合了mysql数据库和innodb存储引擎的优点,能够提供高性能的数据库管理解决方案,包括: innodb作为默认的数据库存储引擎
多核性能提升
复制功能(Replication)加强
增强表分区功能
提升了windows系统下的系统性能和可扩充性
改善性能和可扩充性,全面利用各平台现代多核构架的注意能力
提高实用性
提高易管理性和效率
提高可用性
改善检测与诊断性能
- tar zvxf cmake-2.8.4.tar.gz
- cd cmake-2.8.4
- ./configure && make && make install
复制代码- tar zxvf mysql-5.5.8.tar.gz
- cd mysql-5.5.8
- cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.8 -DMYSQL_DATADIR=/data/mysql/3306/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=yes -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=on
- gmake
- make install
复制代码 配置mysql配置文件- cd /data/mysql/3306
- wget http://bbs.linuxtone.org/forum-attachment-aid-MjM4OXxkZGRhNDBhZHwxMjk5NDExMjc2fDQ2.html
- chown mysql:mysql /data/mysql/3306/my.cnf
- ln –s /data/mysql/3306/my.cnf /etc/
复制代码 (配置文件也可以上传附件中my.cnf)
初始化mysql数据
- mkdir -p /usr/local/mysql-5.5.8/include/mysql
- ln -s /usr/local/mysql-5.5.8/include/* /usr/local/mysql-5.5.8/include/mysql/
- /usr/local/mysql-5.5.8/scripts/mysql_install_db --basedir=/usr/local/mysql-5.5.8/ --datadir=/data/mysql/3306/data --user=mysql --defaults-file=/data/mysql/3306/my.cnf
- cp /usr/local/mysql-5.5.8/support-files/mysql.server /etc/rc.d/init.d/mysqld > /dev/null 2>&1
- chmod 755 /etc/rc.d/init.d/mysqld
- chkconfig --add mysqld
- /etc/rc.d/init.d/mysqld start > /dev/null 2>&1
- rm -rf /usr/bin/mysql* > /dev/null 2>&1
- cd /usr/local/mysql-5.5.8/bin/
- for i in *; do ln -s /usr/local/mysql-5.5.8/bin/$i /usr/bin/$i; done
- echo "/usr/local/mysql-5.5.8/lib/" >> /etc/ld.so.conf
- ldconfig
复制代码
2.3编译安装PHP相关的LIB- tar zxvf libiconv-1.13.1.tar.gz
- cd libiconv-1.13.1
- ./configure --prefix=/usr/local && make && make install
复制代码- tar zxvf libmcrypt-2.5.8.tar.gz
- cd libmcrypt-2.5.8/
- ./configure --prefix=/usr && make && make install
- cd libltdl/
- ./configure --enable-ltdl-install
- make && make install
复制代码- tar zxvf mhash-0.9.9.9.tar.gz
- cd mhash-0.9.9.9
- ./configure --prefix=/usr && make && make install
- ldconfig
复制代码- ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
- ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
- ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
- ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
- ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
- ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
- ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
- ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
- ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
- /sbin/ldconfig
复制代码- tar zxvf mcrypt-2.6.8.tar.gz
- cd mcrypt-2.6.8
- ./configure --prefix=/usr && make&& make install
复制代码- echo "/usr/lib" >> /etc/ld.so.conf
- echo "/usr/local/lib" >> /etc/ld.so.conf
- ldconfig
复制代码
2.4编译安装PHP-FastCGI- gzip -d suhosin-patch-5.3.4-0.9.10.patch.gz
- tar zxvf php-5.3.4.tar.gz
- cd php-5.3.4
- patch -p 1 -i ../suhosin-patch-5.3.4-0.9.10.patch
- ./configure --prefix=/usr/local/php-5.3.4 --with-config-file-path=/usr/local/php-5.3.4/etc --with-mysql=/usr/local/mysql-5.5.8 --with-mysqli=/usr/local/mysql-5.5.8/bin/mysql_config --with-pdo-mysql=/usr/local/mysql-5.5.8/ --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-pdo-sqlite --enable-pdo --with-bz2 --with-gettext --with-snmp --with-libxml-dir --enable-xml --disable-rpath --disable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear
- make ZEND_EXTRA_LIBS='-liconv'
- make install
- cp php.ini-production /usr/local/php-5.3.4/etc/php.ini
复制代码 配置php-fcgi配置文件和启动脚本 - cd /usr/local/php-5.3.4/etc
- wget http://bbs.linuxtone.org/forum-attachment-aid-MjM5MXw0MTJhMDZhNHwxMjk5NDExNjU4fDQ2.html
- cd /etc/init.d
- wget http://bbs.linuxtone.org/forum-attachment-aid-MjM5MHw4YjMyN2QxOXwxMjk5NDExNjU4fDQ2.html
- chmod +x /etc/init.d/php-fpm
- mkdir -p /usr/local/php-5.3.4/logs
- chown www:www –R /usr/local/php-5.3.4/logs
复制代码 (配置文件也可以上传附件中的php-fcgi配置文件php-fpm.conf和附件中的php-fpm脚本)
2.5编译安装PHP扩展
- tar zvxf libevent-1.4.13-stable.tar.gz
- cd libevent-1.4.13-stable
- ./configure && make && make install
复制代码- tar zxvf memcached-1.4.5.tar.gz
- cd memcached-1.4.5
- /usr/local/php-5.3.4/bin/phpize
- ./configure --prefix=/usr/local/memcached-1.4.5
- make && make install
复制代码- tar zxvf memcache-2.2.6.tgz
- cd memcache-2.2.6
- /usr/local/php-5.3.4/bin/phpize
- ./configure --with-php-config=/usr/local/php-5.3.4/bin/php-config
- make && make install
复制代码- tar zvxf libmemcached-0.44.tar.gz
- cd libmemcached-0.44
- ./configure --prefix=/usr/local/libmemcached-0.44 --with-memcached=/usr/local/memcached-1.4.5/bin/memcached
- make && make install
复制代码- tar zvxf tidy-1.2.tgz
- cd tidy-1.2
- /usr/local/php-5.3.4/bin/phpize
- ./configure --with-php-config=/usr/local/php-5.3.4/bin/php-config
- make && make install
复制代码- tar zxvf memcached-1.0.2.tgz
- cd memcached-1.0.2
- /usr/local/php-5.3.4/bin/phpize
- ./configure --with-php-config=/usr/local/php-5.3.4/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached-0.44/
- make && make install
复制代码- tar zxvf ImageMagick.tar.gz
- cd ImageMagick-6.5.1-2/
- ./configure --enable-shared --with-modules --without-x --with-gs-font-dir=default --with-perl=yes --with-xml=yes --with-zlib=yes --with-jpeg=yes
- Make && make install
复制代码- tar zxvf imagick-3.0.1.tgz
- cd imagick-3.0.1
- /usr/local/php-5.3.4/bin/phpize
- ./configure --with-php-config=/usr/local/php-5.3.4/bin/php-config
- make && make install
复制代码- tar zvxf GraphicsMagick-1.3.12.tar.gz
- ./configure --prefix=/usr/local/GraphicsMagick-1.3.12 --enable-libtool-verbose --with-included-ltdl --enable-shared --disable-static --with-modules --with-frozenpaths --without-perl --without-magick-plus-plus --with-quantum-depth=8 --enable-symbol-prefix
- make && make install
复制代码- tar zvxf gmagick-1.0.8b1.tgz
- cd gmagick-1.0.8b1
- /usr/local/php-5.3.4/bin/phpize
- ./configure --with-php-config=/usr/local/php-5.3.4/bin/php-config --with-gmagick=/usr/local/GraphicsMagick-1.3.12/
- make && make install
复制代码- tar jvxf eaccelerator-0.9.6.1.tar.bz2
- cd eaccelerator-0.9.6.1
- /usr/local/php-5.3.4/bin/phpize
- ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php-5.3.4/bin/php-config
- make && make install
复制代码
2.6配置php.ini
#vi conf_php.sh - sed -i 's/error_reporting = E_ALL \& ~E_NOTICE/error_reporting = E_WARNING \& E_ERROR/g' /usr/local/php-5.3.4/etc/php.ini
- sed -i '/display_errors/ {s/On/Off/g};/log_errors/ {s/Off/On/g}' /usr/local/php-5.3.4/etc/php.ini
- sed -i "s#;error_log = filename#error_log = /tmp/php-error.log#g" /usr/local/php-5.3.4/etc/php.ini
- sed -i "s#;always_populate_raw_post_data = On#always_populate_raw_post_data = On#g" /usr/local/php-5.3.4/etc/php.ini
- cat >>/usr/local/php-5.3.4/etc/php.ini<<EOF
- extension_dir = "/usr/local/php-5.3.4/lib/php/extensions/no-debug-non-zts-20090626/"
- extension = "memcache.so"
- extension = "memcached.so"
- extension = "imagick.so"
- extension = "tidy.so"
- extension = "gmagick.so"
- extension = "eaccelerator.so"
- eaccelerator.cache_dir="/data/cache/eaccelerator_cache"
- 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"
- EOF
复制代码 #sh conf_php.sh
2.7启动php-fcgi - /etc/init.d/php-fpm start
复制代码
2.8配置nginx/conf
上传附件中的lemp/conf/nginx下的所有东西到/usr/local/nginx-0.8.53/conf下面覆盖原来的配置文件
2.9验证服务环境
新建info.php到虚拟主机的目录/data/www/wwwroot下面 访问http://ip.info.php 即可查看当前配置环境,查看完成后出于安全考虑,请修改php.ini禁止如下参数 - sed –i ‘210 s#disable_functions = #disable_functions = popen,pentl_exec,passthru,exec,system,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,show_source,escapeshellcmd,escapeshellarg,curl_exec,curl_multi_exec,parse_ini_file,assert,phpinfo#g’ /usr/local/php-5.3.4/etc/php.ini
复制代码
三、服务器简单优化 1.简单网络优化 上传附件中的 lemp/scripts/tuning/network.sh
2.简单内核优化
上传附件中的 /lemp/scripts/tuning/tuning.sh
3.其他优化根据具体情况还有硬件情况做调整
更多的优化请参考:http://bbs.linuxtone.org/forum-31-1.html或联系我们
四、相关参考及介绍 1.Nginx Tips(Nginx应用技巧含优化) http://bbs.linuxtone.org/thread-1241-1-1.html 2.LEMP构建高性能WEB服务器(第三版)http://bbs.linuxtone.org/thread-1582-1-1.html 3.如果你想构建可用集群方案请参考 http://www.linuxtone.org/thread-1402-1-1.html 4.如果你想学习服务器监控请参考 http://www.linuxtone.org/forum-20-1.html
五、相关脚本下载 http://bbs.linuxtone.org/forum-attachment-aid-MjM5Mnw2OTc0NWIyOXwxMjk5NDEzMDMwfDQ2.html 文中所有脚本及配置范例
附件:
my.cnf
(2.39 KB, 下载次数: 444)
php-fpm.conf
(754 Bytes, 下载次数: 386)
php-fpm
(995 Bytes, 下载次数: 355)
lemp.zip
(31.33 KB, 下载次数: 673)
下载PDF版(更利于阅读):
LEMP构建高性能的WEB服务器(第四版).pdf
(460.36 KB, 下载次数: 791)
|