国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

高性能內(nèi)存對(duì)象緩存 Memcached

這篇具有很好參考價(jià)值的文章主要介紹了高性能內(nèi)存對(duì)象緩存 Memcached。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

高性能內(nèi)存對(duì)象緩存 Memcached

Memcached 概述

  • 一套開源的高性能分布式內(nèi)存對(duì)象緩存系統(tǒng)

  • 所有的數(shù)據(jù)都存儲(chǔ)在內(nèi)存中

  • 支持任意存儲(chǔ)類型的數(shù)據(jù)

  • 提高網(wǎng)站的訪問速度

Memcached 是典型的 C/S 架構(gòu),因此需要安裝 Memcached 服務(wù)端與 Memcached API 客戶端。

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

數(shù)據(jù)存儲(chǔ)方式與數(shù)據(jù)過期方式

①數(shù)據(jù)存儲(chǔ)方式: Slab Allocation

  • 按組分配內(nèi)存,每次先分配一個(gè)Slab,相當(dāng)于一個(gè)大小為 1M 的頁,然后在 1M 的空間里根據(jù)數(shù)據(jù)劃分大小相同的 Chunk

  • 能夠有效解決內(nèi)存碎片問題,但是對(duì)內(nèi)存空間會(huì)有所浪費(fèi)

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

②數(shù)據(jù)過期方式

  • LRU: 數(shù)據(jù)空間不足時(shí),會(huì)根據(jù) LRU 的情況淘汰最近最少使用的記錄

  • Laxzy Expiration: 情性過期,是指使用 get 時(shí)查看記錄時(shí)間,從而檢查記錄是否已經(jīng)過期

Memcached緩存機(jī)制

當(dāng)程序?qū)懭刖彺鏀?shù)據(jù)請(qǐng)求時(shí),Memcached 的 API 接口將 Key 輸入路由算法模塊路由到集群中一臺(tái)服務(wù),之后由 API 接口與服務(wù)器進(jìn)行通信,完成一次分布式緩存寫入

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

Memcached分布式

要依賴于 Memcached 的客戶端來實(shí)現(xiàn)

多個(gè) Memcached 服務(wù)器是獨(dú)立的

分布式數(shù)據(jù)如何存儲(chǔ)是由路由算法所決定

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

當(dāng)數(shù)據(jù)到達(dá)客戶端程序庫時(shí),客戶端的算法就依據(jù)路由算法來決定保存的 Memcached 服務(wù)器。

讀取數(shù)據(jù)時(shí),客戶端依據(jù)保存數(shù)據(jù)時(shí)的路由算法選中和存儲(chǔ)數(shù)據(jù)時(shí)相同的服務(wù)器來讀取數(shù)據(jù)。

Memcached 路由算法

①求余數(shù) hash 算法

  • 先用 key 做 hash 運(yùn)算得到一個(gè)整數(shù),再做hash算法,根據(jù)余數(shù)進(jìn)行路由·

  • 適合大多數(shù)據(jù)需求,但是不適合用在動(dòng)態(tài)變化的環(huán)境

②一致性 hash 算法

  • 按照 hash 算法把對(duì)應(yīng)的 key 通過一定的 hash 算法處理后映射形成一個(gè)首尾相接閉合循環(huán),然后通過使用與對(duì)象存儲(chǔ)一樣的 hash 算法將機(jī)器也映射到環(huán)中,順時(shí)針方向計(jì)算將所有對(duì)象存儲(chǔ)到里自己最近的機(jī)器中
  • 適合在動(dòng)態(tài)變化的環(huán)境中使用

安裝 Memcached 服務(wù)器

1 源碼安裝 Libevent

Libevent 是一款跨平臺(tái)的時(shí)間處理接口的封裝,可以兼容多個(gè)操作系統(tǒng)的事件訪問。

Memcached 的安裝依賴于 Libevent ,因此需要先安裝 Libevent 。

# 源碼包
libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable/
./configure --prefix=/usr/local/libevent
make
make install

2 源碼安裝 Memcached

# 源碼包
memcached-1.5.1.tar.gz
tar zxf memcached-1.5.1.tar.gz
cd memcached-1.5.1/
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
make install

3 Memcached 服務(wù)優(yōu)化

路徑優(yōu)化

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

服務(wù)啟動(dòng)命令

