溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LAMP+Memcached高性能緩存服務

發(fā)布時間:2020-06-16 08:54:48 來源:網(wǎng)絡 閱讀:1640 作者:藍月CC 欄目:建站服務器

Memcached簡介

Memcached是高性能的分布式內存緩存服務器,通過在內存里維護一個統(tǒng)一的巨大的hash表,它能夠用來存儲各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫檢索的結果等, 由國外社區(qū)網(wǎng)站 LiveJournal 的開發(fā)團隊開發(fā)。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web應用的速度、提高可擴展性。
官方網(wǎng)站:http://www.danga.com/memcached/

常用典型架構如下:

LAMP+Memcached高性能緩存服務

當Web客戶端發(fā)送請求到web服務器的應用程序時,應用程序會通過調用Memcached API客戶端程序庫接口去連接 Memcached服務器,進而查詢數(shù)據(jù)。
1、如果此時web客戶端所請求的數(shù)據(jù)已經(jīng)在 Memcached服務端中緩存,則 Memcached服務端會將數(shù)據(jù)返回給Web客戶端;
2、如果數(shù)據(jù)不存在,則會將Web客戶端請求發(fā)送至MySQL數(shù)據(jù)庫,由數(shù)據(jù)庫將請求的數(shù)據(jù)返回給 Memcached以及Web客戶端,與此同時Memcached服務器也會將數(shù)據(jù)進行保存,方便用戶下次使用。

Memcached特點

  • 協(xié)議簡單
  • 基于libevent的事件處理
  • 內置內存存儲方式
  • memcached不互相通信的分布式
    libevent: http://www.monkey.org/~provos/libevent/
協(xié)議簡單

memcached的服務器客戶端通信并不使用復雜的XML等格式, 而使用簡單的基于文本行的協(xié)議。因此,通過telnet 也能在memcached上保存數(shù)據(jù)、取得數(shù)據(jù)。下面是例子。
$ 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 (數(shù)據(jù))
STORED (結果)
get foo (取得命令)
VALUE foo 0 3 (數(shù)據(jù))

基于libevent的事件處理

libevent是個程序庫,它將Linux的epoll、BSD類操作系統(tǒng)的kqueue等事件處理功能 封裝成統(tǒng)一的接口。即使對服務器的連接數(shù)增加,也能發(fā)揮O(1)的性能。 memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統(tǒng)上發(fā)揮其高性能。

內置內存存儲方式

為了提高性能,memcached中保存的數(shù)據(jù)都存儲在memcached內置的內存存儲空間中。 由于數(shù)據(jù)僅存在于內存中,因此重啟memcached、重啟操作系統(tǒng)會導致全部數(shù)據(jù)消失。 另外,內容容量達到指定值之后,就基于LRU(Least Recently Used)算法自動刪除不使用的緩存。 memcached本身是為緩存而設計的服務器,因此并沒有過多考慮數(shù)據(jù)的永久性問題。

數(shù)據(jù)存儲方式:Slab Allocation
LAMP+Memcached高性能緩存服務

Slab Allocation即按組分配內存,每次先分配一個slab,相當于一個大小為1MB的頁,然后在1MB的空間里根據(jù)數(shù)據(jù)劃分大小相同的chunk,該方法可以有效解決內存碎片問題,但可能會對空間有所浪費。

memcached不互相通信的分布式

memcached盡管是“分布式”緩存服務器,但服務器端并沒有分布式功能。 各個memcached不會互相通信以共享信息。

Memcached緩存機制和分布式

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

Memcached是一款非常出色的緩存軟件,當程序寫入緩存數(shù)據(jù)請求時, Memcached的API接口將Key輸入路
由算法模塊路由到集群中一臺服務器,之后由API接口與服務器進行通信,完成一次分布式緩存寫入。

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

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

實驗環(huán)境

本實驗用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

實驗部署

一、memcached服務端

1、安裝編譯環(huán)境

yum install gcc gcc-c++ make

2、解壓安裝包

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

3、手工編譯安裝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

4、建立軟連接

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

5、開啟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高性能緩存服務

二、LAMP搭建

(一)Apache搭建
1、安裝環(huán)境包

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

2、解壓安裝包

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

3、手工編譯安裝

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

make && make install

4、編輯啟動腳本

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加入系統(tǒng)服務**

5、優(yōu)化服務,使系統(tǒng)識別命令

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

6、編輯httpd主配置文件

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

7、開啟httpd服務

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

LAMP+Memcached高性能緩存服務

(二)Mysql搭建

1、安裝環(huán)境包

yum -y install ncurses-devel autoconf cmake

2、手工編譯安裝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

3、添加系統(tǒng)服務

cp support-files/mysql.server /etc/init.d/mysqld #添加系統(tǒng)服務
chmod 755 /etc/init.d/mysqld #修改執(zhí)行權限
chkconfig --add /etc/init.d/mysqld #將mysqld添加為系統(tǒng)服務
chkconfig mysqld --level 235 on #
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile #重新加載環(huán)境變量
useradd -s /sbin/nologin mysql #創(chuàng)建進程用戶mysql
chown -R mysql:mysql /usr/local/mysql/ #修改mysql的屬主、屬組

4、初始化數(shù)據(jù)庫

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

5、建立軟連接

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

6、編輯配置文件

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

7、啟動mysql服務

service mysqld start
netstat -ntap | grep 3306

LAMP+Memcached高性能緩存服務

(三)php搭建

1、安裝環(huán)境包

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

2、手工編譯安裝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

3、創(chuàng)建php配置文件

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

4、建立軟連接

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

5、修改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高性能緩存服務
6、修改apache首頁測試php

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

6、重啟httpd服務,測試

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

LAMP+Memcached高性能緩存服務

(四)測試數(shù)據(jù)庫

1、創(chuàng)建數(shù)據(jù)庫test

create database a

2、test數(shù)據(jù)庫給auser用戶授權

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

LAMP+Memcached高性能緩存服務
3、再次修改apache首頁訪問數(shù)據(jù)庫

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

4、重啟apache服務,測試數(shù)據(jù)庫連接
LAMP+Memcached高性能緩存服務

(五)安裝客戶端

1、安裝環(huán)境包
yum install autoconf -y
2、手工編譯安裝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高性能緩存服務
3、為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高性能緩存服務
4、修改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;
?>

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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI