dyok 发表于 2018-12-25 09:02:25

memcached实现主主复制和keepalive高可用方式

实验拓扑
http://i2.运维网.com/images/blog/201807/26/df039fd4b030d03a120ed23db2c86ade.png

实验环境




服务器
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 root@192.168.144.129:/usr/bin/


两台服务器安装keepalived


[*]m1与m2两台服务器keepalive配置文件不同地方已经注明。

  yum install keepalved -y      
vim /etc/keepalived/keepalived.conf


! Configuration File for keepalived
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 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




页: [1]
查看完整版本: memcached实现主主复制和keepalive高可用方式