memcached -d -m 128 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /usr/local/memcached/memcached.pid
-p <num>  要監(jiān)聽的TCP端口號(hào)(默認(rèn)值:11211)
-U <num>  要監(jiān)聽的UDP端口號(hào)(默認(rèn)值:11211,0關(guān)閉)
-s <file> 要監(jiān)聽的unix套接字路徑(禁用網(wǎng)絡(luò)支持)
-P <file> PID 文件路徑
-l <ip_addr> 要監(jiān)聽的接口,默認(rèn)為環(huán)境變量 INDRR_ANY 的值
-d 作為守護(hù)進(jìn)程運(yùn)行
-r 最大化核心文件限制
-u <username> 假設(shè) username 的身份(僅當(dāng)以root身份運(yùn)行時(shí))
-m <num> 用于項(xiàng)目的最大內(nèi)存(兆字節(jié)),默認(rèn)為64 MB
-M 內(nèi)存耗盡時(shí)返回錯(cuò)誤(而不是刪除項(xiàng)目)
-c <num> 最大同時(shí)連接數(shù),默認(rèn)值為1024
-k 鎖定所有分頁的內(nèi)存。請(qǐng)注意,有一個(gè)限制您可以鎖定的內(nèi)存量。正在嘗試分配更多的資源會(huì)失敗,所以一定要為您啟動(dòng) 的用戶正確設(shè)置限制帶有(不適用于-u <username> 用戶;

確定服務(wù)是否啟動(dòng)

netstat -anpt | grep 11211

拓展:建立 Memcached 服務(wù)啟動(dòng)腳本

vim /etc/init.d/memcached
#!/bin/bash
#description: Memcached Service Daemon
#processname: Memcached
#chkconfig: 2345 90 50

#Source function library.
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network

memcached_exec="/usr/local/bin/memcached"
memcached_pid="/var/run/memcached.pid"
lockfile="/var/lock/subsys/memcached"
prog="memcached"

memcached_host="127.0.0.1"
memcached_port=11211
memcached_memory="1024"

start() {
  if [ $UID -ne 0 ]; then
    echo "User has insufficient privilege."
    exit 4
  fi
  [ -x $memcached_exec ] || exit 5
  echo -n $"starting $prog: "
  daemon $memcached_exec -u daemon -d -m $memcached_memory  -l $memcached_host -p $memcached_port -c 256 -P $memcached_pid
  retval=$?
  echo
  [ $retval -eq 0 ] && touch $lockfile
}

stop() {
  if [ $UID -ne 0 ]; then
    echo "User has insufficient privilege."
    exit 4
  fi
  echo -n $"Stopping $prog: "
    if [ -n "`pidfileofproc $memcached_exec`" ]; then
        killproc $memcached_exec

    else
        failure $"stopping $prog"
    fi
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f $lockfile
}

status() {
  # run checks to determine if the service is running or use generic status
  status $prog
}

case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "restart")
    stop
    sleep 3
    start
    ;;
  "status")
    status
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart}"
    exit 1
    ;;
esac
exit $?
# 添加執(zhí)行權(quán)限
chmod +x /etc/init.d/memcached
# 查看memcached服務(wù)是否在chkconfig管理列表:
chkconfig --list memcached
# 將其加入chkconfig管理:
chkconfig --add memcached
# 在執(zhí)行等級(jí)2,3,5開啟memcached系統(tǒng)服務(wù)
# linux系統(tǒng)執(zhí)行等級(jí)為0-6級(jí)。0代表關(guān)機(jī),1是單用戶模式,2是多用戶狀態(tài),3是完整的多用戶模式(有NFS),4是暫時(shí)沒有啟用的保留等級(jí),5是圖形工作模式,6是系統(tǒng)正常關(guān)閉并重啟。
chkconfig --level 235 memcached on  
# memcached服務(wù)啟動(dòng)
chkconfig --list | grep memcached
service memcached start
service memcached stop
service memcached restart

Memcached 數(shù)據(jù)庫操作與管理

Memcached 協(xié)議簡(jiǎn)單,可直接使用 telnet 連接 Memcached 的 11211 端口。

# telnet默認(rèn)沒有安裝,需要自行安裝
yum -y install telnet
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
// 輸入操作指令

查看版本

version

操作命令格式

<command name><key><flags><exptime><bytes><data block>

常見操作指令

1 添加一條鍵值數(shù)據(jù) add
add username 0 0 7
1234567
STORED
——————————————
其中add username 0 0 7
username 鍵值名
第一個(gè)0 表示自定義信息為0
第二個(gè)0 表示過期時(shí)間為0;0表示永不過期,單位秒
7 表示字計(jì)數(shù)
1234567 是鍵值,注意輸入長(zhǎng)度為7字節(jié),與設(shè)定值相符合
2 查詢鍵值數(shù)據(jù) get
get username
VALUE username 0 7
1234567
END

如果需要檢查最近是否更新,可以使用命令 gets ,最后一位顯示的是更新因子,每更新一次更新因子數(shù)加1.

gets username
VALUE username 0 7 1
1234567
END
3 更新一條鍵值數(shù)據(jù) set

set 后跟需要更新的鍵值名、標(biāo)記位、過期時(shí)間、字節(jié)數(shù)。

如果鍵值名不存在, set 相當(dāng)于 add

set username 0 0 5
12345
STORED
get username
VALUE username 0 5
12345
END

