上一篇我們說過memcached實現高可用以及防止單點故障可以通過magent來實現,接下來我們來配置一個高可用羣集
magent代理服務器:192.168.200.101
memcached節點:(可以在同一個服務器上開啓三個memcached節點看前面介紹,也可以一臺服務器一個)
memcached:192.168.200.100 11000端口
memcached: 192.168.200.100 12000端口
memcached: 192.168.200.100 13000端口
客戶端
192.168.200.200 工具:telnet(用於測試時使用)
magent安裝
開源軟件:magent-0.5.tar.gz libevent-1.4.14b-stable.tar.gz
先安裝 libevent
[root@www ~]# tar -xf /src/libevent-1.4.14b-stable.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/libevent-1.4.14b-stable/
[root@www libevent-1.4.14b-stable]# ./configure --prefix=/usr/ && make && make install
安裝magent
[root@www ~]# mkdir magent
[root@www ~]# tar -xf /src/magent-0.5.tar.gz -C /root/magent/
[root@www ~]# cd magent/
[root@www magent]# ls
ketama.c ketama.h magent.c Makefile
[root@www magent]# vim ketama.h
在行首添加下列三行內容:
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
[root@master magent]# ldconfig
修改Makefile文件第一行末尾加上 -lm
執行make命令,會在當前目錄產生一個magent命令
把此命令複製到/usr/local/bin/下面
[root@www magent]# cp magent /usr/local/bin/
檢測magent是否安裝正確
執行magent命令出現下列信息表示沒有問題。
memcached服務器啓動三個進程(memcached安裝前面文章已經說過不在安裝)
[root@bogon ~]# memcached -u root -p 11000 -P /opt/memcached1.pid -m 30m -d
[root@bogon ~]# memcached -u root -p 12000 -P /opt/memcached2.pid -m 30m -d
[root@bogon ~]# memcached -u root -p 13000 -P /opt/memcached3.pid -m 30m -d
啓動magent並制定連接到memcached節點,同時指定好哪個是memcached主節點那個是memcached備份節點,可以指多個。
[root@www ~]# magent -u root -n 51200 -l 192.168.200.101 -p 10000 -s 192.168.200.100:11000 -s 192.168.200.100:12000 -b 192.168.200.100:13000
magent 參數詳解:
-u 指定用戶,以root 用戶運行
-n 最大的連接數,默認不指定的話是4096
-l (小寫L),magent 對外監聽的IP 地址
-p magent 對外監聽的端口
-s 設置memcached 主緩存的IP 地址和端口
-b 設置memcached 備緩存的IP 地址和端口
客戶端使用telnet測試
客戶端寫入一個數據,會在其中一個主緩存節點中緩存起來,100:11000 或者100:12000 ,只會緩存在一個上面不會同時緩存在兩個主緩存節點上,
客戶端寫入的數據也會同時緩存在memcached備份節點中。
客戶端登錄magent輸入一條數據,並查詢是否輸入成功
查詢第一個主緩存memcached節點,發現可以查詢到
查詢到第二個主緩存節點發現沒有插入的數據證明了緩存數據只會在緩存在一個主緩存節點上面
查看備份節點可以查到插入的數據,說明備份節點已經把緩存數據保存了一份。
剛剛我們查詢到插入的數據存在了11000端口的那個memcached節點上面,現在我們關閉這個端口的節點再來查詢
可以發現雖然關閉了。但是還是可以查詢到我們插入的那條數據,說明備份節點起了作用。
然後重啓11000端口的memcached節點,並查看這個端口的節點是否還有我們剛剛插入的那條數據,會發現查詢不到因爲memcached是基於內存的不能持久保存重啓就會消失,
最後再次從magent代理服務器訪問插入的那條數據,還是可以訪問到。
memcached節點宕機或者重啓後數據丟失的問題解決了,現在我們只有一個magent代理服務器如果magent代理宕機了,這時候我們就要用到keepalived了。就提配置放在下一篇