设为首页 收藏本站
查看: 1024|回复: 0

[经验分享] Magent + Keepalived实现Memcached高可用群集

[复制链接]

尚未签到

发表于 2018-12-24 11:16:17 | 显示全部楼层 |阅读模式
Memcached的特点:



  • 在Memcached中可以保存的item数据量是没有限制的,只要内存足够;
  • Memcached单进程最大使用内存为2GB,要使用更多内存,可以分别在不同端口启动多个Memcached进程;
  • Memcached是一种无阻塞的socket通信方式的服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快;
  • Memcached分为服务器和客户端,可以配置多个服务器和客户端,应用于分布式的服务非常广泛;
  • Memcached作为小规模的数据分布式平台是非常高效的;


Memcached存在的问题:

  本身没有内置分布式功能,无法实现使用多台Memcachd服务器来存储不同的数据,最大程度的使用相同的资源;无法同步数据,容易造成单点故障,这里可以通过Memcached代理实现集群功能;


集群

  由于Mamcached服务器与服务器之间没有任何通信,并且不进行任何数据复制备份,所以当任何服务器节点出现故障时,会出现单点故障,如果需要实现高可用,就需要通过其他方式。这里通过Magent缓存代理,防止单点现象,缓存代理也可以做备份功能,通过客户端连接到缓存代理了服务器,缓存代理服务器连接缓存连接复苏期,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步,如果其中有一台缓存服务器down了,系统依然可以继续工作,如果其中一台Memcached机器down了,数据不会丢失并且可以保证数据的完整性。


架构图


系统环境


主机名
操作系统
IP地址
软件包




Memcached1
Centos 7.3 x86_64
192.168.96.16
libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、magent-0.5.tar.gz、keepalived


Memcached2
Centos 7.3 x86_64
192.168.96.17
libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、keepalived


客户端
Centos 7.3 x86_64
192.168.96.22
telnet
  相关软件包:百度云盘 密码:b7za

开始部署

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

1.关闭防火墙机及Selinux[重要]

setenforce 0
systemctl stop firewalld.service
2.安装环境包

yum -y install gcc gcc-c++ make
3.编译安装libevent(必须先安装)

#解压
tar zxvf libevent-2.1.8-stable.tar.gz -C /opt
#切换到libevent目录
cd /opt/libevent-2.1.8-stable/
#配置
./configure --prefix=/usr/
#编译及安装
make && make install
3.编译安装memcached

#解压
tar zxvf memcached-1.5.9.tar.gz -C /opt/
#切换到memcached
cd /opt/memcached-1.5.9/
#配置(指定libevent路径)
./configure --with-libevent=/usr/
#编译及安装
make && make install
4.优化启动(支持复制功能的Mencached需要安装后的libevent-2.1.so.6模块,不然启动服务会报错)

ln -s /usr/lib/libevent-2.1.so.6  /usr/lib64/libevent-2.1.so.6
5.分别在两台服务器上启动memcached

#主服务器
memcached -m 512k -u root -d -l 192.168.96.16 -p 11211
#从服务器
memcached -m 512k -u root -d -l 192.168.96.17 -p 11211
6.检查memcached是否启动

netstat -ntap | grep 11211



magent在主服务器安装,从服务器不用安装

编译安装magent

1.创建magent目录
  mkdir /opt/magent

2.解压
  tar zxvf magent-0.5.tar.gz -C /opt/magent

3.切换到目录
  cd /opt/magent

4.让动态链接库为系统所共享
  /sbin/ldconfig

5.编辑ketama.h,添加文件头部信息

  vim ketama.h


    #ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif


6.修改Makefile

sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile


7.编译(完成后会生成一个manage的可执行文件)

make


8.复制mgent命令到系统管理中,便于使用

cp /opt/magent/magent /usr/bin/
9.发送至从服务器

scp /opt/magent/magent root@192.168.96.22:/usr/bin
安装keepalived

yum -y install keepalived
1.编辑keepalived配置文件

  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 magent_H1              #指定router_id
}
vrrp_script magent {                #定义函数
script "/root/shell/magent.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33             #本地网卡名称
virtual_router_id 51        #id主从一致
priority 100                #主优先级大于从优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {              #调用函数
magent
}
virtual_ipaddress {         #vip地址
192.168.96.100
}
}
2.建立shell目录

mkdir /root/shell
3.创建magent.sh脚本

  vim /root/shell/magent.sh


#!/bin/bash
Keepalived=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $Keepalived -gt 0 ]; then
magent -u root -n 51200 -l 192.168.96.100 -p 12000 -s 192.168.96.16:11211 -b 192.168.96.17:11211
else
pkill -9 magent
fi
  参数说明:

        -n 51200                #定义用户最大连接数
-l 192.168.175.188                #指定虚拟IP
-p 12000                   #指定端口号
-s                              #指定主缓存服务器
-b                              #指定从缓存服务器
4.赋予脚本执行权限

chmod +x /root/shell/magent.sh
5.启动keepalived服务

systemctl enable keepalived.service
systemctl start keepalived.service
6.检查keepalived服务状态

systemctl status keepalived.service


7.检查vip地址

ip addr


在从服务器上操作

1.安装keepalived

yum -y install keepalived
2.将主服务器上keepalived配置文件复制过来

scp root@192.168.175.128:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
3.编辑keepalived配置文件

  vim 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 magent_H2              #指定router_id
}
vrrp_script magent {                #定义函数
script "/root/shell/magent.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33             #本地网卡名称
virtual_router_id 51        #id主从一致
priority 90             #主优先级大于从优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {         #vip地址
192.168.96.100
}
track_script {              #调用函数
magent
}
}
4.新建shell目录

mkdir /root/shell
5.创建magent.sh脚本

  vim /root/shell/magent.sh


#!/bin/bash
Keepalived=`ip addr | grep 192.168.96.100 | grep -v grep | wc -l`
if [ $Keepalived -gt 0 ]; then
magent -u root -n 51200 -l 192.168.96.100 -p 12000 -s 192.168.96.12:11211 -b 192.168.96.17:11211
else
pkill -9 magent
fi
6.赋予脚本执行权限

chmod +x /root/shell/magent.sh
7.启动keepalived服务

systemctl enable keepalived.service
systemctl start keepalived.service
8.检查keepalived服务状态

systemctl status keepalived.service


9.检查vip地址

ip addr


在客户端测试

1.安装telnet客户端

yum -y install telnet
2.连接memcached

telnet 192.168.175.188 12000
测试复制功能

//连接vip进行测试,插入user键值
[root@centos7-1 ~]# telnet 192.168.96.100 12000
Trying 192.168.96.100...
Connected to 192.168.96.100.
Escape character is '^]'.
set user 0 0 5
test1
STORED
get user
VALUE user 0 5
test1
END
quit
Connection closed by foreign host.
//连接Memcached1,查询user键值,可以获取,成功!
[root@centos7-1 ~]# telnet 192.168.96.16 11211
Trying 192.168.96.16...
Connected to 192.168.96.16.
Escape character is '^]'.
get user
VALUE user 0 5
test1
END
quit
Connection closed by foreign host.
//连接Memcached2,查询user键值,也可以获取,成功!
[root@centos7-1 ~]# telnet 192.168.96.17 11211
Trying 192.168.96.17...
Connected to 192.168.96.17.
Escape character is '^]'.
get user
VALUE user 0 5
test1
END
quit
Connection closed by foreign host.
测试单点故障







运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655243-1-1.html 上篇帖子: 【Memcached】02、memcached的应用 下篇帖子: Memcached安装及数据库操作管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表