Memcached+keepalived+magent实现主从复制和高可用

Memcached+keepalived+magent实现主从复制和高可用

实验介绍

memcached以前并不能直接通讯,因此memcached自己并不能完整备份全部的数据。这时候我么可使用magent代理memcached实现主从备份,从而来保证缓存数据的完整性。算法

这中间的工做原理以下:shell

  • 数据在到达memcached服务器前会通过magent,每次写数据到主memcached服务器,magent会同时写到从服务器上,而且主从服务器写的算法同样。
  • 当主memcached服务器宕掉以后,magent会向从memcached服务器中读取数据
  • 当memcached恢复后,magent将从新从主memcached中读取数据,此时因为主memcached刚恢复正常,因此在宕掉期间的数据是没法获取的,这也是magent的缺点。

Memcache主从复制指在主Memcached服务器上修改数据都会被同步到从服务器上,可是Memcached API客户端是没法判断链接到哪一台Memcached服务器的,因此须要经过keepalived设置VIP地址,提供给Memcached API客户端以及magent链接访问。vim

实验环境

名称 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:bash

[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只须要在主服务器上安装,生成一个可执行文件,将这个文件复制到从服务器上便可。ide

[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移动到头两行下面

Memcached+keepalived+magent实现主从复制和高可用

[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

Memcached+keepalived+magent实现主从复制和高可用

[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目录下

Memcached+keepalived+magent实现主从复制和高可用

部署keepalived

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

Memcached+keepalived+magent实现主从复制和高可用
其余多余的配置直接删除,从服务器的keepalived配置文件也要修改。
Memcached+keepalived+magent实现主从复制和高可用memcached

编写主服务器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服务,查看主服务器状态。
Memcached+keepalived+magent实现主从复制和高可用
Memcached+keepalived+magent实现主从复制和高可用
查看从服务器状态。函数

模拟宕机

这时候你们必定疑惑为何主服务器的12000端口仍是开启的呢,我认为因为咱们模拟宕机的方法是中止keepalived服务,因此keepalived中的检测脚本不会再执行,因此里面的pkill -9 magent这条命令不会再执行了。
Memcached+keepalived+magent实现主从复制和高可用
Memcached+keepalived+magent实现主从复制和高可用3d

相关文章
相关标签/搜索