LAMP+Memcached高性能緩存服務

Memcached簡介

Memcached是高性能的分佈式內存緩存服務器,經過在內存裏維護一個統一的巨大的hash表,它可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等, 由國外社區網站 LiveJournal 的開發團隊開發。通常的使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、提升可擴展性。
官方網站:http://www.danga.com/memcached/php

經常使用典型架構以下:

LAMP+Memcached高性能緩存服務

當Web客戶端發送請求到web服務器的應用程序時,應用程序會經過調用Memcached API客戶端程序庫接口去鏈接 Memcached服務器,進而查詢數據。
一、若是此時web客戶端所請求的數據已經在 Memcached服務端中緩存,則 Memcached服務端會將數據返回給Web客戶端;
二、若是數據不存在,則會將Web客戶端請求發送至MySQL數據庫,由數據庫將請求的數據返回給 Memcached以及Web客戶端,與此同時Memcached服務器也會將數據進行保存,方便用戶下次使用。html

Memcached特色

協議簡單

memcached的服務器客戶端通訊並不使用複雜的XML等格式, 而使用簡單的基於文本行的協議。所以,經過telnet 也能在memcached上保存數據、取得數據。下面是例子。
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 0 0 3 (保存命令)
bar (數據)
STORED (結果)
get foo (取得命令)
VALUE foo 0 3 (數據)mysql

基於libevent的事件處理

libevent是個程序庫,它將Linux的epoll、BSD類操做系統的kqueue等事件處理功能 封裝成統一的接口。即便對服務器的鏈接數增長,也能發揮O(1)的性能。 memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。c++

內置內存存儲方式

爲了提升性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。 因爲數據僅存在於內存中,所以重啓memcached、重啓操做系統會致使所有數據消失。 另外,內容容量達到指定值以後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。 memcached自己是爲緩存而設計的服務器,所以並無過多考慮數據的永久性問題。 web

數據存儲方式:Slab Allocation
LAMP+Memcached高性能緩存服務算法

Slab Allocation即按組分配內存,每次先分配一個slab,至關於一個大小爲1MB的頁,而後在1MB的空間里根據數據劃分大小相同的chunk,該方法能夠有效解決內存碎片問題,但可能會對空間有所浪費。sql

memcached不互相通訊的分佈式

memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。 各個memcached不會互相通訊以共享信息。數據庫

Memcached緩存機制和分佈式

緩存機制:
LAMP+Memcached高性能緩存服務apache

Memcached是一款很是出色的緩存軟件,當程序寫入緩存數據請求時, Memcached的API接口將Key輸入路
由算法模塊路由到集羣中一臺服務器,以後由API接口與服務器進行通訊,完成一次分佈式緩存寫入。vim

分佈式
LAMP+Memcached高性能緩存服務

Memcached分佈式部署主要依賴於 Memcached的客戶端來實現,多個 Memcached服務器是獨立的。分佈式數據如何存儲是由路由算法所決定的。當數據到達客戶端程序庫時,客戶端的算法就依據路由算法來決定保存的Memcached服務器。讀取數據時,客戶端依據保存數據時的路由算法選中和存儲數據時相同的服務器來讀取數據。

實驗環境

本實驗用2臺CentOS7:

主機 IP地址 角色 主要軟件包
Memcached 192.168.37.128 Memcached​ 服務器 libevent-2.1.8-stable.tar.gzmemcached-1.5.6.tar.gz
Memcached ​API 192.168.37.130 Memcached​ API客戶端 http-2.4.29.tar.gz;mysql-5.6.26.tar.gz;php-5.6.11.tar.bz2;memcache-2.2.7.tar.gz

實驗部署

1、memcached服務端

一、安裝編譯環境

yum install gcc gcc-c++ make

二、解壓安裝包

tar zxvf memcached-1.5.6.tar.gz -C /opt
tar zxvf libevent-2.1.8-stable.tar.gz -C /opt #libevent:事件通知庫

三、手工編譯安裝libevent、memcached

cd /opt/libevent-2.1.8-stable/
./configure --prefix=/usr/local/libevent
make && make install

cd /opt/memcached-1.5.6/
./configure \
--prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent/
make && make install

四、創建軟鏈接

