Magent +memcached 集群搭建
Magent用于搭建memcached集群
首先按上述安装好libevent跟memcached(不会安装的朋友可以看我另一篇博文有安装说明 地址是http://blog.csdn.net/lkl_csdn/article/details/72982209)
1. 执行命令 mkdir /usr/magent
mkdir /usr/magent
2. 执行命令 tar -zxvf magent-0.5.tar.gz -C /usr/magent/
tar -zxvf magent-0.5.tar.gz -C /usr/magent/
3. 执行命令 cd /usr/magent/
cd /usr/magent/
4. 执行命令 Make
make
5. 出现以下错误
gcc -Wall -O2 -g -c -o magent.o magent.c
magent.c:64:19: 错误:event.h:没有那个文件或目录
magent.c:123: 错误:字段‘ev’的类型不完全
magent.c:153: 错误:字段‘ev’的类型不完全
magent.c: 在函数‘server_free’中:
magent.c:467: 警告:隐式声明函数‘event_del’
magent.c: 在函数‘put_server_into_pool’中:
magent.c:521: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c: 在函数‘writev_list’中:
magent.c:623: 错误:‘SSIZE_MAX’未声明(在此函数内第一次使用)
magent.c:623: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
magent.c:623: 错误:所在的函数内也只报告一次。)
magent.c: 在函数‘out_string’中:
magent.c:695: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:698: 警告:隐式声明函数‘event_set’
magent.c:698: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:699: 警告:隐式声明函数‘event_add’
magent.c: 在函数‘do_transcation’中:
magent.c:815: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:817: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:817: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c: 在函数‘start_backup_transcation’中:
magent.c:901: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:903: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:903: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c: 在函数‘try_backup_server’中:
magent.c:993: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:995: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:995: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c: 在函数‘drive_memcached_server’中:
magent.c:1013: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1059: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:1061: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘process_get_response’中:
magent.c:1235: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1237: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘process_update_response’中:
magent.c:1282: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1284: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘drive_backup_server’中:
magent.c:1304: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1342: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:1342: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c: 在函数‘drive_client’中:
magent.c:1617: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:1668: 错误:‘EV_WRITE’未声明(在此函数内第一次使用)
magent.c:1681: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘server_accept’中:
magent.c:1733: 错误:‘sizeof’不能用于不完全的类型‘struct event’
magent.c:1734: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:1734: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c: 在函数‘main’中:
magent.c:2105: 警告:隐式声明函数‘event_init’
magent.c:2110: 错误:‘EV_READ’未声明(在此函数内第一次使用)
magent.c:2110: 错误:‘EV_PERSIST’未声明(在此函数内第一次使用)
magent.c:2120: 警告:隐式声明函数‘event_loop’
make: *** [magent.o] 错误 1
6.执行命令 vim Makefile
vim Makefile
添加 INCLUDE以及修改LIBS如下图所示:(手动输入,切不可复制粘帖)
LIBS = -levent 0lm -L/usr/libevent/lib
INCLUDE = -I/usr/libevent/include
/usr/libevent/ 为你安装的libevent所在的目录
保存退出
7.执行命令 make
make
8.出现以下错误
9. 执行命令 vim ketama.h
vim ketama.h
内容如下图所示
添加的内容是 #ifndef SSIZE_MAX 第一行
#define SSIZE_MAX 32767 第四行
#endif 如下图所示
10.执行命令 Make
make
安装magent成功
11. 执行命令 magent,查看magent是否可以启动 ,报如下错误
我们把magent复制到/usr/bin/magent,执行#cp magent /usr/bin/magent
12. 执行命令 cp magent /usr/bin/magent
cp magent /usr/bin/magent
13. 执行命令 magent报以下错误时
magent
我们把libevent-2.0.so.5放到/usr/lib文件下,就可以
14. 执行命令 ln -s /usr/libevent/lib/libevent-2.0.so.5 /usr/lib
ln -s /usr/libevent/lib/libevent-2.0.so.5 /usr/lib
15. 执行命令 Magent
magent
还是这个错,没事,继续后面的
16. 执行命令 ldd /usr/memcached/bin/memcached
ldd /usr/memcached/bin/memcached
17. 执行命令 ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
18. 执行命令 ldd /usr/memcached/bin/memcached
ldd /usr/memcached/bin/memcached
19. 执行命令 magent
magent
Magent 安装成功
20. 开启 memcached 服务 这里开了5个服务 端口分别是11211 11212 11213 11214 11215
执行命令
/usr/memcached/bin/memcached -d -m 10m -p 11211 -u root
/usr/memcached/bin/memcached -d -m 10m -p 11212 -u root
/usr/memcached/bin/memcached -d -m 10m -p 11213 -u root
/usr/memcached/bin/memcached -d -m 10m -p 11214 -u root
/usr/memcached/bin/memcached -d -m 10m -p 11215 -u root
21. 执行命令 ps -ef | grep memcached查询是否开启成功
ps -ef | grep memcached
22. 执行命令 magent -u root -n 65535 -p 11210 -s 192.168.1.9:11211 -s 1192.168.1.9:11212 -s 1192.168.1.9:11213 -s 1192.168.1.9:11214 -b 192.168.1.9:11215开启magent
magent -u root -n 65535 -p 11210 -s 192.168.1.9:11211 -s 1192.168.1.9:11212 -s 1192.168.1.9:11213 -s 1192.168.1.9:11214 -b 192.168.1.9:11215
如图所示,开启成功
Magent + memcached 集群测试
23. 开启5个memcached服务(已开启就不用开启直接检测是否开启成功)
/usr/memcached/bin/memcached -d -m 10m -p 10001 -u root
/usr/memcached/bin/memcached -d -m 10m -p 10002 -u root
/usr/memcached/bin/memcached -d -m 10m -p 10003 -u root
/usr/memcached/bin/memcached -d -m 10m -p 10004 -u root
/usr/memcached/bin/memcached -d -m 10m -p 10005 -u root
24. 检测是否开启成功 执行命令 ps -ef | grep memcached
ps -ef | grep memcached
开启成功
25. 启动magent 设置启动参数
-u当然是启动账号
-n是最大连接数,
-l是magent监听的IP
-p是magent监听的端口 后面的格式依次是
-s IP:端口 代表是主服务器 然后指定IP:端口的格式
-b IP:端口的意思是 备用服务器,
这里我设置了10001,10002,10003为主Memcached服务器1000410005为memcached备份服务器
执行命令 magent -u root -n 51200 -l 192.168.1.9 -p 12000 -s 192.168.1.9:10001 -s 192.168.1.9:10002 -s 192.168.1.9:10003 -b 192.168.1.9:10004 -b 192.168.1.9:10005启动magent
magent -u root -n 51200 -l 192.168.1.9 -p 12000 -s 192.168.1.9:10001 -s 192.168.1.9:10002 -s 192.168.1.9:10003 -b 192.168.1.9:10004 -b 192.168.1.9:10005
26. 执行命令 ps -ef | grep magent 检查是否启动成功
ps -ef | grep magent
如上图 启动成功
27. 直接连接magent 端口 12000 执行命令telnet 192.168.1.9 12000 (没安装telne的可以看我另一篇博文安装telnet 地址是http://blog.csdn.net/lkl_csdn/article/details/72977708 )
telnet 192.168.1.9 12000
执行命令 stats
stats
说明magent 里面已经负载了3个memcached端口
接着我们继续set 如图:
执行命令get key1 get key2 get key3 看看是否有值
到此,一个缓存写入已经存取的过程就完成了
28.连接其中一个 memcached 服务 看看是否有值 如图
在连接 10002端口 如图
说明10002上缓存的key2啊,
这样不难看出10003上应该是缓存的key3了
在连接 10003 如图
29. 知道了主服务器是分发负载的,不知道备用服务器是不是这样,试试备用如图
30. 然后把主服务器的10001 10002 10003的进程全部kill了 看看值影不影响取值
31. 然后在magent 看看能否取值
并不影响取值
32. 在把备用的也 kill 掉试试
33. 在去取值
已经不能取
34. 在启动看看 能不能把值在给set进去
35.先stats , 然后在magent里set值试试
可以set值进去
36. 在到memcached看看能否取值
如图
有值。测试成功