php-fpm:php
CentOS 6:html
PHP-5.3.2-:默認不支持fpm機制;須要自行打補丁並編譯安裝;node
httpd-2.2:默認不支持fcgi協議,須要自行編譯此模塊;mysql
解決方案:編譯安裝httpd-2.4, php-5.3.3+;linux
CentOS 6, lamp (編譯安裝http和php-fpm);web
實現:sql
(1) 三者分離於三臺主機;數據庫
(2) 一個虛擬主機用於提供phpMyAdmin;另外一個虛擬主機用於提供wordpress;apache
(3) 爲php提供xcachevim
(4) 切換mpm爲非prefork機制;
On http(172.16.17.61):
1)配置編譯環境,安裝開發包組
[root@node1 ~]# yum -y groupinstall "Development Tools" "Server Platform Development"
2)安裝httpd依賴的apr及apr-util,apr須要先安裝
[root@node1 ~]# tar xf apr-1.5.0.tar.bz2 [root@node1 ~]# cd apr-1.5.0 [root@node1 apr-1.5.0]# ./configure --prefix=/usr/local/apr [root@node1 apr-1.5.0]# make -j 4 && make install ============================================================ [root@node1 ~]# tar xf apr-util-1.5.3.tar.bz2 [root@node1 ~]# cd apr-util-1.5.3 [root@node1 apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ [root@node1 apr-util-1.5.3]# make -j 4 && make install
3)編譯安裝httpd程序
[root@node1 ~]# yum -y install pcre-devel openssl-devel [root@node1 ~]# tar xf httpd-2.4.10.tar.bz2 [root@node1 ~]# cd httpd-2.4.10 [root@node1 httpd-2.4.10]# ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24 \ > --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all \ > --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-mpm=prefork [root@node1 httpd-2.4.10]# make -j 4 && make install
4)提供httpd服務腳本,複製CentOS6的httpd2.2服務腳本,簡單修改便可
[root@node1 ~]# cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24 [root@node1 ~]# vim /etc/rc.d/init.d/httpd24 apachectl=/usr/local/apache24/bin/apachectl httpd=${HTTPD-/usr/local/apache24/bin/httpd} prog=httpd pidfile=${PIDFILE-/usr/local/apache24/logs/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
5)添加httpd的PATH環境變量
[root@node1 ~]# chkconfig --add httpd24 [root@node1 ~]# chkconfig httpd24 on [root@node1 ~]# vim /etc/profile.d/httpd24.sh export PATH=/usr/local/apache24/bin:$PATH [root@node1 ~]# . /etc/profile.d/httpd24.sh
6)啓用httpd2.4的fcgi模塊
[root@node1 ~]# vim /etc/httpd24/httpd.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
7)添加http對php頁面文件的支持,啓用虛擬主機
[root@node1 ~]# vim /etc/httpd24/httpd.conf ServerName www.example.com:80 #DocumentRoot "/usr/local/apache24/htdocs" <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> AddType application/x-httpd-php .php AddType application/x-httpd-source .phps Include /etc/httpd24/extra/httpd-vhosts.conf
8)提供虛擬主機www.pma.com及www.wordpress.com
[root@node1 ~]# vim /etc/httpd24/extra/httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@pma.com DocumentRoot "/web/pma/htdocs" ServerName www.pma.com ServerAlias web.pma.com ErrorLog "logs/pma.com-error_log" CustomLog "logs/pma.com-access_log" combined ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.17.62:9000/web/pma/htdocs <Directory "/web/pma/htdocs"> Options None AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@wordpress.com DocumentRoot "/web/wordpress/htdocs" ServerName www.wordpress.com ServerAlias web.wordpress.com ErrorLog "logs/wordpress.com-error_log" CustomLog "logs/wordpress.com-access_log" combined ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.17.62:9000/web/wordpress/htdocs <Directory "/web/wordpress/htdocs"> Options None AllowOverride None Require all granted </Directory> </VirtualHost>
9)安裝配置phpMyAdmin程序
[root@node1 ~]# mkdir -pv /web/{pma,wordpress} [root@node1 ~]# unzip phpMyAdmin-4.4.14.1-all-languages.zip -d /web/pma/ [root@node1 ~]# mv /web/pma/phpMyAdmin-4.4.14.1-all-languages/ /web/pma/htdocs [root@node1 ~]# cd /web/pma/htdocs [root@node1 htdocs]# cp config.sample.inc.php config.inc.php [root@node1 htdocs]# openssl rand -base64 20 vNVkpLUPfn2a4dz/ZKnJkBmvH54= 編輯config.inc.php文件,將生成的隨機數複製到裏面,而後更改數據庫鏈接主機: $cfg['blowfish_secret'] = 'vNVkpLUPfn2a4dz/ZKnJkBmvH54'; $cfg['Servers'][$i]['host'] = '172.16.17.63';
10)安裝配置WordPress程序
[root@node1 ~]# unzip wordpress-4.3.1-zh_CN.zip -d /web/wordpress/ [root@node1 ~]# mv /web/wordpress/wordpress/ /web/wordpress/htdocs [root@node1 ~]# cd /web/wordpress/htdocs [root@node1 htdocs]# cp wp-config-sample.php wp-config.php 編輯wp-config.php文件,配置數據庫鏈接信息: define('DB_NAME', 'wpdb'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'wppasswd'); define('DB_HOST', '172.16.17.63');
11)啓動httpd服務
[root@node1 ~]# httpd -t Syntax OK [root@node1 ~]# service httpd24 start Starting httpd: [ OK ] [root@node1 ~]# ss -tnl | grep 80 LISTEN 0 128 *:48075 *:* LISTEN 0 128 :::80 :::*
On php(172.16.17.62):
1)配置編譯環境,安裝開發包組
[root@node2 ~]# yum -y groupinstall "Development Tools" "Server Platform Development" [root@node2 ~]# yum install -y libxml2-devel libmcrypt-devel openssl-devel bzip2-devel
2)編譯安裝php程序,默認啓用php-fpm
[root@node2 ~]# tar xf php-5.6.4.tar.xz -C /usr/local/src [root@node2 ~]# cd /usr/local/src/php-5.6.4 [root@node2 php-5.6.4]# ./configure --prefix=/usr/local/php --sysconfdir=/etc/php \ > --enable-mbstring --enable-xml --enable-fpm --enable-sockets --enable-maintainer-zts \ > --with-openssl --with-freetype-dir --with-png-dir --with-jpeg-dir --with-zlib --with-bz2 \ > --with-libxml-dir=/usr --with-mcrypt --with-config-file-scan-dir=/etc/php.d \ > --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --user=apache [root@node2 php-5.6.4]# make -j 4 && make install
3)爲php提供配置文件
[root@node2 php-5.6.4]# cp php.ini-production /etc/php/php.ini
4)配置php-fpm
[root@node2 php-5.6.4]# mkdir /etc/php.d [root@node2 php-5.6.4]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@node2 php-5.6.4]# chmod +x /etc/init.d/php-fpm [root@node2 php-5.6.4]# chkconfig --add php-fpm [root@node2 php-5.6.4]# chkconfig php-fpm on
5)爲php-fpm提供配置文件並編輯之
[root@node2 php-5.6.4]# cp /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf [root@node2 php-5.6.4]# vim /etc/php/php-fpm.conf pid = /usr/local/php/var/run/php-fpm.pid listen = 172.16.17.62:9000 listen.allowed_clients = 172.16.17.61 pm.max_children = 60 pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 8
6)複製web服務器的網頁某到php服務器上一份,客戶端訪問時,獲取靜態資源會訪問到web服務器,訪問動態資源將訪問到php服務器
[root@node2 ~]# scp -r root@172.16.17.61:/web /
7)啓動php-fpm
[root@node2 ~]# service php-fpm start Starting php-fpm done [root@node2 ~]# ss -tnl | grep --color "9000" LISTEN 0 128 172.16.17.62:9000 *:* [root@node2 ~]# ps aux | grep --color "php-fpm" root 108087 0.0 1.0 71880 5128 ? Ss 00:07 0:00 php-fpm: master process (/etc/php/php-fpm.conf) apache 108088 0.0 0.9 71880 4436 ? S 00:07 0:00 php-fpm: pool www apache 108089 0.0 0.9 71880 4440 ? S 00:07 0:00 php-fpm: pool www apache 108090 0.0 0.9 71880 4440 ? S 00:07 0:00 php-fpm: pool www apache 108091 0.0 0.9 71880 4440 ? S 00:07 0:00 php-fpm: pool www apache 108092 0.0 0.9 71880 4440 ? S 00:07 0:00 php-fpm: pool www root 108096 0.0 0.1 103304 892 pts/0 S+ 00:08 0:00 grep --color php-fpm
On mariadb(172.16.17.73):
1)建立運行mariadb的用戶
[root@node2 ~]# groupadd -r mysql [root@node2 ~]# useradd -r -g mysql mysql
2)建立數據庫存放目錄
[root@node2 ~]# mkdir -pv /data/mysql [root@node2 ~]# chown -R mysql.mysql /data/mysql/
3)解壓mariadb程序包至/usr/local,並建立mysql軟連接
[root@node2 ~]# tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/ [root@node2 ~]# cd /usr/local/ [root@node2 local]# ln -sv mariadb-5.5.46-linux-x86_64/ mysql
4)初始化數據庫
[root@node2 local]# chown -R root.mysql mysql/ [root@node2 mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mysql
5)提供mysql主配置文件並編輯之
[root@node2 mysql]# mkdir /etc/mysql [root@node2 mysql]# cp support-files/my-medium.cnf /etc/mysql/my.cnf 在my.cnf配置文件中的[mysqld]端添加如下內容: datadir = /data/mysql //設置mysql的數據存儲目錄 innodb_file_per_table = ON //設置innodb存儲引擎獨立存儲數據庫 skip_name_resolve = ON //禁止mysql進行反解主機名
6)提供mysql服務腳本
[root@node2 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld [root@node2 mysql]# chmod +x /etc/rc.d/init.d/mysqld [root@node2 mysql]# chkconfig --add mysqld [root@node2 mysql]# chkconfig mysqld on
7)設置mysql命令的環境變量
[root@node3 ~]# vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH [root@node3 ~]# . /etc/profile.d/mysql.sh
8)導出mysql頭文件
[root@node3 ~]# ln -sv /usr/local/mysql/include/mysql/ /usr/include/
9)導出mysql庫文件路徑
[root@node3 ~]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf.d/mysql.conf [root@node3 ~]# ldconfig
10)導出mysql的man幫助手冊
[root@node3 ~]# vim /etc/man.config MANPATH /usr/local/mysql/man //添加此行
11)啓動mysqld服務
[root@node2 ~]# service mysqld start
8)建立wpdb庫,受權wpuser用戶鏈接
[root@node3 ~]# mysql MariaDB [(none)]> USE mysql; MariaDB [mysql]> DELETE FROM mysql.user WHERE User=''; MariaDB [mysql]> DELETE FROM mysql.user WHERE Host='node3'; MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123qwe!@#'; MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123qwe!@#'; MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'::1' IDENTIFIED BY '123qwe!@#'; MariaDB [(none)]> CREATE SCHEMA wpdb; MariaDB [(none)]> GRANT ALL PRIVILEGES ON wpdb.* TO 'wpuser'@'172.16.%.%' IDENTIFIED BY 'wppasswd'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY '123qwe!@#'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [mysql]> SELECT Host,User,Password FROM user; +------------+--------+-------------------------------------------+ | Host | User | Password | +------------+--------+-------------------------------------------+ | localhost | root | *A47CB5FB12B47CBF12AB43B7EC865013906E10BD | | 127.0.0.1 | root | *A47CB5FB12B47CBF12AB43B7EC865013906E10BD | | ::1 | root | *A47CB5FB12B47CBF12AB43B7EC865013906E10BD | | 172.16.%.% | wpuser | *7CD61EFBFDDDBD978EA9017F2A26A59DE4589025 | | 172.16.%.% | root | *A47CB5FB12B47CBF12AB43B7EC865013906E10BD | +------------+--------+-------------------------------------------+
重啓httpd24服務,添加本地hosts文件解析,打開瀏覽器添訪問網站(配置好php-fpm後須要重啓一下httpd服務):
[root@node1 ~]# service httpd24 restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
客戶端使用ab命令對服務器進行壓力測試:
[root@client ~]# ab -c 100 -n 1000 http://www.pma.com/index.php
ON php(172.16.17.72):爲php服務器編譯安裝xcache
1)解壓xcache源碼包至/usr/local下
[root@node2 xcache]# tar xf xcache-3.2.0.tar.bz2 -C /usr/local/ [root@node2 xcache]# mv /usr/local/xcache-3.2.0/ /usr/local/xcache
2)生成configure腳本
[root@node2 xcache]# /usr/local/php/bin/phpize
3)執行編譯安裝
[root@node2 xcache]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
4)複製xcache的ini文件至/etc/php.d目錄下
[root@node2 xcache]# cp xcache.ini /etc/php.d/
5)創建php測試頁面
[root@node2 ~]# vim /web/pma/htdocs/test.php <?php phpinfo(); ?>
6)重啓php-fpm服務
[root@node2 xcache]# service php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done
再次在客戶端使用ab命令對服務器進行壓力測試:
[root@client ~]# ab -c 100 -n 1000 http://www.pma.com/index.php
On http(172.16.17.61):切換mpm爲event機制:
[root@node1 ~]# vim /etc/httpd24/httpd.conf Include /etc/httpd24/extra/httpd-mpm.conf #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule mpm_event_module modules/mod_mpm_event.so //註釋prefork模塊,配置event模塊 [root@node1 ~]# service httpd24 restart [root@node1 ~]# httpd -M | grep mpm mpm_event_module (shared)