ln -s /usr/local/memcached/bin/* /usr/local/bin

五、開啓memcached

systemctl stop firewalld.service
setenforce 0
memcached -d -m 32m -p 11211 -u root
#-d: 指定守護進程 -m:緩存大小 -p:端口 -u:指定管理用戶
netstat -ntap | grep memc

LAMP+Memcached高性能緩存服務

2、LAMP搭建

(一)Apache搭建
一、安裝環境包

yum install gcc gcc-c++ make pcre-devel expat-devel perl -y

二、解壓安裝包

tar xzvf http-2.4.29.tar.gz -C /opt
tar xzvf apr-1.4.6.tar.gz -C /opt #支持Apache上層應用跨平臺,提供底層接口庫
tar xzvf apr-util-1.4.1.tar.gz -C /opt
mv apr-1.6.2/ httpd-2.4.29/srclib/apr
mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util

三、手工編譯安裝

cd /opt/httpd-2.4.29
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

make && make install

四、編輯啓動腳本

grep -v "#" /usr/local/httpd/bin/apachectl > /etc/init.d/httpd     #過濾配置文件中註釋信息,拷貝到服務程序目錄下
vi /etc/init.d/httpd       #在文件最前面插入下面的行
#!/bin/sh
    # chkconfig:2345 85 21
    #description:Apache is a World Wide Web server.

chmod +x /etc/init.d/httpd
chkconfig --add httpd            **#將httpd加入系統服務**

五、優化服務,使系統識別命令

ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
ln -s /usr/local/httpd/bin/* /usr/local/bin

六、編輯httpd主配置文件

vim /usr/local/httpd/conf/httpd.conf     
  ServerName www.yun.com:80
  Listen 192.168.37.130:80

七、開啓httpd服務

systemctl stop firewalld.service
setenforce 0
apachectl -t #檢查語法
service httpd start

LAMP+Memcached高性能緩存服務

(二)Mysql搭建

一、安裝環境包

yum -y install ncurses-devel autoconf cmake

二、手工編譯安裝mysql

tar zxvf mysql-5.6.26.tar.gz -C /opt #解壓軟件包
cd /opt/mysql-5.6.26
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
make && make install

三、添加系統服務

cp support-files/mysql.server /etc/init.d/mysqld #添加系統服務
chmod 755 /etc/init.d/mysqld #修改執行權限
chkconfig --add /etc/init.d/mysqld #將mysqld添加爲系統服務
chkconfig mysqld --level 235 on #
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile #從新加載環境變量
useradd -s /sbin/nologin mysql #建立進程用戶mysql
chown -R mysql:mysql /usr/local/mysql/ #修改mysql的屬主、屬組

四、初始化數據庫

/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

五、創建軟鏈接

ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock

六、編輯配置文件

vi /etc/init.d/mysqld
    basedir=/usr/local/mysql
    datadir=/home/mysql

七、啓動mysql服務

service mysqld start
netstat -ntap | grep 3306

LAMP+Memcached高性能緩存服務

(三)php搭建

一、安裝環境包

yum -y install gd libpng pcre libxml2-devel libjpeg-devel libpng-devel fontconfig-devel openssl-devel bzip2-devel

二、手工編譯安裝php

tar xjvf php-5.6.11.tar.bz2 -C /opt
cd /opt/php-5.6.11
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring

make && make install

三、建立php配置文件

cp php.ini-development /usr/local/php5/php.ini

四、創建軟鏈接

ln -s /usr/local/php5/bin/ /usr/local/bin/
ln -s /usr/local/php5/sbin/
/usr/local/sbin

五、修改apache配置文件

vim /etc/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps #/etc/httpd.conf 查看是否有php5

LAMP+Memcached高性能緩存服務

DirectoryIndex index.php index.html

LAMP+Memcached高性能緩存服務
六、修改apache首頁測試php

<?php
phpinfo();
?>
mv index.html index.php      #與httpd配置文件中設置要相同

六、重啓httpd服務,測試

訪問:http://192.168.37.130/index.php

LAMP+Memcached高性能緩存服務

(四)測試數據庫

一、建立數據庫test

create database a

二、test數據庫給auser用戶受權

grant all on a.* to 'auser'@'%' identified by '123123'; #受權
flush privileges; #刷新權限

LAMP+Memcached高性能緩存服務
三、再次修改apache首頁訪問數據庫

vim /usr/local/httpd/htdocs/index.php     
<?php
$link=mysql_connect('192.168.37.130','auser','123123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>

四、重啓apache服務,測試數據庫鏈接
LAMP+Memcached高性能緩存服務

(五)安裝客戶端

一、安裝環境包
yum install autoconf -y
二、手工編譯安裝memcached

tar zxvf memcache-2.2.7.tar.gz -C /opt
cd /opt/memcache-2.2.7/       #注意:無configure

/usr/local/php5/bin/phpize   #增長爲PHP模板後再對memcache進行配置

./configure \
--enable-memcache \
--with-php-config=/usr/local/php5/bin/php-config

make && make install
/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/  #安裝完成後複製此行

LAMP+Memcached高性能緩存服務
三、爲PHP添加memcached組件

vim /usr/local/php5/php.ini
   extension_dir = "ext"  #此行下添加
   extension_dir ="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/"                       #複製內容添加到此處
   extension = memcache.so

LAMP+Memcached高性能緩存服務
四、修改apache首頁

vim /usr/local/httpd/htdocs/index.php
<?php
$memcache = new Memcache();
$memcache->connect('192.168.37.128',11211);
$memcache->set('key','Memcache test Successful!',0,60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>

五、重啓apache服務,測試
LAMP+Memcached高性能緩存服務

相關文章
相關標籤/搜索