如果僅是單純地更新,使用 replace ;此時(shí)更新的鍵值名必須存在,如果不存在,則會(huì)報(bào)錯(cuò) NOT_STORED

replace username 0 0 6
123456
STORED
replace abc 0 0 3
123
NOT_STORED
4 清除一條緩存數(shù)據(jù) delete
delete username
DELETED
get username
END

使用 delete 刪除一條鍵值為 username 的緩存數(shù)據(jù),使用 get 產(chǎn)看發(fā)現(xiàn)沒有內(nèi)容存在

5 檢查后更新 cas

如果 cas 的最后一個(gè)更新因子數(shù)與 gets 返回的更新因子數(shù)相等,則更新;否則返回 EXISTS。

add username 0 0 7     // 新增一條鍵值
1234567
STORED
gets username     // 查詢 usernaem 鍵值
VALUE username 0 7 4     // 更新因子數(shù):4
1234567
END
cas username 0 0 7 1    // 輸入一個(gè)與 gets 查詢的更新因子不同的更新因子數(shù)
abcdefg
EXISTS    // 報(bào)錯(cuò)
cas username 0 0 7 4    // 輸入更新因子數(shù)4
abcdefg
STORED    // 檢查并更新成功
get username    // 查詢
VALUE username 0 7
abcdefg    // 鍵值已經(jīng)改變
END
6 追加數(shù)據(jù) append/prepend
append username 0 0 5    // 向后追加 5 字節(jié)
12345
STORED
get username
VALUE username 0 12
abcdefg12345
END
prepend username 0 0 2    // 向前追加 2 字節(jié)
AB
STORED
get username
VALUE username 0 14
ABabcdefg12345
END
7 清除所有緩存數(shù)據(jù) flush_all
flush_all
OK
get username
END
8 查看服務(wù)器統(tǒng)計(jì)數(shù)據(jù) stats
stats
stats items //返回所有鍵值對(duì)統(tǒng)計(jì)信息
stats cachedump 1 0 //返回指定存儲(chǔ)空間的鍵值對(duì)
stats slabs //顯示各個(gè) slab 的信息,包括 chunk 的大小、數(shù)目、使用情況等
stats sizes //輸出所有 item 的大小和個(gè)數(shù)
stats reset //清空統(tǒng)計(jì)數(shù)據(jù)	

安裝配置基于PHP的 Memcached API 客戶端

Memcache支持多客戶端,如perl,php,python,c/c++等等,這里主要基于php配置

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

我這里的搭建是基于已經(jīng)源碼安裝完成 nginx 和 php;建議使用 LNMP 環(huán)境

① 安裝 Libmemcached 庫

Libmemcached 庫提供的 API 與 Memcached 服務(wù)端進(jìn)行交互

memcached 在1.2.4版本(含)以上增加了 CAS(Check and Set) 協(xié)議,即對(duì)同一 key 的多進(jìn)程的并發(fā)處理問題

類比數(shù)據(jù)庫,如果同時(shí)有多個(gè)進(jìn)程對(duì)同一張表的同一數(shù)據(jù)進(jìn)行更新,數(shù)據(jù)庫可以鎖定整張表,也可以鎖定表內(nèi)某一行數(shù)據(jù),memcached 的 CAS 功能與此相似;

但 php-memcache 擴(kuò)展不支持 CAS,需要先安裝 php-memcached 擴(kuò)展(注意與php-memcache擴(kuò)展的區(qū)別),php-memcached 擴(kuò)展基于 libmemcached,所以要先安裝 libmemcached,即php-memcached的庫。

# libmemcached版本:1.0.18
libmemcached-1.0.18.tar.gz
# 下載
wget https://launchpadlibrarian.net/165454254/libmemcached-1.0.18.tar.gz
# 編譯安裝,生成Makefile文件時(shí),切記“--with-memcached”參數(shù)
[root@localhost ~]# tar xf libmemcached-1.0.18.tar.gz
[root@localhost ~]# cd libmemcached-1.0.18
[root@localhost libmemcached-1.0.18]# ./configure --prefix=/usr/local/libmemcached --with-memcached
[root@localhost libmemcached-1.0.18]# make && make install

②安裝php-memcached,即 Memcached 擴(kuò)展

編譯安裝 PHP 的 Memcached 拓展組件

# 安裝包
# php-memcached版本:2.2.0(3.0.0及以上版本針對(duì)php7.0及以上版本)
memcached-2.2.0.tgz
# 下載
wget http://pecl.php.net/get/memcached-2.2.0.tgz

需要注意的是,在配置 Memcached API 時(shí),memcached-2.2.0.tgz 源碼包中默認(rèn)沒有 configure 配置腳本,需要使用 PHP 的 phpize 腳本生成配置腳本 configure

