memcached Memcached多用於作為資料庫的前端cache使用,從而減少資料庫的負載。Memcached是一種記憶體緩存,用於存儲鍵值對。 工作流程: (1) 檢查客戶端請求的數據是否在Memcached中,如果在,把請求的數據返回給客戶端。 (2) 客戶端請求的數據不在Memcached ...
memcached
Memcached多用於作為資料庫的前端cache使用,從而減少資料庫的負載。Memcached是一種記憶體緩存,用於存儲鍵值對。
工作流程:
(1) 檢查客戶端請求的數據是否在Memcached中,如果在,把請求的數據返回給客戶端。
(2) 客戶端請求的數據不在Memcached中,就去查詢後端資料庫,把從後端資料庫取得的數據返回給客戶端,同時在 Memcached中備份一份。
(3) Memcached中的數據要和後端資料庫中的數據保持一致。
(4) Memcached根據過期策略和LRU策略來清理記憶體空間。
1. memcached安裝
- 安裝libevent
[root@chunlin Memcached]# tar -zxf libevent-2.1.8-stable.tar.gz
[root@chunlin Memcached]# cd libevent-2.1.8-stable
[root@chunlin libevent-2.1.8-stable]# mkdir /usr/local/libevent
[root@chunlin libevent-2.1.8-stable]# ./configure \
--prefix=/usr/local/libevent
[root@chunlin libevent-2.1.8-stable]# make
[root@chunlin libevent-2.1.8-stable]# make install
- 安裝memcached
[root@chunlin Memcached]# tar -zxf memcached-1.4.36.tar.gz
[root@chunlin Memcached]# cd memcached-1.4.36
[root@chunlin memcached-1.4.36]# mkdir /usr/local/memcached
[root@chunlin memcached-1.4.36]# ./configure \
--prefix=/usr/local/memcached
--with-libevent=/usr/local/libevent
[root@chunlin memcached-1.4.36]# make
[root@chunlin memcached-1.4.36]# make install
2. Mmecached的PHP 擴展
- php的json擴展
php7中json的擴展包為jsond
[root@chunlin Memcached]# tar -zxf jsond-1.4.0.tgz
[root@chunlin Memcached]# cd jsond-1.4.0
[root@chunlin jsond-1.4.0]# /usr/local/php/bin/phpize \
--with-php-config=/usr/local/php/bin/php-config
#phpize命令用來生成configure腳本文件,這個命令一般在php安裝目錄的bin目錄下
[root@chunlin jsond-1.4.0]# ./configure \
--with-php-config=/usr/local/php/bin/php-config
[root@chunlin jsond-1.4.0]# make
[root@chunlin jsond-1.4.0]# make test
[root@chunlin jsond-1.4.0]# make install
遇到的問題:
解決:
[root@chunlin jsond-1.4.0]# yum install -y autoconf.noarch
- php支持igbinary
下載igbinary
[root@chunlin Memcached]# tar -zxf igbinary-2.0.1.tgz
[root@chunlin Memcached]# cd igbinary-2.0.1
[root@chunlin igbinary-2.0.1]# /usr/local/php/bin/phpize \
--with-php-config=/usr/local/php/bin/php-config
[root@chunlin igbinary-2.0.1]# ./configure \
--with-php-config=/usr/local/php/bin/php-config \
--enable-igbinary
[root@chunlin igbinary-2.0.1]# make
[root@chunlin igbinary-2.0.1]# make test
[root@chunlin igbinary-2.0.1]# make install
- php支持msgpack
下載msgpack
[root@chunlin Memcached]# tar -zxf msgpack-2.0.2.tgz
[root@chunlin Memcached]# cd msgpack-2.0.2
[root@chunlin msgpack-2.0.2]# /usr/local/php/bin/phpize
[root@chunlin msgpack-2.0.2]# ./configure \
--with-php-config=/usr/local/php/bin/php-config
[root@chunlin msgpack-2.0.2]# make
[root@chunlin msgpack-2.0.2]# make test
[root@chunlin msgpack-2.0.2]# make install
- memcached的php擴展
下載memcached的php擴展包memcached
[root@chunlin Memcached]# tar -zxf memcached-3.0.2.tgz
[root@chunlin Memcached]# cd memcached-3.0.2
[root@chunlin memcached-3.0.2]# /usr/local/php/bin/phpize \
--with-php-config=/usr/local/php/bin/php-config
[root@chunlin memcached-3.0.2]# ./configure \
--with-php-config=/usr/local/php/bin/php-config \
--enable-memcached \
--with-libmemcached-dir=/usr/local/libmemcached \
--enable-memcached-igbinary \
--enable-memcached-json \
--enable-memcached-msgpack \
--disable-memcached-sasl
[root@chunlin memcached-3.0.2]# make
[root@chunlin memcached-3.0.2]# make test
[root@chunlin memcached-3.0.2]# make install
安裝完每個PHP拓展包,都會在類似/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303這樣的目錄下生成.so尾碼的文件
測試
Memcahced的測試需要用到nginx和php,nginx和php的安裝和配置詳見http://www.cnblogs.com/NewStudy/p/7271539.html[root@chunlin ~]# vim /etc/php.ini
#在文件最後添加對模塊的擴展
extension=igbinary.so
extension=msgpack.so
extension=jsond.so
extension=memcached.so
[root@chunlin ~]# /etc/init.d/php-fpm restart
#重啟FastCGI進程管理器
#然後重啟web伺服器
#瀏覽器中輸入http://IP/index.php
#index.php中的內容如下:;
瀏覽器顯示結果如下所示:
php頁面中使用memcached
[root@chunlin html]# vim memcached.php
<?php
$mem = new Memcached();
$mem-> addServer("127.0.0.1",11211);
$mem-> set("test","Memcached test");
echo $mem-> get('test');
?>
#瀏覽器中輸入http://IP/memcached.php出現Memcached test字樣表示PHP與memcached之間的介面能正常工作了
3. Nagios監控Memcached
1) 安裝check_memcached
軟體:perl-Config-Tiny、Nagios-Plugins-Memcached、epel源
環境:能執行perl程式的環境
[guest@host nagios]$ yum install -y perl-CPAN.noarch
[guest@host nagios]$ tar -zxf Nagios-Plugins-Memcached-0.02.tar.gz
[guest@host nagios]$ cd Nagios-Plugins-Memcached-0.02/
[guest@host Nagios-Plugins-Memcached-0.02]$ perl Makefile.PL
[guest@host Nagios-Plugins-Memcached-0.02]$ make
[guest@host Nagios-Plugins-Memcached-0.02]$ make install
安裝完之後,我在我的/usr/local/bin目錄下發現了check_memcached腳本,以為這樣安裝就算大功告成了,然而結果並不是這樣,執行腳本時報錯了
[root@host bin]# ./check_memcached --help
解決辦法:
[root@host perl]# rpm -ivh perl-Config-Tiny-2.14-7.el7.noarch.rpm
[guest@host bin]$ yum install -y perl-Nagios-Plugin.noarch
2) 配置memcached監控
[guest@host bin]$ cp check_memcached /usr/local/nagios/libexec/
[guest@host libexec]$ chmod 755 check_memcached
[guest@host libexec]$ cd /usr/local/nagios/etc/objects/
[guest@host objects]$ vim commands.cfg
define command{
command_name check_memcached_time
command_line $USER1$/check_memcached -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
}
define command{
command_name check_memcached_size
command_line $USER1$/check_memcached -H $HOSTADDRESS$ --size-warning $ARG1$ --size-critical $ARG2$
}
define command{
command_name check_memcached_hit
command_line $USER1$/check_memcached -H $HOSTADDRESS$ --hit-warning $ARG1$ --hit-critical $ARG2$
}
以上三個命令的定義依次為:
check_memcached_time:對時間的定義,單位為毫秒
check_memcached_size:對記憶體使用情況的定義,以百分比為單位
check_memcached_hit:對hit值的定義,以百分比為單位
[root@host objects]# vim services.cfg
define service{
use local-service,services-pnp ; Name of service template to use
host_name chunlin
service_description Memcached_time
check_command check_memcached_time!200!500
notifications_enabled 0
}
define service{
use local-service,services-pnp ; Name of service template to use
host_name chunlin
service_description Memcached_size
check_command check_memcached_size!80!90
notifications_enabled 0
}
define service{
use local-service,services-pnp ; Name of service template to use
host_name chunlin
service_description Memcached_hit
check_command check_memcached_hit!90!80
notifications_enabled 0
}
[root@host objects]# nagios -v /usr/local/nagios/etc/nagios.cfg
[root@host objects]# systemctl restart nagios.service