memcache集羣服務:memagent配置使用

 

memcache集羣服務:memagent配置使用  

2011-04-04 15:14:24|  分類: mem_squid_porxy |  標籤:magent  memcached  root  text  stone  |字號 訂閱php

 
 
magent是一款開源的memcached代理服務器軟件
地址:  http://code.google.com/p/memagent/

安裝magent到/usr/local/下
cd /usr/local
mkdir magent
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s/LIBS = -levent/LIBS = -levent -lm/g" Makefile
makehtml

magent命令參數:
-h this message
-u uid
-g gid
-p port, default is 11211. (0 to disable tcp support)
-s ip:port, set memcached server ip and port
-b ip:port, set backup memcached server ip and port
-l ip, local bind ip address, default is 0.0.0.0
-n number, set max connections, default is 4096
-D don't go to background
-k use ketama key allocation algorithm
-f file, unix socket path to listen on. default is off
-i number, max keep alive connections for one memcached server, default is 20
-v verbose前端

啓動magent服務
magent -u root -n 4096 -l 127.0.0.1 -p 12000           -s 127.0.0.1:8086            -s 127.0.0.2:8086             -b 127.0.0.1:11213算法

magent的hash算法
magent採用的是:Consistent Hashing原理,Consistent Hashing以下所示:首先求出memcached服務器(節點)的哈希值, 並將其配置到0~232的圓(continuum)上。 而後用一樣的方法求出存儲數據的鍵的哈希值,並映射到圓上。 而後從數據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上。 若是超過232仍然找不到服務器,就會保存到第一臺memcached服務器上。

從上圖的狀態中添加一臺memcached服務器。餘數分佈式算法因爲保存鍵的服務器會發生巨大變化 而影響緩存的命中率,但Consistent Hashing中,只有在continuum上增長服務器的地點逆時針方向的 第一臺服務器上的鍵會受到影響。後端

memcache集羣服務:memagent配置使用 - zhuzhu - 五事九思

 利用magent實現對memecache的分佈式管理,搭建一套memcache集羣服務緩存


一、前端php對magent的訪問跟對memcache訪問相同,不須要作任何更改,對於插入的key,magent會把值散列到各個memcache服務上,只操做magent,不用關心後端處理
二、公司項目應用:南北各10臺前端,南北各部署一套magent服務,主要是考慮電信網通的跨網訪問
以北方爲例,每一個前端安裝memcached服務(大內存機器能夠啓動多個服務),每一個前端都安裝magent服務,後端掛載所有機器的 memcached服務,啓動參數:服務器

magent -p 12000 -s 127.0.0.1:8086 -s 127.0.0.2:8086 -s 127.0.0.3:8086.......-s 127.0.0.10:8086網絡

,全部前端配置都是相同的,任何一個前端只需訪問本地端口的magent,這樣的memcache集羣對應用帶來很大便利.
好比項目的基本配置信息,早期策略只能在中控機生成配置文件,同步到各個前端,沒有辦法把配置信息放到緩存中,由於各個前端的memcache是不共享 的,一臺機器緩存更新,其它機器是不更新的,用程序去控制更新,仍是存在不穩定因素,並且隨着服務增多,也不便於管理,部署了magent後,就能夠解決 這個問題,任何一個前端更新數據=全局更新
這種部署還能夠解決的應用:session共享

項目中多處已經實際應用,magent對memcache的均衡和穩定性都很是不錯,推薦使用session

from:http://hi.baidu.com/zhizhesky/blog/item/277886b118cf1b5a082302f6.html架構


 


magent是一款開源的Memcached代理服務器軟件,能夠用它作一些高可用嘗試。

1、安裝步驟:
一、編譯安裝libevent:
wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../

二、編譯安裝Memcached:
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../

三、編譯安裝magent:
mkdir magent
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../

2、高可用網絡架構

 

memcache集羣服務:memagent配置使用 - zhuzhu - 五事九思

 
             服務器A                                    服務器B

啓動兩個memcached進程,端口分別爲11211和11212:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212

