memcached实现主主复制和keepalive高可用方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcached实现主主复制和keepalive高可用方式相关的知识,希望对你有一定的参考价值。
实验拓扑
实验环境
服务器 | IP地址 | 操作系统 | 主要软件 |
---|---|---|---|
memcached1 | 192.168.144.122 | centos7.3 | libevent2.1.8、memcached1.5.6、keepalive、telnet、magent0.5 |
memcached2 | 192.168.144.129 | centos7.3 | libevent、memcached、keepalive、telnet |
客户端 | 192.168.144.141 | centos7.3 | LAMP架构或telnet |
memcached1的配置
tar zvxf memcached-1.5.6.tar.gz -C /opt/
tar zvxf libevent-2.1.8-stable.tar.gz -C /opt/
- 1、首先安装libevent,指定安装路径即可,memcached2上相同操作
cd /opt/libevent-2.1.8-stable
./configure --prefix=/usr/local/libevent
make && make install
- 2、安装memcached,memcached2上相同操作
cd /opt/memcached-1.5.6
./configure
--prefix=/usr/local/memcached
--with-libevent=/usr/local/libevent/ #需要跟上事件通知库模块make && make install
- 3、让memcached命令可以让系统识别,memcached2上相同操作
ln -s /usr/local/memcached/bin/* /usr/local/bin/
- 4、将编译安装的libevent-2.1.so.6模块复制到/usr/lib64,否则在启动带有复制功能的memcached服务时会报错。
- memcached2上相同操作。
ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
- 5、memcached1安装magent,并且将生成的命令发送给memcached2,并在每一台服务器上该命令可以被系统识别。
tar magent-0.5.tar.gz -C /opt/
cd /opt
vi ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767 //前两行带#的改成这样
#endif //位置上调
systemctl stop firewalld.service
setenforce 0
vi Makefile
LIBS = -levent -lm -L/usr/local/libevent/lib //注意libevent的安装路径,否则make会报错
INCLUDE = -I/usr/local/libevent/include
- 6、生成magent程序
- 此处需要注意,在magent生成可执行程序之前需要关闭防火墙,不然无法make。
make
- 7、让magent程序为系统识别
cp magent /usr/local/bin/
- 8、将magent程序发送给memcached2,让其系统识别
scp magent [email protected]:/usr/bin/
两台服务器安装keepalived
- m1与m2两台服务器keepalive配置文件不同地方已经注明。
yum install keepalved -y
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id 001 //两台服务器不同
}
vrrp_script magent { //添加主主数据复制实例,函数名为magent,只要keepalive启动就可启动复制
script "/opt/shell/magent.sh" //设置magent启动脚本,注意后面脚本位置要与之相同
interval 2
}
vrrp_instance VI_1 {
state 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 {
192.168.144.188 //设置虚拟IP
}
}
memcached1创建主主复制监控脚本
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 192.168.144.188 -p 12000 -s 192.168.144.122:11211 -b 192.168.144.129:11211
else
pkill -9 magent
fi
-n 51200 //定义用户最大连接数
-l 192.168.175.188 //指定虚拟IP
-p 12000 //指定端口号
-s //指定主缓存服务器
-b //指定从缓存服务器
- 增加执行权限。
chmod +x /opt/shell/magent.sh
- memcached1上开启keepalive服务,以及memcache服务
memcached -d -m 32m -p 11211 -u root
systemctl start keepalived.service
memcached2创建主主复制监控脚本
vi magent.sh #注意脚本位置要跟配置文件中对应,不然调用执行
#!/bin/bash
K=`ip addr | grep 192.168.144.188 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
magent -u root -n 51200 -l 192.168.144.188 -p 12000 -s 192.168.144.122:11211 -b 192.168.144.129:11211
else
pkill -9 magent
fi
- 增加执行权限。
chmod +x /opt/shell/magent.sh
- memcached2上开启keepalive服务,以及memcache服务
memcached -d -m 32m -p 11211 -u root
systemctl start keepalived.service
在客户端测试
- 在客户端访问虚拟IP及虚拟端口
telnet 192.168.144.188 12000
- 在客户端写入数据
- 在两台服务器上进入本身数据库,数据被自动同步复制
add username 0 0 7
1234567
- 模拟故障,关闭m1的keepalive,客户端无感知,虚拟IP仍可登陆,且读写数据
systemctl stop keepalived.service
以上是关于memcached实现主主复制和keepalive高可用方式的主要内容,如果未能解决你的问题,请参考以下文章
Memcached 主主复制+ Keepalived 实现 Memcached 高可用架构集群
Memcached 主主复制 + Keepalived 高可用架构附上原理
Memcached高可用群集(Memcached主主复制+Keepalived)
领会Memcached高可用群集(Memcached主主复制+Keepalived)