您好,登錄后才能下訂單哦!
主機 | ip地址 | 操作系統 |
---|---|---|
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)創建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
#根據自己的需求添加不同的模塊
[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
#優化路徑并檢查:
[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
#啟動服務:
[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的加密擴展模塊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
配置參數解釋:
--prefix=/usr/local/php7.2 #指定php的安裝路徑
mysqlnd(mysql native driver)#php源碼提供的mysql驅動連接代碼
--with-mysql=mysqlnd #支持mysql
--with-pdo-mysql=mysqlnd #支持pdo模塊,php執行命令通過pdo語法來連接后端的數據庫
--with-mysqli=mysqlnd #執行libmysql模塊,也叫mysql的增強模塊
--with-openssl #支持ssl
--enable-fpm #開啟php的進程管理器
--enable-sockets #開啟socket支持,socket本職位編程接口(API)
--enable-sysvshm #開啟系統共享內存支持
--enable-mbstring #支持多字節字符串,如中文就是多字節字符串,一個漢字代表2個字節
--with-freetype-dir #支持freetype(字體引擎),需要借助freetype-devel,字體解析工具
--with-jpeg-dir #支持jepg和png圖片,php在解析的過程會生成一些圖像
--with-png-dir
--with-zlib #數據壓縮用的函數庫
--with-libxml-dir=/usr #打開libxml2庫支持的xml文件
--enable-xml #開啟xml文件傳輸
--with-mhash #支持mhash,mhash可用于創建校驗數值,消息摘要,消息認證碼,以及無需要原文等待關鍵信息保存(如密碼)等
-with-mcrypt=/usr/local/libmcrypt #php中加密支持擴展庫
--with-config-file-path=/etc #配置文件路徑
--with-config-file-scan-dir=/etc/php.d #配置文件掃描路徑
--with-bz2 #支持bzip2壓縮
--enable-maintainer-zts #支持php多線程擴展
注意:在php7版本中,已經不支持的某些參數選項,比如上面–with-mcrypt和--with-mysql參數已經在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
#創建php-fpm服務啟動腳本:
[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
#加入開機自啟
[root@php-server php-5.6.27]# chkconfig --add php-fpm
[root@php-server php-5.6.27]# chkconfig php-fpm on
#提供php-fpm配置文件并進行簡單優化:
[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
修改內容如下:
pid = run/php-fpm.pid #pid文件的位置
listen = 172.16.1.110:9000 #本機ip地址:端口
pm.max_children = 300 #php創建的最大子進程
pm.start_servers = 10 #啟動時的子進程數量
pm.min_spare_servers = 10 #最小空閑子進程
pm.max_spare_servers =50 #最大空閑子進程
#啟動php服務:
[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動態解析
#配置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文件就進行fastcgi操作
66 root /usr/local/nginx/html; #用戶請求的網頁根目錄
67 fastcgi_pass 172.16.1.110:9000; #指定解析php的ip地址+端口
68 fastcgi_index index.php; #默認代理的.php動態頁面
69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #php解析的根目錄
70 include fastcgi_params;
71 }
最后重啟nginx服務使其生效。
#在php服務器上創建測試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過程太長,所以采用二進制進行安裝。
#編寫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
#執行腳本進行安裝,并查看驗證mysql登錄:
注:確保源碼包和腳本在當前/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 類操作系統的 kqueue 等事件處理功能封裝成統一的接口。memcached 使用這個 libevent 庫,因此能在 Linux、 BSD、 Solaris 等操作系統上發揮其高性能。
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
#配置環境變量:
[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
啟動參數說明:
-d 選項是啟動一個守護進程
-m 分配給memcached使用的內存數量,單位是MB,默認是64MB
-l 監聽的ip地址。(默認:INADDR_ANY,所有地址)
-p 設置memcache的TCP監聽端口,最好是1024以上的端口
-u 運行memcache的用戶,如果當前為root的話,需要使用此參數指定用戶
-c 選項是最大運行的并發連接數,默認是1024
-P 設置保存memcache的pid文件
-h 顯示幫助
[root@memcached ~]# netstat -anput | grep memcached
tcp 0 0 172.16.1.130:11211 0.0.0.0:* LISTEN 22916/memcached
#設置防火墻:
[root@memcached ~]# firewall-cmd --add-port=11211/tcp --permanent
success
[root@memcached ~]# firewall-cmd --reload
success
memcach分為服務端和客戶端。服務端用來存放緩存,客戶端用來操作緩存。
1)安裝memcache擴展庫:
[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.
#根據上面的報錯提示安裝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服務并重新訪問php頁面:
[root@php-server ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
#在php上創建測試代碼,測試memcache客戶端是否與服務端互相通信
[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 #設置存儲數據方式以memcache方式存儲(默認是以文件方式存儲)
#設置存儲路徑,通過tcp協議存儲在memcache服務端上,多臺memcache用逗號隔開
session.save_path = "tcp://172.16.1.130:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
參數解釋:
persistent:持久連接數量
timeout=1:超時時間1秒鐘
retry_interval=15:15秒檢查一次memcached服務器
#重啟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,同時可以在不同的服務器上修改不同的標識查看是否為不同服務器上的(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正常工作。
#默認memcache會監聽11211端口,如果想清空服務器上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,在數據庫中創建測試數據:
[root@mysql-server ~]# mysql -uroot -p123.com #在本地登錄mysql
#創建用戶并授權(只給予連接和查詢的權限):
mysql> grant Usage,Select on *.* to test@'172.16.1.%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#創建庫:
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
#創建表:
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)
#插入數據:
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是否緩存數據庫的數據
#編寫測試腳本,內容如下:
[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中沒有內容,需要memcached從數據中取得。
#第二次訪問:(刷新頁面)
顯示的是memcache標志,表示這次的數據是從memcached中取得的。
注意:memcached有個緩存時間默認是1分鐘,過了一分鐘后,memcached需要重新從數據庫中取得數據。
#查看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 進程的id
STAT uptime 9530 //進程運行時間
STAT time 1583492752 //當前時間
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 //總共獲取數據的次數(等于get_hits+get_misses)
STAT cmd_set 7 //總共設置數據的次數
STAT cmd_flush 1
STAT cmd_touch 0
STAT get_hits 12 //命中了多少次數據(也就是從memcached緩存中成功獲取數據的次數),命中率= get_hits/ cmd_get
STAT get_misses 4 //沒有命中的次數
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 //總的存儲大小,默認為為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 //當前所用存儲大小
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
安裝包已上傳至百度網盤:鏈接:https://pan.baidu.com/s/1QcGj2Lj5hSZdxw_MuKTBoA
提取碼:sph4
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。