啓動兩個magent進程,端口分別爲10000和11000:
magent -u root -n 51200 -l 127.0.0.1 -p 10000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
magent -u root -n 51200 -l 127.0.0.1 -p 11000 -s 127.0.0.1:11212 -b 127.0.0.1:11211
-s 爲要寫入的memcached, -b 爲備份用的memcached。
說明:測試環境用magent和memached的不一樣端口來實現,在生產環境中能夠將magent和memached做爲一組放到兩臺服務器上。

也就是說經過magent可以寫入兩個memcached。
[root@odb ~]# telnet 127.0.0.1 10000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key 0 0 8                       <---在10000端口設置key的值
88888888
STORED
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key                     <---在11211端口獲取key的值成功
VALUE key 0 8
88888888
END
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key                     <---在11212端口獲取key的值成功
VALUE key 0 8
88888888
END
quit
Connection closed by foreign host.

高可用性測試:
[root@odb ~]# ps aux |grep -v grep |grep memcached
root     23455  0.0  0.0  5012 1796 ?        Ss   09:22   0:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
root     24950  0.0  0.0  4120 1800 ?        Ss   10:58   0:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
[root@odb ~]# ps aux |grep -v grep |grep 'magent -u'
root     25919  0.0  0.0  2176  484 ?        Ss   12:00   0:00 magent -u root -n 51200 -l 127.0.0.1 -p 10000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
root     25925  0.0  0.0  3004  484 ?        Ss   12:00   0:00 magent -u root -n 51200 -l 127.0.0.1 -p 11000 -s 127.0.0.1:11212 -b 127.0.0.1:11211
[root@odb ~]# telnet 127.0.0.1 10000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set stone 0 0 6                      <---在10000端口設置stone的值
123456
STORED
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set shidl 0 0 6                      <---在11000端口設置shidl的值
666666
STORED
get stone                      <---在11000端口獲取stone的值成功
VALUE stone 0 6
123456
END
incr stone 2                      <---在11000端口修改stone的值成功
123458
get stone
VALUE stone 0 6                     <---在11000端口驗證stone的值,證實上面的修改爲功
123458
END
get shidl                      <---在11000端口獲取shidl的值成功
VALUE shidl 0 6
666666
END
quit                     <---退出11000端口
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 10000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get stone                      <---在10000端口獲取stone的值,已被修改
VALUE stone 0 6
123458
END
get shidl                      <---在10000端口獲取shidl的值成功
VALUE shidl 0 6
666666
END
delete shidl                      <---在10000端口刪除shidl
DELETED
get shidl                      <---在10000端口刪除shidl生效
END
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get shidl                      <---在11000端口驗證刪除shidl生效
END
get stone                      <---在11000端口獲取stone的值成功
VALUE stone 0 6
123458
END
quit
Connection closed by foreign host.

Down機模擬測試:

Down掉11211端口的memcached:

[root@odb ~]# kill -9 24950
[root@odb ~]# telnet 127.0.0.1 10000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get stone                      <---在10000依然能夠獲取stone的值
VALUE stone 0 6
123458
END
quit
Connection closed by foreign host.
[root@odb ~]# telnet 127.0.0.1 11000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get stone                      <---在11000依然能夠獲取stone的值
VALUE stone 0 6
123458
END
quit
Connection closed by foreign host.

Down掉11000端口的magent:

[root@odb ~]# kill -9 25925
[root@odb ~]# telnet 127.0.0.1 10000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get stone                      <---在10000依然能夠獲取stone的值
VALUE stone 0 6
123458
END
quit
Connection closed by foreign host

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

magent使用

1、Linux環境下安裝magent:
一、安裝libevent:

wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
tar -xzvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr/local/libevent
make
make install

    

 

      二、安裝Memcached:

wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
tar -xzvf memcached-1.4.4.tar.gz 
cd memcached-1.4.4
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
make install
ln -s /usr/local/libevent/lib/libevent-1.4.so.2 /usr/lib/

   三、編譯安裝magent:

 

mkdir magent
cp magent-0.5.tar.gz magent
cd magent
tar -xzvf magent-0.5.tar.gz 
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
vi magent.c 添加
    #include <limits.h>
