简述
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)
[root@master ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/
Password for root@//192.168.100.3/LNMP-C7:
[root@master ~]# cd /mnt/memcached/
[root@master memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt/
[root@master memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/ ##事件库
[root@master memcached]# mkdir /opt/magent
[root@master memcached]# tar zxvf magent-0.5.tar.gz -C /opt/magent/
[root@master memcached]# yum install gcc gcc-c++ make -y
[root@master memcached]# cd /opt/libevent-2.1.8-stable/
[root@master libevent-2.1.8-stable]# ./configure --prefix=/usr/
[root@master libevent-2.1.8-stable]# cd ../memcached-1.5.6/
[root@master memcached-1.5.6]# ./configure /
> --with-libevent=/usr
[root@master magent]# systemctl stop firewalld.service
[root@master magent]# setenforce 0
2,配置主服务器,安装magent代理
[root@master memcached-1.5.6]# cd /opt/magent/
[root@master magent]# vim ketama.h ##修改magent配置文件
##首行修改添加
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif //此项如果有就不需要添加
[root@master magent]# vim Makefile ##编辑Makefile配置文件
##查找此项后面添加-lm
LIBS = -levent -lm
[root@master magent]# make ##编译后产生一个magent可执行程序
[root@master magent]# yum install openssh-clients -y
[root@master magent]# cp magent /usr/bin/ ##放到/usr/bin中
[root@master magent]# scp magent root@192.168.13.129:/usr/bin/
##拷贝到从服务器/usr/bin中
3,在主从服务器上配置安装keepalived
[root@master magent]# yum install keepalived -y ##安装keepalived服务
[root@master 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 //优先级低与主服务器
[root@master keepalived]# mkdir /opt/shell
[root@master keepalived]# cd /opt/shell/
[root@master 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 //指定从缓存服务器
[root@master shell]# chmod +x magent.sh ##执行权限
[root@master shell]# systemctl start keepalived.service ##开启服务
[root@master shell]# netstat -natp | grep 12000 ##查看端口
##验证主从
主服务器 ----- 查看 /var/log/messages 文件,找到关键词:Transition to MASTER STATE
从服务器 ----- 找到关键词:Entering BACKUP STATE
ip addr 命令 ----- 确定漂移地址生效
4,开启主从服务器memcache
主服务器:
[root@master shell]# memcached -m 512k -u root -d -l 192.168.13.128 -p 11211
[root@master shell]# netstat -natp | grep 11211
从服务器:
[root@slave shell]# memcached -m 512k -u root -d -l 192.168.13.129 -p 11211
[root@slave shell]# netstat -ntap | grep 11211
5,用客户端登录
[root@client ~]# yum install telnet -y ##安装登录工具
[root@client ~]# 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,查看是否主从同步
##在主服务器上查看是否有写入的数据
[root@master 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
##在从服务器上查看是否有写入的数据
[root@slave 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,宕机主服务器,查看是否可用,实现高可用
[root@master shell]# systemctl stop keepalived.service
[root@client ~]# telnet 192.168.13.100 12000 ##客户端仍然可以登录
Trying 192.168.13.100...
Connected to 192.168.13.100.
Escape character is '^]'.
谢谢阅读!
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/182863.html