上一篇我们说过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了。就提配置放在下一篇