make


 

 
1、使用實例:
 

 

memcached -m 1 -u root -d -l 192.168.1.219 -p 11211
memcached -m 1 -u root -d -l 192.168.1.219 -p 11212
memcached -m 1 -u root -d -l 192.168.1.219 -p 11213


magent -u root -n 51200 -l 192.168.1.219 -p 12000 -s 192.168.1.219:11211 -s 192.168.1.219:11212 -b 192.168.1.219:11213

 

 

 


      一、分別在112十一、112十二、11213端口啓動3個Memcached進程,在12000端口開啓magent代理程序;
二、112十一、11212端口爲主Memcached,11213端口爲備份Memcached;
三、鏈接上12000的magent,set key1和set key2,根據哈希算法,key1被寫入11212和11213端口的Memcached,key2被寫入11212和11213端口的Memcached;
四、當112十一、11212端口的Memcached死掉,鏈接到12000端口的magent取數據,數據會從11213端口的Memcached取出。
 
3、整個測試流程:
 

 

# telnet 192.168.1.219 12000
Trying 1192.168.1.219...
Connected to 192.168.1。219.
Escape character is '^]'.
stats
memcached agent v0.4
matrix 1 -> 192.168.1.219:11211, pool size 0
matrix 2 -> 192.168.1.219:11212, pool size 0
END
set key1 0 0 5
reesun
STORED
set key2 0 0 6
reesun1
STORED
quit
Connection closed by foreign host.


# telnet 192.168.1.219 11211
Trying 192.168.1.219...
Connected to 192.168.1.219.
Escape character is '^]'.
get key1
END
get key2
VALUE key2 0 6
reesun1
END
quit
Connection closed by foreign host.


# telnet 192.168.1.219 11212
Trying 192.168.1.219...
Connected to 1192.168.1.219.
Escape character is '^]'.
get key1
VALUE key1 0 5
reesun
END
get key2
END
quit
Connection closed by foreign host.


# telnet 192.168.1.219 11213
Trying 192.168.1.219...
Connected to 1192.168.1.219.
Escape character is '^]'.
get key1
VALUE key1 0 5
reesun
END
get key2
VALUE key2 0 6
reesun1
END
quit
Connection closed by foreign host.

 

@@@@@@@@@@@@@@@@@@@@@@@@@

用magent 爲memcached集羣

文章分類:綜合技術

magent是一款開源的Memcached代理服務器軟件,其項目網址爲: http://code.google.com/p/memagent/ 
目前最新版本爲0.6 
安裝步驟: 
Java代碼  複製代碼  收藏代碼
  1. # mkdir magent 
  2. # cp magent-0.6.tar.gz                ./magent   
  1. # cd magent   
  2. # tar -zvxf magent-0.6.tar.gz   
  3. # /sbin/ldconfig   
  4. # sed -i "s/LIBS = -levent/LIBS = -levent -lm/g"         Makefile    
  5.  
  6. # make   
  7. # cp magent /usr/bin/magent  


啓動magent 
Java代碼  複製代碼  收藏代碼

# cd /usr/bin   

# magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 10.1.1.1:11211 -s 10.1.1.2:11211  

-b 10.1.1.3:11211  

  1. -h this message   
  2. -u uid   
  3. -g gid   
  4. -p port, default is 11211. (0 to disable tcp support)   
  5. -s ip:port, set memcached server ip and port   
  6. -b ip:port, set backup memcached server ip and port   
  7. -l ip, local bind ip address, default is 0.0.0.0  
  8. -n number, set max connections, default is 4096  
  9. -D do not go to background   
  10. -k use ketama key allocation algorithm   
  11. -f file, unix socket path to listen on. default is off   
  12. -i number, max keep alive connections for one memcached server, default is 20  
  13. -v verbose  


測試安裝: 
# telnet 127.0.0.1 12000 --若是能夠訪問,表示magent已經運行   
  1. 或者   
  2. # netstat -tln  --看12000端口是否被監聽  
相關文章
相關標籤/搜索