phpize: 用于擴(kuò)展 php 模塊,通過 phpize 可以建立 php 的外掛模塊;位于 php 安裝目錄下 bin 目錄下面

[root@localhost ~]# tar xf memcached-2.2.0.tgz
[root@localhost ~]# cd memcached-2.2.0
[root@localhost memcached-2.2.0]# /usr/local/php5/bin/phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
[root@localhost memcached-2.2.0]# ./configure --enable-memcached --with-php-config=/usr/local/php5/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl    # --disable-memcached-sasl 關(guān)閉 Memcahced 的 SASL 認(rèn)證功能,否則報(bào)錯(cuò)
[root@localhost memcached-2.2.0]# make && makeinstall
Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/					# 安裝完成后,會(huì)提示一個(gè)共享組件的位置

③安裝 php-memcache

# php-memcached版本:2.2.7(stable version)
memcache-2.2.7.tgz
# 下載php-memcache
wget http://pecl.php.net/get/memcache-2.2.7.tgz
[root@localhost ~]# tar xf memcache-2.2.7.tgz
[root@localhost ~]# cd memcache-2.2.7
[root@localhost memcache-2.2.7]# ./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config
[root@localhost memcache-2.2.7]# make && make install
Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/

④安裝 php-intl (原生擴(kuò)展樣例,非必須項(xiàng))

# php-intl版本:3.0.0
# 下載
wget http://pecl.php.net/get/intl-3.0.0.tgz
# 通過查看 php 源碼解壓包下的“ext/”目錄,php-intl 屬于原生擴(kuò)展,理論上可以不用下載,直接在“ext/”下相應(yīng)擴(kuò)展目錄下編譯安裝即可;

php-intl 是 php 國(guó)際化擴(kuò)展,是 ICU 庫的一個(gè)包裝器,安裝 php-intl 擴(kuò)展前要先安裝 ICU 庫

[root@localhost ~]# yum install -y icu libicu libicu-devel
[root@localhost ~]# cd /usr/local/php-5.5.24/ext/intl
								// 進(jìn)入到php源碼解壓包 intl 所在目錄
[root@localhost intl]# /usr/local/php5/bin/phpize 
[root@localhost intl]# ./configure --enable-intl --with-php-config=/usr/local/php5/bin/php-config
[root@localhost intl]# make && make install
Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/

⑤配置 PHP,啟動(dòng)拓展

php啟用擴(kuò)展有2種方式(本文介紹方式1):

(1)直接在php.ini文件中添加擴(kuò)展如“extension = xxx.so”;

(2)單獨(dú)創(chuàng)建ini文件,然后php.ini調(diào)用這些創(chuàng)建的文件即可(可通過php5enmod工具支持或者手工配置)。

這里采用第一種:編輯 PHP 配置文件vim /usr/local/php5/php.ini

[Intl]
extension = intl.so     # 相對(duì)路徑
[Memcached]
extension = memcached.so
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/"
[Memcache]
extension = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/memcache.so"
              # 絕對(duì)路徑

⑥驗(yàn)證拓展是否安裝成功

# 重啟 nginx 
systemctl restart nginx
# 重啟 php-fpm
pkill php-fpm
/usr/local/php5/sbin/php-fpm

查看拓展模塊

[root@localhost ~]# /usr/local/php5/bin/php -m | grep -E 'memcache|intl'
intl
memcache
memcached

phpinfo() 方式,利用前面已經(jīng)生成的 index.php 文件即可

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

⑦ 測(cè)試 Memcached API 功能

通過編寫簡(jiǎn)單的 PHP 測(cè)試代碼調(diào)用 Memcache 程序接口,來測(cè)試是否與 Memcached 服務(wù)器協(xié)同工作

<?php
$memcache = new Memcache;       #創(chuàng)建一個(gè)memcache對(duì)象
$memcache->connect('192.168.153.132', 11211) or die ("Could not connect"); 
							#連接 memcached1 服務(wù)器
$memcache->set('key', 'memcache-test');    #設(shè)置1個(gè)變量到內(nèi)存中,key=key, value=memcache-test
$get_value = $memcache->get('key');     #從內(nèi)存取出key的value
echo $get_value;     #回顯
?> 

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

Keepalived+Memcached實(shí)現(xiàn)主主復(fù)制和高可用

Memcached 主主復(fù)制是指在任意一臺(tái) Memcached 服務(wù)器修改數(shù)據(jù)都會(huì)被同步到另外一臺(tái),但是 Memcached API客戶端是無法判斷連接到哪一臺(tái) Memcached 服務(wù)器的,所以需要設(shè)置 VIP 地址,提供給 Memcached API客戶端進(jìn)行連接??梢允褂胟eepalived 產(chǎn)生的 VIP 地址連接主 Memcached 服務(wù)器,并且提供高可用架構(gòu)。

案例環(huán)境

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

