memcache高群集架构——(实战!)
简述
?magent是一款开源的代理服务软件,我们可以通过它来实现缓存数据的同步,当然这里说的同步不是说memcached之间就能互相通讯了, 而magent可以同时连接多个memcached节点, 通过magent绑定的VIP从客户端登录memcached写入数据,其他节点的memcached数据也会同步。
实验环境
memcached主 192.168.13.128 (magent 、memcached 、libevent 、keeplived) memcached从 192.168.13.129 (memcached 、 libevent 、keeplived) client客户端 192.168.13.130 (telnet 测试工具) 虚拟ip 192.168.13.100
1,配置memcached主缓存节点和从缓存节点(两者配置相同,从中不需要安装magent)
[ ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ Password for //192.168.100.3/LNMP-C7: [ ~]# cd /mnt/memcached/ [ memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt/ [ memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/ ##事件库 [ memcached]# mkdir /opt/magent [ memcached]# tar zxvf magent-0.5.tar.gz -C /opt/magent/ [ memcached]# yum install gcc gcc-c++ make -y [ memcached]# cd /opt/libevent-2.1.8-stable/ [ libevent-2.1.8-stable]# ./configure --prefix=/usr/ [ libevent-2.1.8-stable]# cd ../memcached-1.5.6/ [ memcached-1.5.6]# ./configure > --with-libevent=/usr [ magent]# systemctl stop firewalld.service [ magent]# setenforce 0
2,配置主服务器,安装magent代理
[ memcached-1.5.6]# cd /opt/magent/ [ magent]# vim ketama.h ##修改magent配置文件 ##首行修改添加 #ifndef SSIZE_MAX #define SSIZE_MAX 32767 #endif //此项如果有就不需要添加 [ magent]# vim Makefile ##编辑Makefile配置文件 ##查找此项后面添加-lm LIBS = -levent -lm [ magent]# make ##编译后产生一个magent可执行程序 [ magent]# yum install openssh-clients -y [ magent]# cp magent /usr/bin/ ##放到/usr/bin中 [ magent]# scp magent :/usr/bin/ ##拷贝到从服务器/usr/bin中
3,在主从服务器上配置安装keepalived
[ magent]# yum install keepalived -y ##安装keepalived服务 [ magent]# vim /etc/keepalived/keepalived.conf ##修改配置文件 //定义一个函数,建议写在最前面(主服务器配置) vrrp_script magent { script "/opt/shell/magent.sh" interval 2 } 做如下修改: router_id MAGENT_HA //修改id名 interface ens33 //修改网卡信息 virtual_ipaddress { 192.168.13.100 //定义好虚拟ip地址 } vrrp_instance VI_1 { ..... //调用函数.以下三行代码写在vrrp模块内 track_script { magent } ##从服务器上配置如下(可通过scp直接拷贝主服务器配置文件到从服务器) router_id MAGENT_HB //id名和第一台要不一样 state BACKUP //从服务器 virtual_router_id 52 //id号和第一台不一样 priority 90 //优先级低与主服务器 [ keepalived]# mkdir /opt/shell [ keepalived]# cd /opt/shell/ [ shell]# vim magent.sh ##编辑magent脚本 #!/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.13.100 -p 12000 -s 192.168.13.128:11211 -b 192.168.13.129:11211 else pkill -9 magent fi // -n 51200 //定义用户最大连接数 -l 192.168.13.100 //指定虚拟IP -p 12000 //指定端口号 -s //指定主缓存服务器 -b //指定从缓存服务器 [ shell]# chmod +x magent.sh ##执行权限 [ shell]# systemctl start keepalived.service ##开启服务 [ shell]# netstat -natp | grep 12000 ##查看端口 ##验证主从 主服务器 ----- 查看 /var/log/messages 文件,找到关键词:Transition to MASTER STATE 从服务器 ----- 找到关键词:Entering BACKUP STATE ip addr 命令 ----- 确定漂移地址生效
4,开启主从服务器memcache
主服务器: [ shell]# memcached -m 512k -u root -d -l 192.168.13.128 -p 11211 [ shell]# netstat -natp | grep 11211 从服务器: [ shell]# memcached -m 512k -u root -d -l 192.168.13.129 -p 11211 [ shell]# netstat -ntap | grep 11211
5,用客户端登录
[ ~]# yum install telnet -y ##安装登录工具 [ ~]# telnet 192.168.13.100 12000 ##用虚拟ip登录 Trying 192.168.13.100... Connected to 192.168.13.100. Escape character is ‘^]‘. add username 0 0 7 ##添加一个数据 1234567 STORED
6,查看是否主从同步
##在主服务器上查看是否有写入的数据 [ shell]# telnet 192.168.13.128 11211 Trying 192.168.13.128... Connected to 192.168.13.128. Escape character is ‘^]‘. get username VALUE username 0 7 1234567 END ##在从服务器上查看是否有写入的数据 [ shell]# telnet 192.168.13.129 11211 Trying 192.168.13.129... Connected to 192.168.13.129. Escape character is ‘^]‘. get username VALUE username 0 7 1234567 END
7,宕机主服务器,查看是否可用,实现高可用
[ shell]# systemctl stop keepalived.service [ ~]# telnet 192.168.13.100 12000 ##客户端仍然可以登录 Trying 192.168.13.100... Connected to 192.168.13.100. Escape character is ‘^]‘.