设为首页 收藏本站
查看: 999|回复: 0

[经验分享] Memcached+keepalived+magent实现主从复制和高可用

[复制链接]

尚未签到

发表于 2018-12-24 12:56:27 | 显示全部楼层 |阅读模式
Memcached+keepalived+magent实现主从复制和高可用

实验介绍
  memcached之前并不能直接通信,所以memcached本身并不能完整备份所有的数据。这时候我么可以使用magent代理memcached实现主从备份,从而来保证缓存数据的完整性。
  这中间的工作原理如下:


  • 数据在到达memcached服务器前会经过magent,每次写数据到主memcached服务器,magent会同时写到从服务器上,并且主从服务器写的算法一样。
  • 当主memcached服务器宕掉之后,magent会向从memcached服务器中读取数据
  • 当memcached恢复后,magent将重新从主memcached中读取数据,此时由于主memcached刚恢复正常,所以在宕掉期间的数据是无法获取的,这也是magent的缺点。
  Memcache主从复制指在主Memcached服务器上修改数据都会被同步到从服务器上,但是Memcached API客户端是无法判断连接到哪一台Memcached服务器的,所以需要通过keepalived设置VIP地址,提供给Memcached API客户端以及magent连接访问。

实验环境


名称
IP地址




memcached主服务器
192.168.58.135


memcached从服务器
192.168.58.132

实验实施

配置memcached主从服务器节点(主从服务器上都要做的)
  安装memcached需要libevent的支持,所以需要先安装libevent。先解压libevent值指定目录:

[root@localhost mnt]# tar xf libevent-2.1.8-stable.tar.gz -C /opt/
[root@localhost mnt]# cd /opt/libevent-2.1.8-stable/
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr
#进行配置
[root@localhost libevent-2.1.8-stable]# make && make install
#进行编译和安装
  安装memcached:

[root@localhost mnt]# tar xf memcached-1.5.6.tar.gz -C /opt/
#将软件包解压到指定目录中
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr
#配置,开启libevent功能,后面加上上面安装的路径
[root@localhost memcached-1.5.6]# make && make install
#编译和安装
  将libevent的函数模块建立软链接到系统可以识别的目录下

[root@localhost lib64]# ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
  以上是主从服务器都需要安装的软件,magent只需要在主服务器上安装,生成一个可执行文件,将这个文件复制到从服务器上即可。

[root@localhost mnt]# tar xf magent-0.5.tar.gz -C /opt/
#将magent解压到指定目录下
[root@localhost opt]# vim ketama.h
#修改这个文件
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
#修改文件最大值,将最后一行的#endif移动到头两行下面


[root@localhost opt]# vim Makefile
#修改Makefile
LIBS = -levent -lm
#这句话是连接函数库,Linux的库命名是一致的,一般为libxxx.so,或libxxx.a,libxxx.la,那么你要链接某个库就用-lxxx,去掉头lib及"."后面的so,la,a等即可。
#因为数学函数位于libm.so库文件中(通常在/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找.
CFLAGS = -Wall -O2 -g
CC = gcc


[root@localhost opt]# make
#生成一个可执行文件
[root@localhost opt]# ln -s /opt/magent /usr/bin
#把生成的mgent程序让系统识别,加入到环境变量中,方便系统识别,记得建立软链接一定要用绝对路径
[root@localhost opt]# scp magent root@192.168.58.132:/usr/bin/
#使用scp将生成的magent文件复制到从服务器/usr/bin目录下


部署keepalived

[root@localhost opt]# yum install keepalived -y
#通过yum仓库安装keepalived
[root@localhost opt]# vim /etc/keepalived/keepalived.conf
#修改keepalived.conf配置文件

其他多余的配置直接删除,从服务器的keepalived配置文件也要修改。


编写主服务器magent脚本

[root@localhost ~]# mkdir -p /opt/shell
[root@localhost ~]# vim /opt/shell/magent.sh
#!/bin/bash
K=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
magent -u root -n 51200 -l 192.168.58.100 -p 12000 -s 192.168.58.135:11211 -b 192.168.58.132:11211
else
pkill -9 magent
fi
-n 51200 #定义用户最大连接数
-l 192.168.58.100 #指定虚拟IP
-p 12000  #指定端口号
-s #指定主缓存服务器
-b #指定从缓存服务器
#这个脚本意思就是一旦检测出系统进程中有keepalived进程,就执行magent这条命令,如果没有,则将magent进程杀死。总得来说就是,加入主服务器上没有keepslived进程,magent就会和从服务器连接。
[root@localhost ~]# chmod +x /opt/shell/magent.sh
#给脚本添加执行权限
编写从服务器magent脚本

[root@localhost ~]# mkdir -p /opt/shell
[root@localhost ~]# vim /opt/shell/magent.sh
#!/bin/bash
K=`ip addr | grep 192.168.58.100 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
magent -u root -n 51200 -l 192.168.58.100 -p 12000 -s 192.168.58.135:11211 -b 192.168.58.132:11211
else
pkill -9 magent
fi  
#从服务器的脚本意思就是一旦检测到虚拟ip漂移到自己身上,就会执行magent这条命令,目的就是在主服务器宕掉的时候,从服务器能够正常启动。
~      
  启动主从服务器的keepalived和memcached服务,查看主服务器状态。


查看从服务器状态。

模拟宕机
  这时候大家一定疑惑为什么主服务器的12000端口还是开启的呢,我认为由于我们模拟宕机的方法是停止keepalived服务,所以keepalived中的检测脚本不会再执行,所以里面的pkill -9 magent这条命令不会再执行了。






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655312-1-1.html 上篇帖子: Memcached实战之复制 下篇帖子: Memcached 安装及启动脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表