环境:
OS: CentOS 6.6
IP: 172.16.66.100
Nginx: nginx-1.6.2
PHP: php-5.4.40
Xcache: xcache-3.2.0
Mysql: mariadb-5.5.43
一、前期环境准备:
1、根据官方ISO 创建本地yum源
[root@1inux ~]# mkdir /mnt/cd
[root@1inux ~]# mount /dev/cdrom /mnt/cd
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@1inux ~]# cd /etc/yum.repos.d/
[root@1inux yum.repos.d]# vim cd.repo
[CD] name=CentOS-$releasever - Base baseurl=file:///mnt/cd enable=1 gpgcheck=0
2、安装开发环境及必要的安装包
[root@1inux yum.repos.d]# yum -y groupinstall "Development tools" "Server Platform Development" [root@1inux yum.repos.d]# yum -y install pcre-devel
二、安装Nginx
1、创建用户
[root@1inux ~]# groupadd -g 60 nginx [root@1inux ~]# useradd -g 60 -u 60 -r -s /sbin/nologin nginx
2、创建编译安装时需要的目录
[root@1inux nginx-1.6.2]# mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
3、编译安装nginx
[root@1inux tmp]# tar xf nginx-1.6.2.tar.gz [root@1inux tmp]# cd nginx-1.6.2 [root@1inux nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --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 --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_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/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi
4、为nginx提供SysV init脚本
[root@1inux nginx-1.6.2]# vim /etc/rc.d/init.d/nginx
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/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="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/nginx.lock make_dirs() { # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs 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 sleep 1 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
添加执行权限
[root@1inux nginx-1.6.2]# chmod +x /etc/rc.d/init.d/nginx
6、修改PATH环境变量,让系统可以直接使用nginx的相关命令
[root@1inux nginx-1.6.2]# echo "export PATH=/usr/local/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh 重载文件 [root@1inux nginx-1.6.2]# . /etc/profile.d/nginx.sh
7、添加至服务管理列表,并让其开机自动启动
[root@1inux nginx-1.6.2]# chkconfig --add nginx [root@1inux nginx-1.6.2]# service nginx start
三、安装Mariadb
1、创建数据存放的文件系统--LVM
[root@1inux nginx-1.6.2]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (7859-10443, default 7859): Using default value 7859 Last cylinder, +cylinders or +size{K,M,G} (7859-10443, default 10443): +6G Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): 83 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
让内核识别分区表
[root@1inux nginx-1.6.2]# partx -a /dev/sda [root@1inux nginx-1.6.2]# partx -a /dev/sda
创建LVM
[root@1inux nginx-1.6.2]# pvcreate /dev/sda3 [root@1inux nginx-1.6.2]# vgcreate myvg /dev/sda3 [root@1inux nginx-1.6.2]# lvcreate -L 4G -n mydata myvg [root@1inux nginx-1.6.2]# mke2fs -t ext4 -L MYDATA /dev/myvg/mydata
2、编辑fstab文件自动挂载
[root@1inux nginx-1.6.2]# vim /etc/fstab
添加如下
---------------------- /dev/myvg/mydata /data ext4 defaults 0 0 或者 LABEL=MYDATA /data ext4 defaults 0 0
---------------------------
[root@1inux nginx-1.6.2]# mkdir /data [root@1inux nginx-1.6.2]# mount -a //自动挂载 [root@1inux nginx-1.6.2]# mount ... /dev/mapper/myvg-mydata on /data type ext4 (rw) ...
3、创建存放数据的目录,并创建系统mysql用户,以便安全运行进程
[root@1inux data]# mkdir /data/mydata [root@1inux tmp]# groupadd -r mysql [root@1inux tmp]# useradd -g mysql -r -s /sbin/nologin -M -d /data/mydata mysql [root@1inux tmp]# chown -R mysql:mysql /data/mydata
4、安装并初始化mariadb-5.5.43
[root@1inux tmp]# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local [root@1inux tmp]# cd /usr/local [root@1inux local]# ln -sv mariadb-5.5.43-linux-x86_64/ mysql [root@1inux local]# cd mysql/
[root@1inux mysql]# chown -R mysql:mysql . //修改当前目录权限 [root@1inux mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mydata //初始化数据
4、为mariadb-5.5.43 提供配置文件
【MySQL的配置文件查找次序:/etc/my.cnf --> /etc/mysql/my.cnf --> ~/.my.cnf】 [root@1inux mysql]# mkdir /etc/mysql [root@1inux mysql]# cp /usr/local/mysql/support-files/my-large.cnf /etc/mysql/my.cnf
并修改此文件中thread_concurrency的值为你的CPU个数乘以2 【其中cpu个数可以使用lscpu查看】
# vim /etc/mysql/my.cnf
thread_concurrency = 2 //并添加以下内容: datadir = /data/mydata innodb_file_per_table = on
5、为mariadb 提供sysv服务脚本
[root@1inux data]# cd /usr/local/mysql [root@1inux mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
添加至服务列表
[root@1inux mysql]# chkconfig --add mysqld [root@1inux mysql]# chkconfig mysqld on [root@1inux mysql]#
而后就可以启动服务使用了。
为了使用mariadb的安装符合系统使用规范,这里还需要进行如下步骤:
6、输出mysql的man手册至man命令的查找路径:
编辑/etc/man.config,添加如下行即可:
MANPATH /usr/local/mysql/man
7、输出mysql的头文件至系统头文件路径/usr/include:
这可以通过简单的创建链接实现:
[root@1inux mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql
8、输出mysql的库文件给系统库查找路径:
[root@1inux mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
然后让系统重新载入系统库:
[root@1inux mysql]# ldconfig
9、修改PATH环境变量,让系统可以直接使用mysql的相关命令
[root@1inux mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh [root@1inux mysql]# . /etc/profile.d/mysql.sh
四、编译安装php-5.4.4
1、解决依赖关系并编译安装:
安装依赖程序包
[root@1inux php-5.4.40]# tar xf php-5.4.40.tar.bz2 [root@1inux php-5.4.40]# cd php-5.4.40 [root@1inux php-5.4.40]# yum install bzip2 bzip2-devel -y [root@1inux php-5.4.40]# yum install mhash mhash-devel mcrypt -y [root@1inux php-5.4.40]# yum -y install libxml2 libxml2-devel [root@1inux php-5.4.40]# yum -y install curl-devel [root@1inux php-5.4.40]# yum install libmcrypt libmcrypt-devel -y
编译安装
[root@1inux php-5.4.40]# ./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 [root@1inux php-5.4.40]# make && make install
2、为php提供配置文件
[root@1inux php-5.4.40]# cp php.ini-production /etc/php.ini
3、为php-fpm提供Sysv init脚本
[root@1inux php-5.4.40]# cp php.ini-production /etc/php.ini [root@1inux php-5.4.40]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm [root@1inux php-5.4.40]# chmod +x /etc/rc.d/init.d/php-fpm
4、并将其添加至服务列表
[root@1inux php-5.4.40]# chkconfig --add php-fpm [root@1inux php-5.4.40]# chkconfig php-fpm on
5、为php-fpm提供配置文件
[root@1inux php-5.4.40]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
6、编辑php-fpm的配置文件:
[root@1inux php-5.4.40]# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children = 150 pm.start_servers = 8 pm.min_spare_servers = 5 pm.max_spare_servers = 10 pid = /usr/local/php/var/run/php-fpm.pid
7、现在就可以启动php-fpm了
[root@1inux php-5.4.40]# service php-fpm start
8、验证是否启动成功 (如果此命令输出有中几个php-fpm进程就说明启动成功了):
[root@1inux php-5.4.40]# ps aux | grep php-fpm root 121717 0.0 0.4 253684 4308 ? Ss 03:19 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) nobody 121800 0.7 2.2 259076 20700 ? S 03:24 0:17 php-fpm: pool www nobody 121816 0.4 2.5 261892 23372 ? S 03:28 0:08 php-fpm: pool www nobody 121817 0.3 2.2 259076 20700 ? S 03:28 0:07 php-fpm: pool www
五、整合nginx和php5
1、编辑/etc/nginx/nginx.conf,启用如下选项:
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
2、编辑/etc/nginx/fastcgi_params,将其内容更改为如下内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
并在所支持的主页面格式中添加php格式的主页,类似如下:
location / { root html; index index.php index.html index.htm; }
3、然后重新加载配置文件
[root@1inux php-5.4.40]# service nginx reload
4、接下来创建index.php页面,测试php是否能正常工作
[root@1inux nginx]# vim /usr/local/nginx/html/index.php <?php phpinfo(); ?>
5、访问主页
能够正常访问,说明 nginx+ php 已经配置完成
6、在nginx中添加虚拟主机配置WordPress blog
编辑配置文件/etc/nginx/nginx.conf,添加如下内容:server {
listen 80; server_name blog.1inux.com; access_log logs/blog.access; //其日志目录为: /usr/local/nginx/logs/blog.access error_log logs/blog.error; location / { root /vhost/blog; index index.php index.html index.htm; } location ~ \.php$ { root /vhost/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
创建目录
# mkdir -pv /vhost/blog/ # unzip wordpress-3.2.1-zh_CN.zip # mv wordpress/* /vhost/blog/ # chown -R nginx:nginx /vhost/blog
创建数据库及数据库用户密码
[root@1inux ~]# mysql MariaDB [(none)]> create database wpdb; MariaDB [(none)]> GRANT ALL ON wpdb.* TO wpuser@'localhost' IDENTIFIED BY 'wppass'; MariaDB [wpdb]> GRANT ALL ON wp.* TO wpuser@'172.16.66.%' IDENTIFIED BY 'wppass';
然后安装.......访问
六、安装xcache,为php加速:
1、安装 Xcache
[root@1inux tmp]# tar xf xcache-3.2.0.tar.bz2 [root@1inux tmp]# cd xcache-3.2.0 [root@1inux xcache-3.2.0]# /usr/local/php/bin/phpize Configuring for: PHP Api Version: 20100412 Zend Module Api No: 20100525 Zend Extension Api No: 220100525 [root@1inux xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
2、编辑php.ini,整合php和xcache:
[root@1inux xcache-3.2.0]# mkdir /etc/php.d [root@1inux xcache-3.2.0]# cp xcache.ini /etc/php.d
注:xcache.ini文件在xcache的源码目录中
3、编辑/etc/php.d/xcache.ini,找到extension开头的行,修改为如下行:
将 extension = xcache.so 修改为如下:
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
注:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
4、重新启动php-fpm
[root@1inux xcache-3.2.0]# service php-fpm restart
OK 至此 Xcache就安装完成了接下来我们看下效果
七、使用ab进行压力测试
[root@1inux ~]# ab -n 1000 -c 10 http://blog.1inux.com/index.php //总请求1000 并发10
1、安装Xcache加速前进行的压力测试 效果如下
Server Software: nginx/1.6.2 Server Hostname: blog.1inux.com Server Port: 80 Document Path: /index.php Document Length: 0 bytes Concurrency Level: 10 //并发请求数 Time taken for tests: 30.660 seconds //处理请求所花费的总时间 Complete requests: 1000 //总请求数 Failed requests: 0 Write errors: 0 Non-2xx responses: 1000 Total transferred: 257000 bytes HTML transferred: 0 bytes Requests per second: 32.62 [#/sec] (mean) //服务器并发吞吐量 Time per request: 306.602 [ms] (mean) //用户平均等待时间 Time per request: 30.660 [ms] (mean, across all concurrent requests) //服务器平均请求处理时间 Transfer rate: 8.19 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 192 306 129.9 253 1246 Waiting: 192 306 129.9 253 1246 Total: 192 306 129.9 253 1246 Percentage of the requests served within a certain time (ms) 50% 253 66% 308 75% 350 80% 421 90% 483 95% 492 98% 596 99% 737 100% 1246 (longest request)
2、安装Xcache加速并启用后 进行压力测试结果如下
Server Software: nginx/1.6.2 Server Hostname: blog.1inux.com Server Port: 80 Document Path: /index.php Document Length: 0 bytes Concurrency Level: 10 Time taken for tests: 11.158 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Non-2xx responses: 1000 Total transferred: 257000 bytes HTML transferred: 0 bytes Requests per second: 89.62 [#/sec] (mean) Time per request: 111.577 [ms] (mean) Time per request: 11.158 [ms] (mean, across all concurrent requests) Transfer rate: 22.49 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.0 0 33 Processing: 62 111 20.3 105 207 Waiting: 62 111 20.3 105 207 Total: 63 111 20.3 105 207 Percentage of the requests served within a certain time (ms) 50% 105 66% 114 75% 125 80% 131 90% 142 95% 149 98% 157 99% 161 100% 207 (longest request)
可以明显看到 服务器并发吞吐量以及用户请求时长等性能都有了明显的提升........
不足之处还请各位看官指正。。。。。。