您好,登錄后才能下訂單哦!
主機(jī) | ip地址 | 操作系統(tǒng) |
---|---|---|
nginx | 172.16.1.100 | CentOS 7.3 |
php+memcache | 172.16.1.110 | CentOS 7.3 |
Mysql | 172.16.1.120 | CentOS 7.3 |
memcached | 172.16.1.130 | CentOS 7.3 |
1,安裝nginx
1)安裝依賴工具包:
[root@nginx-server ~]# yum -y install gcc* pcre-devel openssl-devel zlib-devel make vim
2)創(chuàng)建nginx用戶組和用戶:
[root@nginx-server ~]# groupadd -r nginx && useradd -r -g nginx -s /bin/false -M nginx
3)解壓源碼包,配置&&編譯安裝:
[root@nginx-server ~]# tar zxf nginx-1.8.0.tar.gz
[root@nginx-server ~]# cd nginx-1.8.0
[root@nginx-server nginx-1.8.0]# ./configure --help ##可以查看自己需要的模塊 --with,或取消的模塊–without
#根據(jù)自己的需求添加不同的模塊
[root@nginx-server nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
> --with-http_stub_status_module --with-http_ssl_module --with-http_dav_module --with-http_flv_module \
> --with-http_mp4_module --with-http_gzip_static_module --with-http_gzip_static_module \
> --with-http_addition_module --with-http_sub_module --with-pcre
[root@nginx-server nginx-1.8.0]# make && make install
#優(yōu)化路徑并檢查:
[root@nginx-server nginx-1.8.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx-server nginx-1.8.0]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#啟動服務(wù):
[root@nginx-server nginx-1.8.0]# nginx
[root@nginx-server nginx-1.8.0]# netstat -anput | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21416/nginx: master
#開啟防火墻的80端口:
[root@nginx-server nginx-1.8.0]# firewall-cmd --add-port=80/tcp --permanent
success
[root@nginx-server nginx-1.8.0]# firewall-cmd --reload
success
2,安裝php
1)安裝依賴工具包:
[root@php-server ~]# yum -y install gcc* pcre-devel openssl-devel zlib-devel libxml2-devel libcurl-devel bzip2-devel make vim
2)安裝php的加密擴(kuò)展模塊libmcrypt
[root@php-server ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@php-server ~]# cd libmcrypt-2.5.7
[root@php-server libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
3)安裝php:
[root@php-server ~]# tar zxf php-5.6.27.tar.gz
[root@php-server ~]# cd php-5.6.27
[root@php-server php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd \
> --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets \
> --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir \
> --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt \
> --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
配置參數(shù)解釋:
--prefix=/usr/local/php7.2 #指定php的安裝路徑
mysqlnd(mysql native driver)#php源碼提供的mysql驅(qū)動連接代碼
--with-mysql=mysqlnd #支持mysql
--with-pdo-mysql=mysqlnd #支持pdo模塊,php執(zhí)行命令通過pdo語法來連接后端的數(shù)據(jù)庫
--with-mysqli=mysqlnd #執(zhí)行l(wèi)ibmysql模塊,也叫mysql的增強(qiáng)模塊
--with-openssl #支持ssl
--enable-fpm #開啟php的進(jìn)程管理器
--enable-sockets #開啟socket支持,socket本職位編程接口(API)
--enable-sysvshm #開啟系統(tǒng)共享內(nèi)存支持
--enable-mbstring #支持多字節(jié)字符串,如中文就是多字節(jié)字符串,一個漢字代表2個字節(jié)
--with-freetype-dir #支持freetype(字體引擎),需要借助freetype-devel,字體解析工具
--with-jpeg-dir #支持jepg和png圖片,php在解析的過程會生成一些圖像
--with-png-dir
--with-zlib #數(shù)據(jù)壓縮用的函數(shù)庫
--with-libxml-dir=/usr #打開libxml2庫支持的xml文件
--enable-xml #開啟xml文件傳輸
--with-mhash #支持mhash,mhash可用于創(chuàng)建校驗數(shù)值,消息摘要,消息認(rèn)證碼,以及無需要原文等待關(guān)鍵信息保存(如密碼)等
-with-mcrypt=/usr/local/libmcrypt #php中加密支持?jǐn)U展庫
--with-config-file-path=/etc #配置文件路徑
--with-config-file-scan-dir=/etc/php.d #配置文件掃描路徑
--with-bz2 #支持bzip2壓縮
--enable-maintainer-zts #支持php多線程擴(kuò)展
注意:在php7版本中,已經(jīng)不支持的某些參數(shù)選項,比如上面–with-mcrypt和--with-mysql參數(shù)已經(jīng)在7版本中廢除了,如果用的是7版本,在配置時需要將上面兩個編譯選項刪除就可以了。
#編譯安裝
[root@php-server php-5.6.27]# make && make install
#提供php配置文件:
[root@php-server php-5.6.27]# cp php.ini-production /etc/php.ini
#創(chuàng)建php-fpm服務(wù)啟動腳本:
[root@php-server php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@php-server php-5.6.27]# chmod +x /etc/init.d/php-fpm
#加入開機(jī)自啟
[root@php-server php-5.6.27]# chkconfig --add php-fpm
[root@php-server php-5.6.27]# chkconfig php-fpm on
#提供php-fpm配置文件并進(jìn)行簡單優(yōu)化:
[root@php-server php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php-server ~]# vim /usr/local/php5.6/etc/php-fpm.conf
修改內(nèi)容如下:
pid = run/php-fpm.pid #pid文件的位置
listen = 172.16.1.110:9000 #本機(jī)ip地址:端口
pm.max_children = 300 #php創(chuàng)建的最大子進(jìn)程
pm.start_servers = 10 #啟動時的子進(jìn)程數(shù)量
pm.min_spare_servers = 10 #最小空閑子進(jìn)程
pm.max_spare_servers =50 #最大空閑子進(jìn)程
#啟動php服務(wù):
[root@php-server ~]# /etc/init.d/php-fpm start
Starting php-fpm done
[root@php-server ~]# netstat -anput | grep 9000
tcp 0 0 172.16.1.110:9000 0.0.0.0:* LISTEN 3220/php-fpm: maste
#開啟防火墻的9000端口:
[root@php-server ~]# firewall-cmd --add-port=9000/tcp --permanent
success
[root@php-server ~]# firewall-cmd --reload
success
3,配置nginx與php動態(tài)解析
#配置nginx配置文件:
[root@nginx-server ~]# vim /usr/local/nginx/conf/nginx.conf
43 location / {
44 root html;
45 index index.html index.htm index.php #添加.php頁面解析;
46 }
65 location ~ \.php$ { #表示匹配到php文件就進(jìn)行fastcgi操作
66 root /usr/local/nginx/html; #用戶請求的網(wǎng)頁根目錄
67 fastcgi_pass 172.16.1.110:9000; #指定解析php的ip地址+端口
68 fastcgi_index index.php; #默認(rèn)代理的.php動態(tài)頁面
69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #php解析的根目錄
70 include fastcgi_params;
71 }
最后重啟nginx服務(wù)使其生效。
#在php服務(wù)器上創(chuàng)建測試php測試文件:
[root@php-server ~]# mkdir -p /usr/local/nginx/html
[root@php-server ~]# cat /usr/local/nginx/html/test.php
<?php
phpinfo();
?>
#測試訪問:
4,安裝mysql
由于源碼安裝mysql過程太長,所以采用二進(jìn)制進(jìn)行安裝。
#編寫mysql一鍵安裝腳本(并修改root密碼):
[root@mysql-server ~]# cat mysql5.7.sh
#!/bin/bash
rpm -qa | grep mariadb &> /dev/null
if [ $? -eq 0 ]
then
rpm -e mariadb-libs --nodeps
fi
tar zxf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql
ln -s /usr/local/mysql/bin/* /usr/local/bin
groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql
mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/data/mysqld.pid
log-error=/usr/local/mysql/data/mysql.err
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
EOF
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql
cd /usr/local/mysql/
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
mypwd=`grep password /usr/local/mysql/data/mysql.err | awk -F'root@localhost: ' '{print $2}'`
mysql -uroot -p${mypwd} -e 'alter user root@localhost identified by"123.com"' --connect-expired-password
#執(zhí)行腳本進(jìn)行安裝,并查看驗證mysql登錄:
注:確保源碼包和腳本在當(dāng)前/root目錄下。
[root@mysql-server ~]# sh mysql5.7.sh
Starting MySQL.. SUCCESS!
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@mysql-server ~]# netstat -anput | grep mysqld
tcp6 0 0 :::3306 :::* LISTEN 15762/mysqld
#開啟防火墻的3306端口:
[root@mysql-server ~]# firewall-cmd --add-port=3306/tcp --permanent
success
[root@mysql-server ~]# firewall-cmd --reload
success
memcached 是基于 libevent 的事件處理。 libevent 是個程序庫,它將 Linux 的 epoll、 BSD 類操作系統(tǒng)的 kqueue 等事件處理功能封裝成統(tǒng)一的接口。memcached 使用這個 libevent 庫,因此能在 Linux、 BSD、 Solaris 等操作系統(tǒng)上發(fā)揮其高性能。
1)首先安裝memcached依賴庫libevent:
[root@memcached ~]# tar zxf libevent-2.0.22-stable.tar.gz
[root@memcached ~]# cd libevent-2.0.22-stable
[root@memcached libevent-2.0.22-stable]# ./configure && make && make install
2)安裝memcached:
[root@memcached ~]# tar zxf memcached-1.4.33.tar.gz
[root@memcached ~]# cd memcached-1.4.33
[root@memcached memcached-1.4.33]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local && make && make install
#配置環(huán)境變量:
[root@memcached ~]# vim ~/.bash_profile
添加:
MEMCACHED_HOME=/usr/local/memcached
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib
[root@memcached ~]# source ~/.bash_profile
3)啟動memcached:
[root@memcached ~]# ln -s /usr/local/memcached/bin/memcached /usr/local/sbin/
[root@memcached ~]# memcached -d -m 2048 -l 172.16.1.130 -p 11211 -u root -c 102400 -P /usr/local/memcached/memcached.pid
啟動參數(shù)說明:
-d 選項是啟動一個守護(hù)進(jìn)程
-m 分配給memcached使用的內(nèi)存數(shù)量,單位是MB,默認(rèn)是64MB
-l 監(jiān)聽的ip地址。(默認(rèn):INADDR_ANY,所有地址)
-p 設(shè)置memcache的TCP監(jiān)聽端口,最好是1024以上的端口
-u 運(yùn)行memcache的用戶,如果當(dāng)前為root的話,需要使用此參數(shù)指定用戶
-c 選項是最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024
-P 設(shè)置保存memcache的pid文件
-h 顯示幫助
[root@memcached ~]# netstat -anput | grep memcached
tcp 0 0 172.16.1.130:11211 0.0.0.0:* LISTEN 22916/memcached
#設(shè)置防火墻:
[root@memcached ~]# firewall-cmd --add-port=11211/tcp --permanent
success
[root@memcached ~]# firewall-cmd --reload
success
memcach分為服務(wù)端和客戶端。服務(wù)端用來存放緩存,客戶端用來操作緩存。
1)安裝memcache擴(kuò)展庫:
[root@php-server ~]# tar zxf memcache-3.0.8.tgz
[root@php-server ~]# cd memcache-3.0.8
[root@php-server memcache-3.0.8]# /usr/local/php5.6/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
#根據(jù)上面的報錯提示安裝autoconf依賴包:
[root@php-server memcache-3.0.8]# yum -y install autoconf
#配置成功
[root@php-server memcache-3.0.8]# /usr/local/php5.6/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@php-server memcache-3.0.8]# ./configure --enable-memcache --with-php-config=/usr/local/php5.6/bin/php-config
[root@php-server memcache-3.0.8]# make && make install
#安裝成功后,會有這樣的提示:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/
#安裝成功,最后會顯示memcache.so存放的路徑。
#修改php.ini文件:
[root@php-server memcache-3.0.8]# vi /etc/php.ini
添加一行:
extension=/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/memcache.so
#重啟php服務(wù)并重新訪問php頁面:
[root@php-server ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
#在php上創(chuàng)建測試代碼,測試memcache客戶端是否與服務(wù)端互相通信
[root@php-server ~]# cat /usr/local/nginx/html/test2.php
<?php
$memcache = new Memcache;
$memcache->connect('172.16.1.130', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."<br/>";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)<br/>";
$get_result = $memcache->get('key');
echo "Data from the cache:<br/>";
var_dump($get_result);
?>
#瀏覽器訪問test2.php:
能夠相互解析,memcache部署完畢。
#配置php.ini文件中的session共享:
[root@php-server ~]# vim /etc/php.ini
session.save_handler = memcache #設(shè)置存儲數(shù)據(jù)方式以memcache方式存儲(默認(rèn)是以文件方式存儲)
#設(shè)置存儲路徑,通過tcp協(xié)議存儲在memcache服務(wù)端上,多臺memcache用逗號隔開
session.save_path = "tcp://172.16.1.130:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
參數(shù)解釋:
persistent:持久連接數(shù)量
timeout=1:超時時間1秒鐘
retry_interval=15:15秒檢查一次memcached服務(wù)器
#重啟php
[root@php-server ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
#測試memcache可用性:
編輯測試頁面:
[root@php-server ~]# cat /usr/local/nginx/html/memcache.php
<?php
session_start();
if (!isset($_SESSION['session_time']))
{
$_SESSION['session_time'] = time();
}
echo "session_time:".$_SESSION['session_time']."<br />";
echo "now_time:".time()."<br />";
echo "session_id:".session_id()."<br />";
?>
#瀏覽器訪問測試頁面,可查看session_time是否都是為memcache中的Session,同時可以在不同的服務(wù)器上修改不同的標(biāo)識查看是否為不同服務(wù)器上的(memcache集群)。
可以直接使用sessionid去memcached里查詢一下:
[root@php-server ~]# yum -y install telnet
[root@php-server ~]# telnet 172.16.1.130 11211
Trying 172.16.1.130...
Connected to 172.16.1.130.
Escape character is '^]'.
get eg7rqdegogu0196brj7d973f95 #通過get獲得該session_id的信息
VALUE eg7rqdegogu0196brj7d973f95 0 26
session_time|i:1583519270;
END
#輸入quit退出
得到的session_time和在memcache客戶端的session_time是一致的,說明session正常工作。
#默認(rèn)memcache會監(jiān)聽11211端口,如果想清空服務(wù)器上memcache的緩存,一般使用flush_all命令,操作如下:
[root@php-server ~]# telnet 172.16.1.130 11211
Trying 172.16.1.130...
Connected to 172.16.1.130.
Escape character is '^]'.
flush_all
OK
注意:使用flush_all后并不是刪除memcace上的key而是置為過期memcache安全配置。
1,在數(shù)據(jù)庫中創(chuàng)建測試數(shù)據(jù):
[root@mysql-server ~]# mysql -uroot -p123.com #在本地登錄mysql
#創(chuàng)建用戶并授權(quán)(只給予連接和查詢的權(quán)限):
mysql> grant Usage,Select on *.* to test@'172.16.1.%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#創(chuàng)建庫:
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
#創(chuàng)建表:
mysql> create table testdb.testtb (id int primary key auto_increment,
-> name varchar(20) default null)
-> engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.28 sec)
#插入數(shù)據(jù):
mysql> insert into testdb.testtb(name) values('tom1'),('tom2'),('tom3'),('tom4'),('tom5');
Query OK, 5 rows affected (0.02 sec)
Records: 5 Duplicates: 0 Warnings: 0
2,緩存測試
1)首先測試php能否與mysql溝通
[root@php-server ~]# cat /usr/local/nginx/html/mysql.php
<?php
$link=mysql_connect('172.16.1.120','test','123.com');
if ($link)echo "connection mysql success......";
mysql_close();
?>
#瀏覽器測試訪問:
2) 測試memcache是否緩存數(shù)據(jù)庫的數(shù)據(jù)
#編寫測試腳本,內(nèi)容如下:
[root@php-server html]# cat test_db.php
<?php
$memcachehost = '172.16.1.130';
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
$query="select * from testtb limit 10";
$key=md5($query);
if(!$memcache->get($key))
{
$conn=mysql_connect("172.16.1.120","test","123.com");
mysql_select_db(testdb);
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result))
{
$arr[]=$row;
}
$f = 'mysql';
$memcache->add($key,serialize($arr),0,30);
$data = $arr ;
}
else{
$f = 'memcache';
$data_mem=$memcache->get($key);
$data = unserialize($data_mem);
}
echo $f;
echo "<br>";
echo "$key";
echo "<br>";
//print_r($data);
foreach($data as $a)
{
echo "number is <b><font color=#FF0000>$a[id]</font></b>";
echo "<br>";
echo "name is <b><font color=#FF0000>$a[name]</font></b>";
echo "<br>";
}
?>
訪問頁面測試
#第一次訪問:
顯示的是mysql表示memcached中沒有內(nèi)容,需要memcached從數(shù)據(jù)中取得。
#第二次訪問:(刷新頁面)
顯示的是memcache標(biāo)志,表示這次的數(shù)據(jù)是從memcached中取得的。
注意:memcached有個緩存時間默認(rèn)是1分鐘,過了一分鐘后,memcached需要重新從數(shù)據(jù)庫中取得數(shù)據(jù)。
#查看memcached緩存情況:
#使用telnet命令查看:
[root@php-server ~]# telnet 172.16.1.130 11211
Trying 172.16.1.130...
Connected to 172.16.1.130.
Escape character is '^]'.
stats #輸入命令stats
STAT pid 22916 //memcached 進(jìn)程的id
STAT uptime 9530 //進(jìn)程運(yùn)行時間
STAT time 1583492752 //當(dāng)前時間
STAT version 1.4.33 //memcached版本
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 0.758872
STAT rusage_system 1.264787
STAT curr_connections 6
STAT total_connections 19
STAT connection_structures 7
STAT reserved_fds 20
STAT cmd_get 16 //總共獲取數(shù)據(jù)的次數(shù)(等于get_hits+get_misses)
STAT cmd_set 7 //總共設(shè)置數(shù)據(jù)的次數(shù)
STAT cmd_flush 1
STAT cmd_touch 0
STAT get_hits 12 //命中了多少次數(shù)據(jù)(也就是從memcached緩存中成功獲取數(shù)據(jù)的次數(shù)),命中率= get_hits/ cmd_get
STAT get_misses 4 //沒有命中的次數(shù)
STAT get_expired 2
STAT get_flushed 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 1
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 1864
STAT bytes_written 3392
STAT limit_maxbytes 2147483648 //總的存儲大小,默認(rèn)為為64M
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT log_worker_dropped 0
STAT log_worker_written 0
STAT log_watcher_skipped 0
STAT log_watcher_sent 0
STAT bytes 702 //當(dāng)前所用存儲大小
STAT curr_items 4
STAT total_items 7
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
安裝包已上傳至百度網(wǎng)盤:鏈接:https://pan.baidu.com/s/1QcGj2Lj5hSZdxw_MuKTBoA
提取碼:sph4
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。