Memcached 主主復(fù)制架構(gòu)

Memcached 的復(fù)制功能支持多個(gè) Memcached 之間進(jìn)行相互復(fù)制(雙向復(fù)制,主備都是可讀可寫的),可以解決 Memcached 的容災(zāi)問題。

要使用 Memcached 復(fù)制架構(gòu),需要重新下載支持復(fù)制功能的 Memcached 安裝包。

官網(wǎng)地址:http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz

①安裝帶有復(fù)制功能的 Memcached

安裝與之前的 Memcached 方法相同,同樣在安裝完成 Libevent 之后

# 安裝包
memcached-1.2.8-repcached-2.2.1.tar.gz
[root@localhost ~]# tar xf memcached-1.2.8-repcached-2.2.1.tar.gz
[root@localhost ~]# cd memcached-1.2.8-repcached-2.2.1/
[root@localhost memcached-1.2.8-repcached-2.2.1]# ./configure --prefix=/usr/local/memcached_replication --with-libevent=/usr/local/libevent --enable-replication 
[root@localhost memcached-1.2.8-repcached-2.2.1]# make && make install

make時(shí)報(bào)錯(cuò):memcached.c:697:30: 錯(cuò)誤:‘IOV_MAX’未聲明(在此函數(shù)內(nèi)第一次使用) if (m->msg_iovlen == IOV_MAX ||

提示需要修改memcached.c文件

/* FreeBSD 4.x doesn't have IOV_MAX exposed. */  
#ifndef IOV_MAX  
#if defined(__FreeBSD__) || defined(__APPLE__)  
# define IOV_MAX 1024  
#endif  
#endif  
改成:  
  
/* FreeBSD 4.x doesn't have IOV_MAX exposed. */  
#ifndef IOV_MAX  
# define IOV_MAX 1024  
#endif  
②啟動(dòng) Memcached 服務(wù)

支持復(fù)制功能的 Memcached 安裝完成之后,需要將編譯安裝的 libevent-2.1.so.6.0.2 模塊復(fù)制到 /usr/lib64 目錄下,否則在啟動(dòng)帶有復(fù)制功能的 Memcached 服務(wù)時(shí)可能不成功

ln -s /usr/local/libevent/lib/libevent-2.1.so.6.0.2 /usr/lib64/libevent-2.1.so.6

啟動(dòng)服務(wù)時(shí),使用 -x 選項(xiàng)指向?qū)Χ?/p>

/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.153.133
# 另一臺(tái)服務(wù)器
/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.153.132

查看服務(wù)是否啟動(dòng)

[root@localhost ~]# netstat -anpt | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*         LISTEN      9502/memcached
tcp        0      0 0.0.0.0:11212           0.0.0.0:*         LISTEN      9502/memcached
tcp6       0      0 :::11211                :::*              LISTEN      9502/memcached
③ 使用 telnet 簡(jiǎn)單驗(yàn)證復(fù)制功能

在其中一臺(tái) Memcached 上插入一條數(shù)據(jù),在另一臺(tái)服務(wù)器中可以查看到剛剛插入的數(shù)據(jù)。反之亦然。

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

Memcached 主主復(fù)制 + Keepalived 高可用架構(gòu)

①安裝 keepalived

yum -y install keepalived

②配置主 keepalived

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_mem {
    state MASTER
    interface ens34
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {   // 定義VIP地址
        192.168.153.200
    }
}

③配置備 keepalived

global_defs {
   router_id LVS_DEVEL_2    // 與主機(jī)區(qū)分
}

vrrp_instance VI_mem {
    state BACKUP    // 備 keepalived
    interface ens34
    virtual_router_id 51
    priority 99    // 優(yōu)先級(jí)低于 MASTER
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.153.200
    }
}

④測(cè)試驗(yàn)證

分別啟動(dòng)主從 keepalived 服務(wù)

systemctl start keepalived

使用命令ip a驗(yàn)證主 keepalived 獲取 VIP 地址

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

關(guān)閉 Memcached1 服務(wù)器的 Memcached 服務(wù),使用命令ip a在 Memcached2 服務(wù)器上查看地址信息,驗(yàn)證高可用

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

Memcached 與 MySQL 數(shù)據(jù)同步

采用MySQL Memcached UDF(User Defined Functions)方法

mysql memcached UDF 其實(shí)就是通過 libmemcached 來使用 memcache 的一系列函數(shù),通過這些函數(shù),你能對(duì) memcache 進(jìn)行g(shù)et, set, cas, append, prepend, delete, increment, decrement objects操作,如果我們通過 mysql trigger 來使用這些函數(shù),那么就能通過 mysql 更好的、更自動(dòng)的管理 memcache !

①libmemcached-0.34與memcached_functions_mysql-1.1配對(duì)進(jìn)行安裝

