memcache高群集架构——(实战!)

简述

?magent是一款开源的代理服务软件,我们可以通过它来实现缓存数据的同步,当然这里说的同步不是说memcached之间就能互相通讯了, 而magent可以同时连接多个memcached节点, 通过magent绑定的VIP从客户端登录memcached写入数据,其他节点的memcached数据也会同步。

实验环境

memcached主 192.168.13.128 (magent 、memcached 、libevent 、keeplived)
memcached从 192.168.13.129 (memcached 、 libevent 、keeplived)
client客户端 192.168.13.130 (telnet 测试工具)
虚拟ip 192.168.13.100

1,配置memcached主缓存节点和从缓存节点(两者配置相同,从中不需要安装magent)

[ ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/
Password for //192.168.100.3/LNMP-C7:  
[ ~]# cd /mnt/memcached/
[ memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt/
[ memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/  ##事件库
[ memcached]# mkdir /opt/magent
[ memcached]# tar zxvf magent-0.5.tar.gz -C /opt/magent/
[ memcached]# yum install gcc gcc-c++ make -y
[ memcached]# cd /opt/libevent-2.1.8-stable/
[ libevent-2.1.8-stable]# ./configure --prefix=/usr/
[ libevent-2.1.8-stable]# cd ../memcached-1.5.6/
[ memcached-1.5.6]# ./configure > --with-libevent=/usr
[ magent]# systemctl stop firewalld.service 
[ magent]# setenforce 0

2,配置主服务器,安装magent代理

[ memcached-1.5.6]# cd /opt/magent/
[ magent]# vim ketama.h  ##修改magent配置文件
##首行修改添加
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif //此项如果有就不需要添加
[ magent]# vim Makefile  ##编辑Makefile配置文件
##查找此项后面添加-lm
LIBS = -levent -lm
[ magent]# make ##编译后产生一个magent可执行程序
[ magent]# yum install openssh-clients -y  
[ magent]# cp magent /usr/bin/  ##放到/usr/bin中
[ magent]# scp magent :/usr/bin/  
 ##拷贝到从服务器/usr/bin中

3,在主从服务器上配置安装keepalived

[ magent]# yum install keepalived -y  ##安装keepalived服务
[ magent]# vim /etc/keepalived/keepalived.conf  ##修改配置文件
//定义一个函数,建议写在最前面(主服务器配置)
vrrp_script magent {
                script "/opt/shell/magent.sh"
                interval 2
            }

做如下修改:
router_id MAGENT_HA        //修改id名
interface ens33            //修改网卡信息

virtual_ipaddress {
                192.168.13.100     //定义好虚拟ip地址
        }   

vrrp_instance VI_1 {
.....
//调用函数.以下三行代码写在vrrp模块内
track_script {
                magent
            }

##从服务器上配置如下(可通过scp直接拷贝主服务器配置文件到从服务器)
router_id MAGENT_HB         //id名和第一台要不一样
state BACKUP               //从服务器
virtual_router_id 52       //id号和第一台不一样
priority 90                 //优先级低与主服务器 
[ keepalived]# mkdir /opt/shell
[ keepalived]# cd /opt/shell/
[ shell]# vim magent.sh   ##编辑magent脚本
#!/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.13.100 -p 12000 -s 192.168.13.128:11211 -b 192.168.13.129:11211
else
pkill -9 magent
fi

//
-n 51200             //定义用户最大连接数
-l 192.168.13.100   //指定虚拟IP
-p 12000             //指定端口号
-s                   //指定主缓存服务器
-b                   //指定从缓存服务器
[ shell]# chmod +x magent.sh   ##执行权限
[ shell]# systemctl start keepalived.service   ##开启服务
[ shell]# netstat -natp | grep 12000  ##查看端口
##验证主从
主服务器 ----- 查看 /var/log/messages 文件,找到关键词:Transition to MASTER STATE
从服务器 ----- 找到关键词:Entering BACKUP STATE
ip addr 命令 ----- 确定漂移地址生效

4,开启主从服务器memcache

主服务器:
[ shell]# memcached -m 512k -u root -d -l 192.168.13.128 -p 11211   
[ shell]# netstat -natp | grep 11211
从服务器:
[ shell]# memcached -m 512k -u root -d -l 192.168.13.129 -p 11211 
[ shell]# netstat -ntap | grep 11211

5,用客户端登录

[ ~]# yum install telnet -y  ##安装登录工具
[ ~]# telnet 192.168.13.100 12000  ##用虚拟ip登录
Trying 192.168.13.100...
Connected to 192.168.13.100.
Escape character is ‘^]‘.
add username 0 0 7   ##添加一个数据
1234567
STORED

6,查看是否主从同步

##在主服务器上查看是否有写入的数据
[ shell]# telnet 192.168.13.128 11211
Trying 192.168.13.128...
Connected to 192.168.13.128.
Escape character is ‘^]‘.
get username
VALUE username 0 7
1234567
END
##在从服务器上查看是否有写入的数据
[ shell]# telnet 192.168.13.129 11211
Trying 192.168.13.129...
Connected to 192.168.13.129.
Escape character is ‘^]‘.
get username
VALUE username 0 7
1234567
END

7,宕机主服务器,查看是否可用,实现高可用

[ shell]# systemctl stop keepalived.service
[ ~]# telnet 192.168.13.100 12000  ##客户端仍然可以登录
Trying 192.168.13.100...
Connected to 192.168.13.100.
Escape character is ‘^]‘.

谢谢阅读!