• 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 
  • 编译后会生成一个可执行文件

部署Memcached+magent+keepalived高可用集群

    # 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

    部署Memcached+magent+keepalived高可用集群

  • 脚本选项解释

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

    部署Memcached+magent+keepalived高可用集群

  • 从服务器上
  • 写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  

    部署Memcached+magent+keepalived高可用集群

    # 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  

    部署Memcached+magent+keepalived高可用集群
    部署Memcached+magent+keepalived高可用集群