一、环境部署
centos7 主服务器 IP地址:20.0.0.15 memcached,libevent,keepalived,magent
centos7 从服务器 IP地址:20.0.0.16 memcached,libevent,keepalived
centos7 客户端 IP地址:20.0.0.17
漂移IP地址:20.0.0.200,是客户端登陆的IP地址
关闭防火墙、关闭核心防护。
【试验目的】
通过搭建memcache高可用群集,实现主从同步,群集高可用功能
【magent概述】
Magent是一款开源的Memcached代理服务器软件,采用的是:Consistent Hashing原理,可以通过它来实现缓存数据的同步
二、主从服务器搭建
2.1 修改主机名
主:
hostnamectl set-hostname master
su
从:
hostnamectl set-hostname slave
su
2.2 上传软件包并解压
yum -y install gcc gcc-c++ make
cd /opt
tar zxvf libevent-2.1.8-stable.tar.gz
//解压事件库
tar zxvf memcached-1.5.6.tar.gz
//解压源码包
mkdir /opt/magent
tar zxvf magent-0.5.tar.gz -C /opt/magent/
cd libevent-2.1.8-stable/
./configure --prefix=/usr
//指定libevent目录
make && make install
cd …/memcached-1.5.6/
./configure --with-libevent=/usr
make && make install
2.3 主服务器上安装magent代理
cd /opt/magent
vim ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
//前两行修改如上
vim Makefile
LIBS = -levent -lm
//首行后面添加-lm
make
//编译后会产生一个magent可执行程序
yum -y install openssh-clients
cp magent /usr/bin/
//将magent可执行程序复制到/usr/bin中
scp magent root@20.0.0.16:/usr/bin
//将magent可执行程序复制到从服务器的/usr/bin中
//此命令需要输入yes,输入从服务器的密码才能将文件拷贝过去,根据提示操作即可
2.4 主从服务器搭建keepalived
[root@master ~]# yum install keepalived -y
//主从服务器都要安装keepalived
2.5 主服务器中keepalived.conf配置文件修改
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script magent {
script “/opt/shell/magent.sh”
interval 2
}
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id MAGENT_HA
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
magent
}
virtual_ipaddress {
20.0.0.200
}
}
#############################################################
解释:
! Configuration File for keepalived
//此段落为:定义一个函数脚本,稍后我们需要创建它
vrrp_script magent {
script “/opt/shell/magent.sh”
interval 2
}
//全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id MAGENT_HA //router_id自定义,不可与从服务器相同
}
//实例区域
vrrp_instance VI_1 {
state MASTER //主服务器为MASTER,从服务器要改为BACKUP
interface ens33 //网卡改为本机网卡ens33
virtual_router_id 51 //主从不可相同,从服务器需要修改
priority 100 //优先级要高于从服务器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script { //此三行为调用函数的段落,配置文件开头已经添加了函数,此处需要调用
magent
}
virtual_ipaddress {
20.0.0.200 //定义漂移地址
}
}
#############################################################
2.6 从服务器中keepalived.conf配置文件修改
cd /etc/keepalived/
mv keepalived.conf keepalived.conf.bak
yum -y install openssh-clients
//回到主服务器,将配置文件复制到从服务器
[root@master ~]# scp /etc/keepalived/keepalived.conf root@20.0.0.16:/etc/keepalived
[root@slave keepalived]# vim keepalived.conf
//其他配置都相同,只需要修改如下几个配置
router_id MAGENT_HB //id名和第一台要不一样,从服务器改为MAGENT_HB
state BACKUP //从服务器为BACKUP
virtual_router_id 52 //id号和第一台不一样即可
priority 90 //优先级低与主服务器
2.7 在主从服务器创建magent脚本
mkdir /opt/shell
cd /opt/shell/
vim 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 20.0.0.200 -p 12000 -s 20.0.0.15:11211 -b 20.0.0.16:11211
else
pkill -9 magent
fi
#######################解释################################
-n 51200 //定义用户最大连接数
-l 20.0.0.200 //指定虚拟IP
-p 12000 //指定端口号
-s //指定主缓存服务器20.0.0.15:11211
-b //指定从缓存服务器20.0.0.16:11211
11211 //端口号
###########################################################
2.8 主从服务器启动服务
chmod +x magent.sh
systemctl start keepalived
netstat -ntap |grep 12000
tcp 0 0 20.0.0.200:12000 0.0.0.0:* LISTEN 60150/magent
2.9 验证主从
[root@master shell]# vim /var/log/messages
搜索Transition to MASTER STATE,有即成功
[root@master shell]# ip addr
//查看漂移地址是否绑定成功
。。。。。。。。。。。。。。。。。。。。
inet 20.0.0.200/32 scope global ens33 //绑定成功
。。。。。。。。。。。。。。。。。。。。
[root@slave keepalived]# vim /var/log/messages
搜索Entering BACKUP STATE,有即成功
[root@slave keepalived]# ip addr
//查看漂移地址是否绑定成功
。。。。。。。。。。。。。。。。。。。。。
inet 20.0.0.200/32 scope global ens33 //绑定成功
。。。。。。。。。。。。。。。。。。。。。
2.10 主从服务器开启memcache并测试本地连接
2.10.1 主从服务器开启memcache
[root@master ~]# memcached -m 512k -u root -d -l 20.0.0.15 -p 11211
[root@master ~]# netstat -ntap |grep 11211
tcp 0 0 20.0.0.15:11211 0.0.0.0:* LISTEN 61111/memcached
2.10.2 从服务器开启memcache
[root@slave keepalived]# memcached -m 512k -u root -d -l 20.0.0.16 -p 11211
[root@slave keepalived]# netstat -ntap |grep 11211
2.11 测试本地能否连接memcache
2.11.1 主服务器测试
yum install telnet -y
telnet 20.0.0.15 11211
2.11.2 从服务器测试
yum install telnet -y
telnet 20.0.0.16 11211
三、客户端测试
3.1 修改主机名
hostnamectl set-hostname client
su
3.2 客户端登陆memcache
yum install telnet -y
telnet 20.0.0.200 12000
//使用漂移地址登陆
3.3 测试主从同步
[root@client ~]# telnet 20.0.0.200 12000
add username 0 0 5
//客户端连接并新建一个数据
12345
STORED
//返回主服务器查看是否同步生成数据
telnet 20.0.0.15 11211
get username
VALUE username 0 5
12345
//主服务器成功生成
END
//返回从服务器查看是否同步生成数据
telnet 20.0.0.16 11211
get username
VALUE username 0 5
12345
//从服务器成功生成
END
//测试成功,主从都成功生成数据
3.4 测试高可用群集
//宕机主服务器,看从服务器是否正常使用
[root@master ~]# systemctl stop keepalived
//关闭主服务器keepalived服务
[root@client ~]# telnet 20.0.0.200 12000
//客户端登陆成功
set username 0 0 4 //修改一下数据
1234
STORED
//从服务器查看数据是否同步
get username
VALUE username 0 4
1234
//成功同步
END