# 源碼包
libmemcached-0.34.tar.gz
——————————————————————————————————————————————
[root@localhost ~]# tar xf libmemcached-0.34.tar.gz
[root@localhost ~]# cd libmemcached-0.34/
[root@localhost libmemcached-0.34]# ./configure --prefix=/usr/local/libmemcached --with-memcached
[root@localhost libmemcached-0.34]# make && make install
# 源碼包
memcached_functions_mysql-1.1.tar.gz
——————————————————————————————————————————————
[root@localhost ~]# tar xf memcached_functions_mysql-1.1.tar.gz
[root@localhost ~]# cd memcached_functions_mysql-1.1/
[root@localhost memcached_functions_mysql-1.1]# ./configure --with-mysql=/usr/local/mysql/bin/mysql_config --with-libmemcached=/usr/local/libmemcached/
[root@localhost memcached_functions_mysql-1.1]# make && make install

②拷貝 lib 文件到 mysql 的 plugin 下面

cp /usr/local/lib/libmemcached_functions_mysql.* /usr/local/mysql/lib/plugin/
cp /usr/local/lib/libmemcached_functions_mysql.* /usr/lib64/mysql/plugin/

③往 MySQL 添加 memcache UDF 函數(shù)

一共有兩種方法:

1、在MySQL里執(zhí)行 source install_functions.sql
source /home/username/(memcached_functions_mysql-1.1源碼路徑)/sql/ install_functions.sql
————————————————————————————————————————
mysql> source /root/memcached_functions_mysql-1.1/sql/install_functions.sql
2、在linux主機(jī)執(zhí)行mysql <sql/install_functions.sql
# /usr/local/mysql/bin/mysql < /home/username/(memcached_functions_mysql-1.1源碼路徑)/sql/ install_functions.sql
————————————————————————————————————————
[root@localhost ~]# mysql -u root -p123456 < /root/memcached_functions_mysql-1.1/sql/install_functions.sql 

查看函數(shù)是否添加成功:在 MySQL 中使用select * from mysql.func;查看

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

④測(cè)試 MySQL 與 memcached 能否建立連接

在建立數(shù)據(jù)庫觸發(fā)器之前,需要先測(cè)試 MySQL 與 memcached 能否建立連接

mysql> select memc_servers_set('192.168.153.200:11211');    // 使用 VIP 地址

mysql> select memc_server_count();

mysql> select memc_set('test','1234567');

mysql> select memc_get('test');

緩存memcache,云計(jì)算技術(shù)架構(gòu),緩存,memcached,數(shù)據(jù)庫

連接到 memcached 查看數(shù)據(jù),因?yàn)橛兄髦鲝?fù)制,隨意連接一個(gè)

[root@localhost ~]# telnet 192.168.153.133 11211
Trying 192.168.153.133...
Connected to 192.168.153.133.
Escape character is '^]'.
get test
VALUE test 0 7
1234567
END

⑤創(chuàng)建數(shù)據(jù)庫觸發(fā)器

要先創(chuàng)建數(shù)據(jù)庫,在數(shù)據(jù)庫中創(chuàng)建觸發(fā)器

1)新建一個(gè)數(shù)據(jù)庫 test123 以及表 tab1
mysql> create database test123;
Query OK, 1 row affected (0.00 sec)

mysql> use test123;
Database changed
mysql> create table tab1(id int not null, name varchar(32) not null, primary key (id));
Query OK, 0 rows affected (0.04 sec)

2)在 test123 創(chuàng)建觸發(fā)器
mysql> delimiter $
mysql> create trigger tab1_insert_memc     // 插入數(shù)據(jù)
    -> before insert on tab1
    -> for each row begin
    -> set @m=memc_set(NEW.id,NEW.name);
    -> end$
Query OK, 0 rows affected (0.01 sec)

mysql> create trigger tab1_update_memc     // 更新數(shù)據(jù)
    -> before update on tab1
    -> for each row begin
    -> set @m=memc_replace(OLD.id,NEW.name);
    -> end$
Query OK, 0 rows affected (0.00 sec)

mysql> create trigger tab1_delete_memc     // 刪除數(shù)據(jù)
    -> before delete on tab1
    -> for each row begin
    -> set @m=memc_delete(OLD.id);
    -> end$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

3)測(cè)試觸發(fā)器

連接 memcached 服務(wù)器進(jìn)行數(shù)據(jù)測(cè)試

mysql> select memc_servers_set('192.168.153.200:11211');
+-------------------------------------------+
| memc_servers_set('192.168.153.200:11211') |
+-------------------------------------------+
|                                         0 |
+-------------------------------------------+
1 row in set (0.00 sec)

向 tab1 插入數(shù)據(jù),并查看結(jié)果

mysql> insert into tab1 value('1','1111aaaaff');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into tab1 value('2','lisa');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from tab1;
+----+------------+
| id | name       |
+----+------------+
|  1 | 1111aaaaff |
|  2 | lisa       |
+----+------------+
2 rows in set (0.00 sec)

