雷锋 发表于 2018-12-25 09:18:59

memcached + keepavlied + magent 实现高可用

  系统环境
服务器名称
IP地址
操作系统
软件包
用途
VIP地址
nosql1.linuxplus.com
172.16.216.185
Centos 7.5
libevent-devel,memcached,magent
主节点
172.16.216.200
nosql2.linuxplus.com172.16.216.186Centos 7.5libevent-devel,memcached,magent备份节点
nosql3.linuxplus.com172.16.216.187Centos 7.5telnet
测试节点
  安装magent
# mkdir /opt/software/magent
# tar xf magent-0.5.tar.gz -C /opt/software/magent
# cd magent/
# ls
ketama.cketama.hmagent.cMakefile
# vim ketama.h
#ifndef _KETAMA_H
#define _KETAMA_H
添加:
#ifndef SSIZE_MAX                     
#define SSIZE_MAX 32767
#endif
# vim Makefile
LIBS = -levent -lm                      #首行LIBS = -levent后加上-lm
# make
gcc -Wall -O2 -g-c -o magent.o magent.c
gcc -Wall -O2 -g-c -o ketama.o ketama.c
gcc -Wall -O2 -g -o magent magent.o ketama.o -levent -lm
# ls
ketama.cketama.hketama.omagentmagent.cmagent.oMakefile
# cp magent /usr/bin
# scp magent root@172.16.216.186:/usr/bin  安装配置keepalived

[*]  nosql1.linuxplus.com
# yum install keepalived
# cd /etc/keepalived/
# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
devops@qq.com
}
notification_email_from devops@qq.com
smtp_server mail.qq.com
smtp_connect_timeout 30
router_id devops_MA
enable_script_security
}
vrrp_script magent {
       script "/opt/magent.sh"
       interval 2
       user root
}
vrrp_instance devops_ha {
   state MASTER
   interface ens33
   virtual_router_id 51
   priority 180
   advert_int 1
   nopreempt
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       172.16.216.200
   }
track_script {
       magent
}
}
# vim /opt/magent.sh
#!/bin/bash
mem=$(ps -ef | grep keepalived | grep -v grep | wc -l)
if [ $mem -gt 0 ]
then
      magent -u devops -n 51200 -l 172.16.216.200 -p 12000 -s 172.16.216.185:11211 -b 172.16.216.186:11211
      /usr/local/memcached/bin/memcached -u devops -m 128 -d
else
pkill -9 magent
fi
# systemctl start keepalived.service
# netstat -ntap | grep 12000
tcp      0      0 172.16.216.200:12000    0.0.0.0:*               LISTEN      16649/magent
# netstat -tulnp |grep 11211
tcp      0      0 0.0.0.0:11211         0.0.0.0:*               LISTEN      13959/./memcached   
tcp6       0      0 :::11211                :::*                  LISTEN      13959/./memcached参数:

[*]  -n:定义最大连接数


[*]  -l:指定虚拟IP


[*]  -p:指定虚拟IP的端口号


[*]  -s:指定主缓存服务器


[*]  -b:指定从缓存服务器
         https://images-cdn.shimo.im/mFNyryHwbrI3V4Md/image.png!thumbnail   

[*]  nosql2.linuxplus.com
# yum install keepalived
# cd /etc/keepalived/
# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
devops@qq.com
}
notification_email_from devops@qq.com
smtp_server mail.qq.com
smtp_connect_timeout 30
router_id devops_MB
enable_script_security
}
vrrp_script magent {
       script "/opt/magent.sh"
       interval 2
       user root
}
vrrp_instance devops_ha {
   state BACKUP
   interface ens33
   virtual_router_id 52
   priority 90
   advert_int 1
   nopreempt
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       172.16.216.200
   }
   track_script {
       magent
}
}
# vim /opt/magent.sh
#!/bin/bash
mem=$(ip addr | grep 172.16.216.200 | grep -v grep | wc -l)
if [ $mem -gt 0 ]
then
      magent -u devops -n 51200 -l 172.16.216.200 -p 12000 -s 172.16.216.185:11211 -b 172.16.216.186:11211
      /usr/local/memcached/bin/memcached -u devops -m 128 -d
else
pkill -9 magent
fi
# systemctl start keepalived.service
# netstat -tulnp |grep 12000
tcp      0      0 172.16.216.200:12000    0.0.0.0:*               LISTEN      27343/magent      
# netstat -tulnp |grep 11211
tcp      0      0 0.0.0.0:11211         0.0.0.0:*               LISTEN      13959/./memcached   
tcp6       0      0 :::11211                :::*                  LISTEN      13959/./memcached         https://images-cdn.shimo.im/FP1R1mb4xEo7OZ6c/image.png!thumbnail   
  测试验证
# telnet 172.16.216.200 12000
Trying 172.16.216.200...
Connected to 172.16.216.200.
Escape character is '^]'.
set username 0 0 11
devopsadmin
STORED
get username
VALUE username 0 11
devopsadmin
END
# telnet 172.16.216.185 11211
Trying 172.16.216.185...
Connected to 172.16.216.185.
Escape character is '^]'.
get username
VALUE username 0 11
devopsadmin
END
quit
Connection closed by foreign host.
# telnet 172.16.216.186 11211
Trying 172.16.216.186...
Connected to 172.16.216.186.
Escape character is '^]'.
get username
VALUE username 0 11
devopsadmin
END
quit
Connection closed by foreign host.


页: [1]
查看完整版本: memcached + keepavlied + magent 实现高可用