一、memcached介紹
Memcache 官網 http://memcached.org/
(1)memcache本身沒有像 redis 所具備的數據持久化功能,比如 RDB 和 AOF 都沒有,但是可以通過做集群同步的方式,讓各 memcache 服務器的數據進行同步,從而實現數據的一致性,即保證各 memcache的數據是一樣的,即使有任何一台 memcache 發生故障,只要集群種有一台 memcache 可用就不會出現數據丟失,當其他 memcache 重新加入到集群的時候可以自動從有數據的 memcache 當中自動獲取數據並提供服務。
(2)Memcache借助了操作系統的 libevent 工具做高效的讀寫。 libevent 是個程序庫,它將 Linux 的 epoll、BSD 類操作系統的 kqueue 等事件處理功能封裝成統一的接口。即使對服務器的連接數增加,也能發揮高性能。memcached使用這個 libevent 庫,因此能在 Linux、BSD、Solaris 等操作系統上發揮其高性能 。
(3)Memcache 支持最大的內存存儲對象為 1M 超過 1M 的 數據可以使用客戶端壓縮或拆分報包放到多個key中,比較大的數據在進行讀取的時候需要消耗的時間比較長,memcache最適合保存用戶的session實現 session共享Memcached 存儲數據時 , Memcached 會去申請 1MB 的內存 , 把該塊內存稱為一個slab,也稱為一個page。
(4)memcached具有多種語言的客戶端開發包,包括: Perl/PHP/JAVA/C/P ython/Ruby/C#/
安裝方式:yum安裝和源碼編譯
yum安裝:
yum install memcached
修改配置文件及啟動memcached服務
[root@cenots27~]#vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="4069" 最大連接數 CACHESIZE="1024" 最大緩存數1G OPTIONS="" [root@cenots27~]#systemctl start memcached
查看memcached監聽的端口,監聽的是11211端口。
memcached程序的常用選項:
-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes. -c <num>:Use <num> max simultaneous connections; the default is 1024. -u <username>:以指定的用戶身份來運行進程; -l <ip_addr>:監聽的IP地址,默認為本機所有地址; -p <num>:監聽的TCP端口, the default is port 11211. -U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off. -M:內存耗盡時,不執行LRU清理緩存,而是拒絕存入新的緩存項,直到有多余的空間可用時為止; -f <factor>:增長因子;默認是1.25; -t <threads>:啟動的用於響應用戶請求的線程數;
memcached集群 部署架構:
基於 magent 的部署架構:
該部署方式 依賴於 magent 實現 高可用, 應用端通過 負載 服務器連接到 magent ,然后 再由 magent代理用戶應用請求到 memcached 處理,底層的 memcached 為 雙主結構會自動同步數據, 本部署方式存在 magent 單點問題因此需要兩個 magent 做高可用 。
Repcached 實現原理
在master 上可以通過 X 指定 replication port ,在 slave 上通過 x/ X 找到 master 並 connect 上去,事實上,如果同時指定了 x/ X repcached 一定會嘗試連接,但如果連接失敗,它就會用 X 參數來自己 listen (成為 master );如果 master 壞掉, slave 偵測到連接斷了,它會自動 listen 而成為 master而如果 slave 壞掉, master 也會偵測到連接斷,它就會重新 listen 等待新的 slave 加入。
從這方案的技術實現來看,其實它是一個單master單slave的方案,但它的master/slave都是可讀寫的,而且可以相互同步,所以從功能上看,也可以認為它是雙機master master方案。
簡化后 的部署架構:
magent已經有很長 時間 沒有更新, 因此 可以不再使用 magent ,直接通過負載均衡連接之 memcached任然 有兩台 memcached 做高可用, memcache d 會自動同步數據保持數據一致性, 即使 一台 memcached故障也 不影響業務正常運行 故障的 memcached 修復上線后再自動從另外一台 同步 數據 即可 保持數據一致性。
二、開始源碼編譯memcached
環境准備:
A主機:192.168.37.17
B主機:192.168.37.27
兩個主機同時進行以下編譯方式:
下載包路徑:
wget https://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz/download
1、安裝對應的依賴包
[root@cenots27memcached-1.2.8-repcached-2.2.1]#yum install libevent libevent-devel -y
2、解壓安裝包,並切換到此目錄下開始編譯
[root@cenots27memcached-1.2.8-repcached-2.2.1]#cd /usr/local/src [root@cenots27memcached-1.2.8-repcached-2.2.1]#tar -xvf memcached-1.2.8-repcached-2.2.1.tar.gz [root@cenots27memcached-1.2.8-repcached-2.2.1]#cd memcached-1.2.8-repcached-2.2.1/ [root@cenots27memcached-1.2.8-repcached-2.2.1]#./configure --prefix=/usr/local/repcached --enable-replication
3、make與make install安裝,此時就會報錯
解決方案:
[root@cenots27memcached-1.2.8-repcached-2.2.1]#pwd /usr/local/src/memcached-1.2.8-repcached-2.2.1 [root@cenots27memcached-1.2.8-repcached-2.2.1]#vim memcached.c
刪除以下幾行
添加下面幾行
#ifndef IOV_MAX #define IOV_MAX 1024 #endif
再執行一次make && make install 就可以安裝成功,此時源碼編譯完成。
[root@cenots27memcached-1.2.8-repcached-2.2.1]#make && make install
啟動memcached
啟動B主機的機器,其中-x后面跟的IP地址,是監聽A主機的IP地址,-X監聽的是一個端口號
[root@cenots27memcached-1.2.8-repcached-2.2.1]#/usr/local/repcached/bin/memcached -d -m 2048 -p 11211 -u root -c 2048 -x 192.168.37.17 -X 16000
查看啟動狀態:
啟動A源碼編譯的主機監聽B主機IP地址
[root@centos17memcached-1.2.8-repcached-2.2.1]#/usr/local/repcached/bin/memcached -d -m 2048 -p 11211 -u root -c 2048 -x 192.168.37.27 -X 16000
注意:雙方都監聽了對方的端口后,指定的-X端口16000就會消失,不會被看到
此時已經實現memcached高可用功能。