連接 Memcached 查看數(shù)據(jù)

[root@localhost ~]# telnet 192.168.153.133 11211
Trying 192.168.153.133...
Connected to 192.168.153.133.
Escape character is '^]'.
get 1
VALUE 1 0 10
1111aaaaff
END
get 2
VALUE 2 0 4
lisa
END

更新 tab1 表的數(shù)據(jù)

mysql> update tab1 set name='tom' where id=1;
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> select * from tab1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
|  2 | lisa |
+----+------+
2 rows in set (0.00 sec)

連接 Memcached 查看數(shù)據(jù)

get 1
VALUE 1 0 3
tom
END
get 2
VALUE 2 0 4
lisa
END

刪除 tab1 表中的數(shù)據(jù)

mysql> delete from tab1 where id = 1;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from tab1;
+----+------+
| id | name |
+----+------+
|  2 | lisa |
+----+------+
1 row in set (0.00 sec)

連接 Memcached 查看數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-555679.html

get 1
END
get 2
VALUE 2 0 4
lisa
END

in set (0.00 sec)


連接 Memcached 查看數(shù)據(jù)

```bash
[root@localhost ~]# telnet 192.168.153.133 11211
Trying 192.168.153.133...
Connected to 192.168.153.133.
Escape character is '^]'.
get 1
VALUE 1 0 10
1111aaaaff
END
get 2
VALUE 2 0 4
lisa
END

更新 tab1 表的數(shù)據(jù)

mysql> update tab1 set name='tom' where id=1;
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> select * from tab1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
|  2 | lisa |
+----+------+
2 rows in set (0.00 sec)

連接 Memcached 查看數(shù)據(jù)

get 1
VALUE 1 0 3
tom
END
get 2
VALUE 2 0 4
lisa
END

刪除 tab1 表中的數(shù)據(jù)

mysql> delete from tab1 where id = 1;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from tab1;
+----+------+
| id | name |
+----+------+
|  2 | lisa |
+----+------+
1 row in set (0.00 sec)

連接 Memcached 查看數(shù)據(jù)

get 1
END
get 2
VALUE 2 0 4
lisa
END

到了這里,關(guān)于高性能內(nèi)存對(duì)象緩存 Memcached的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 六、企業(yè)級(jí)架構(gòu)緩存篇之memcached

    六、企業(yè)級(jí)架構(gòu)緩存篇之memcached

    LNMP架構(gòu)中網(wǎng)站應(yīng)用訪問流程: 瀏覽器 (app) → web 服務(wù)器 → 后端服務(wù) (php) → 數(shù)據(jù)庫 (mysql) 訪問流程越多,訪問速度越慢,出現(xiàn)問題的幾率也越大。 網(wǎng)站訪問流程優(yōu)化思路: ① 采用高性能的負(fù)載均衡設(shè)備; ② 頁面靜態(tài)化; ③ 引入緩存層,如使用Redis或Memcached,來緩存頻繁

    2024年04月10日
    瀏覽(25)
  • 高性能分布式緩存Redis(三) 擴(kuò)展應(yīng)用

    高性能分布式緩存Redis(三) 擴(kuò)展應(yīng)用

    在并發(fā)編程中,通過鎖,來避免由于競(jìng)爭(zhēng)而造成的數(shù)據(jù)不一致問題 問題分析 現(xiàn)象:本地鎖在多節(jié)點(diǎn)下失效(集群/分布式) 原因:本地鎖它只能鎖住本地JVM進(jìn)程中的多個(gè)線程,對(duì)于多個(gè)JVM進(jìn)程的不同線程間是鎖不住的 解決:分布式鎖(在分布式環(huán)境下提供鎖服務(wù),并且達(dá)到本地

    2024年02月12日
    瀏覽(94)
  • 解析內(nèi)存中的高性能圖結(jié)構(gòu)

    在進(jìn)行各種圖處理、圖計(jì)算、圖查詢的時(shí)候,內(nèi)存或是硬盤中如何存儲(chǔ)圖結(jié)構(gòu)是一個(gè)影響性能的關(guān)鍵因素。本文主要分析了幾種常見的內(nèi)存圖結(jié)構(gòu),及其時(shí)間、空間復(fù)雜度,希望對(duì)你有所啟發(fā)。 通常來說,對(duì)于圖結(jié)構(gòu)的幾種常見的基礎(chǔ)操作: 插入一個(gè)點(diǎn) 插入一個(gè)邊 刪除一個(gè)

    2024年02月03日
    瀏覽(23)
  • “深入理解Redis:高性能緩存和數(shù)據(jù)存儲(chǔ)技術(shù)解析“

    標(biāo)題:深入理解Redis:高性能緩存和數(shù)據(jù)存儲(chǔ)技術(shù)解析 摘要:本文將深入探討Redis作為一種高性能緩存和數(shù)據(jù)存儲(chǔ)技術(shù)的原理和用法。我們將從Redis的基本特性入手,介紹其在緩存和數(shù)據(jù)存儲(chǔ)方面的優(yōu)勢(shì),并通過實(shí)際示例代碼展示如何使用Redis提升應(yīng)用程序的性能和可靠性。

    2024年02月16日
    瀏覽(21)
  • “深入理解Redis:高性能緩存與數(shù)據(jù)存儲(chǔ)的秘密“

    標(biāo)題:深入理解Redis:高性能緩存與數(shù)據(jù)存儲(chǔ)的秘密 在現(xiàn)代應(yīng)用程序的開發(fā)中,緩存和數(shù)據(jù)存儲(chǔ)是非常重要的組成部分。它們不僅可以提高應(yīng)用程序的性能,還可以減輕數(shù)據(jù)庫和網(wǎng)絡(luò)的負(fù)載。其中,Redis作為一種高性能的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),因其出色的性能和靈活的特性而備

    2024年02月16日
    瀏覽(27)
  • “深入解析Redis:高性能緩存與分布式數(shù)據(jù)存儲(chǔ)“

    標(biāo)題:深入解析Redis:高性能緩存與分布式數(shù)據(jù)存儲(chǔ) 摘要:本文將深入解析Redis,介紹其作為高性能緩存和分布式數(shù)據(jù)存儲(chǔ)的特點(diǎn)和功能,并提供示例代碼展示其使用方法。 正文: 一、引言 Redis是一個(gè)開源的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它以其高性能、靈活的數(shù)據(jù)結(jié)構(gòu)以及豐富的

    2024年02月17日
    瀏覽(25)
  • 探索Garnet:微軟開源的高性能分布式緩存存儲(chǔ)系統(tǒng)

    微軟研究院近期宣布推出一款名為Garnet的創(chuàng)新開源分布式緩存存儲(chǔ)系統(tǒng),致力于解決現(xiàn)代應(yīng)用程序在處理大規(guī)模數(shù)據(jù)時(shí)對(duì)于高吞吐量、低延遲及卓越可擴(kuò)展性的嚴(yán)苛要求。這款基于C# .NET 8.0構(gòu)建的新型系統(tǒng),充分利用了現(xiàn)代硬件能力,為應(yīng)用程序開發(fā)人員提供了加速數(shù)據(jù)訪問

    2024年04月26日
    瀏覽(29)
  • 《SpringBoot篇》18.SpringBoot整合Memcached緩存超詳細(xì)教程

    《SpringBoot篇》18.SpringBoot整合Memcached緩存超詳細(xì)教程

    陳老老老板 說明:工作了,學(xué)習(xí)一些新的技術(shù)棧和工作中遇到的問題,邊學(xué)習(xí)邊總結(jié),各位一起加油。需要注意的地方都標(biāo)紅了,還有資源的分享. 一起加油。 本文是介紹Memcached與SpringBoot整合 整合之前先大致了解一下Memcached,是一個(gè)? 免費(fèi)開源的、高性能的、具有分布式內(nèi)

    2024年02月03日
    瀏覽(19)
  • 【高性能計(jì)算】opencl語法及相關(guān)概念(三)事件,內(nèi)存

    【高性能計(jì)算】opencl語法及相關(guān)概念(三)事件,內(nèi)存

    當(dāng)談到OpenCL中的事件時(shí),它們代表了執(zhí)行的各個(gè)階段或操作的狀態(tài)信息。通過使用事件,您可以跟蹤和管理內(nèi)核執(zhí)行以及內(nèi)存操作的進(jìn)度和順序。以下是與OpenCL事件相關(guān)的關(guān)鍵概念: 創(chuàng)建事件:您可以使用 clCreateUserEvent 或 clCreateUserEventWithProperties 函數(shù)手動(dòng)創(chuàng)建事件,或者使

    2024年02月10日
    瀏覽(27)
  • c++代碼實(shí)現(xiàn)一個(gè)高性能內(nèi)存池(超詳細(xì)版本)

    c++代碼實(shí)現(xiàn)一個(gè)高性能內(nèi)存池(超詳細(xì)版本)

    寫在前面 本文的內(nèi)存池代碼是改編自Nginx的內(nèi)存池源碼,思路幾乎一樣。由于Nginx源碼的變量命名我不喜歡,又沒有注釋,看得我很難受。想自己寫一版容易理解的代碼。這應(yīng)該是全網(wǎng)獨(dú)一份的超詳細(xì)版本了(笑~). 應(yīng)用場(chǎng)景 寫內(nèi)存池的原理之前,按照慣例先說內(nèi)存池的應(yīng)用

    2024年02月06日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包