• Memcached+magent+keepalived高可用集群

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

  • 案例环境
主机名称 IP 主要软件
memcached主 192.168.200.128 Magent、memcached、libevent、keeplived
memcached从 192.168.200.129 memcached、libevent、keeplived
客户端 192.168.200.130 telnet 测试
VIP 192.168.200.200

  • 配置memcached主、从缓存节点 -两台配置相同

      # tar xf memcached-1.5.6.tar.gz -C /opt/
      # tar xf libevent-2.1.8-stable.tar.gz -C /opt/
      # yum install gcc gcc-c++ make -y
    
      # cd /opt/libevent-2.1.8-stable
      # ./configure --prefix=/usr/local/libevent
      # make && make install
    
      # cd /opt/memcached-1.5.6
      # ./configure \
      --prefix=/usr/local/memcached \
      --with-libevent=/usr/local/libevent/
      # make && make install
    
      # ln -s /usr/local/memcached/bin/* /usr/local/bin/    
    
  • 将安装libevent-2.1.so.6的模块复制到 /usr/lib64目录下

  • 否则在启动Magent时会出错

      # ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
    

  • 在主服务器安装Magent

  • 主服务器

      # mkdir /opt/magent
      # tar zxvf magent-0.5.tar.gz -C /opt/magent 
      # cd /opt/magent
    
  • 编译安装前需要修改文件 否则会报错

      # vi ketama.h   //修改下面3行
      		#ifndef SSIZE_MAX
      		#define SSIZE_MAX 32767
      		#endif
    
      # vi Makefile  //添加路径
      	LIBS = -levent -lm -L/usr/local/libevent/lib 
      	INCLUDE=-I/usr/local/libevent/include
    
      # make 
    
  • 编译后会生成一个可执行文件

	# cp magent /usr/bin/      //把生成的mgent程序让系统识别

   

  • 从服务器

  • 从服务器不装 直接拷贝过去

     # yum install openssh-clients    //安装远程连接工具
     # scp magent root@192.168.200.129:/usr/bin/      //把产生的magent文件直接复制到从服务器。
    

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

  • 配置不同出已经标注

      # yum install keepalived -y
      # vi /etc/keepalived/keepalived.conf 
       router_id MAGENT_HA               //主从不同 自定义
      	下面删除4行
      }
      
      //调用这个脚本每2秒检查一次magent状态
      vrrp_script magent {
      				script "/opt/shell/magent.sh"
      				interval 2
      }
      vrrp_instance VI_1 {
      		state MASTER                    // 从服务器这里是BACKUP
      		interface ens33                  
      		virtual_router_id 51             //虚拟路由ID ,主从相同
      		priority 100                         //优先级  从要小于主
      		advert_int 1
      		authentication {
      				auth_type PASS
      				auth_pass 1111
      		}
      track_script {              //调用上面定义的脚本
      				magent
      }
    
      virtual_ipaddress {                       //定义虚拟IP
      192.168.200.200
      }
      }
    
  • 主服务器上

  • 写magent.sh 脚本

      # mkdir -p /opt/shell/
      # cd /opt/shell/
      # vi 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.200.200 -p 12000 -s 192.168.200.128:11211 -b 192.168.200.129:11211
      	else
      	pkill -9 magent
      	fi
    

  • 脚本选项解释

      -n 51200 //定义用户最大连接数
      -l    //指定虚拟IP
      -p 12000  //指定端口号
      -s //指定主缓存服务器
      -b //指定从缓存服务器
    
      # chmod +x magent.sh 
      # systemctl start keepalived.service
      # ip addr  //查看VIP
    

  • 从服务器上

  • 写magent.sh 脚本

      # mkdir -p /opt/shell/
      # cd /opt/shell/
      # vi magent.sh
      	#!/bin/bash
      	K=`ip addr | grep 192.168.200.200 | grep -v grep | wc -l`
      	if [ $K -gt 0 ]; then
      					magent -u root -n 51200 -l 192.168.200.200 -p 12000 -s 192.168.200.128:11211 -b 192.168.200.129:11211
      	else
      	pkill -9 magent
      	fi  
    

	# chmod +x magent.sh 
	# systemctl start keepalived.service

  • 在两台服务器上启动memcached

      # memcached -d -m 32m -p 11211 -u root  
    

  • 在客户端测试

  • 测试数据同步

  • 测试keepalived主从热备份( 将主节点宕机,在从节点上查看VIP,VIP已经漂移过来了)

      # yum install telnet -y
      # telnet 192.168.200.200 12000