内容简介:通过上图来说明一下原理:1、magent在启动时会指定主的memcached节点与备份的memcached节点,假设我们指定了两个主的缓存节点,一个备份节点,当客户端写入时会通过算法写在其中一个指定的主缓存节点中,并把数据备份到memcached备份节点中,当主节点重启后或者宕机恢复后会从备份节点中恢复丢失的缓存数据。
10月3号我写了高性能内存缓存对象缓存 Memcached 原理 (Memcached核心概念,部署),本片将Memcached高可用群集(Memcached主主复制+Keepalived)掌握一下。
memcached高可用集群原理及介绍:
- memcached在实现分布式群集部署时,memcached服务之间是不能进行通讯的,分布式也是通过客户端的算法吧数据保存在不同的memcached中,所以当我们做完群集客户端往一个memcached节点写入数据后,另外两个节点是查询不到的。
- 那么如何结局额这个问题,就是接下来要做的了。
memcached这种群集之间不能相互通讯导致了这种情况,这在访问量很大的web网站中是不允许的。所以我们就要使用到一个magent开源软件来解决这个问题。
magent是一款开源的代理服务软件,我们可以通过他来实现缓存数据的同步,当然这里说的同步不是说memcached之间就能互相通讯了,而是magent可以备份数据,而magent可以同时连接多个memcached节点,当memcached重启或者宕机恢复后可以从magent指定的memcached的备份节点中恢复丢失的缓存数据。
通过上图来说明一下原理:
1、magent在启动时会指定主的memcached节点与备份的memcached节点,假设我们指定了两个主的缓存节点,一个备份节点,当客户端写入时会通过算法写在其中一个指定的主缓存节点中,并把数据备份到memcached备份节点中,当主节点重启后或者宕机恢复后会从备份节点中恢复丢失的缓存数据。
2、同时magent还可以使用keepalived来实现高可用。具体案例配置步骤如下所示:
案例说明:
* 为解决memcached单点故障,需要实现memcached缓存的高可用。 * 首先,需要实现Memcached的主主复制,指任意一台memcached服务器修改数据都会被同步到另外一台,但是memcached API无法判断连接哪一台服务器,因此需要VIP。 * 其次,通过Keepalived产生的VIP连接memcached服务器,提供高可用架构。
案例拓扑图如下所示:
案例环境准备:
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
Memcached 1 | Centos7 | 192.168.72.128 | libevent;memcached;keepalived;magent;telnet |
Memcached 2 | Centos7 | 192.168.72.129 | libevent;memcached;keepalived;telnet |
客户端 | Centos7 | 192.168.72.130 | telnet |
百度网盘免密提供软件包:
https://pan.baidu.com/s/1aEM27okhC2DK00EhFC9LBw案例实施过程:
1.首先给两个服务器安装Memcached
* 安装环境包(两台服务器同装): * systemctl stop firewalld.service #关闭防火墙 * setenforce 0 #关闭增强性安全功能 * yum install gcc gcc-c++ make -y #安装锁需要的环境包
* 解压下载好的libevent、memecached包到/opt下: * tar zxvf libevent-2.1.8-stable.tar.gz -C /opt * tar zxvf memcached-1.5.6.tar.gz -C /opt
* 接下来手工编译安装(注意:libevent在先 memcached在后) * cd /opt/libevent-2.1.8-stable/ #手工编译安装libevent ./configure --prefix=/usr * make && make install * cd /opt/memcached-1.5.6/ #手工编译安装memcached ./configure --with-libevent=/usr * make && make install
2.在主服务器上安装magent
* 解压下载好的magent包到/opt/magent/下 * tar zxvf magent-0.5.tar.gz -C /opt/magent/
* 编辑配置文件: * cd /opt/magent * vim ketama.h #文件开头修改 #ifndef SSIZE_MAX #define SSIZE_MAX 32767 #endif #删除最后那个endif * vim Makefile LIBS = -levent -lm #注意空格 * make #安装magent * ls #查看magent可执行程序
* 将magent程序复制到memcached从服务器上: * scp magent 192.168.72.129:/usr/bin
3.接下来主服务器上安装keepalived
* yum install keepalived -y #yum安装 * 安装完成修改配置文件: * vim /etc/keepalived/keepalived.conf //12行 router_id MAGENT_HA 删除13-16 (vrrp) //在global_defs下添加 vrrp_script magent { script "/opt/shell/magent.sh" interval 2 #时间间隔2s } vrrp_instance VI_1 { ...... interface ens33 #修改 ...... track_script { #调用-添加 ;注意括号 magent } virtual_ipaddress #修改 192.168.72.100 } #定义虚拟地址 } #剩余全删除
4.接下来从服务器上安装keepalived
* yum install keepalived -y #yum安装keepalived * cd /etc/keepalived/ * mv keepalived.conf keepalived.conf.bk #修改配置文件名 * scp keepalived.conf root@192.168.72.129:/etc/keepalived/ #主服务器上推送keepalived已经修改好的配置文件 * vi keepalived.conf router_id MAGENT_HB state BACKUP virtual_router_id 52 priority 90
5.到此主从两台服务器上keepalived已经安装配置完成,接下来在主和从服务器写入keepalived配置文件加载的脚本
* 建一个脚本存放目录: * mkdir /opt/shell * 编写脚本: * cd /opt/shell * vim 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.72.100 -p 12000 -s 192.168.37.128:11211 -b 192.168.37.130:11211 else pkill -9 magent fi -n 51200 #定义用户最大连接数 -l 192.168.37.188 #指定虚拟IP -p 12000 #指定端口号 -s #指定主缓存服务器 -b #指定从缓存服务器 chmod +x magent.sh #添加执行权限
* 主从服务器开启keepalived服务: * systemctl start keepalived.service * netstat -ntap | grep 12000 #开启较慢,确认magent运行
- 确认主从服务器漂移地址生效
- 主服务器:
- 从服务器:
6.主从服务器开启memecached - 主服务器:
- memcached -m 512k -u root -d -l 192.168.72.128 -p 11211
- netstat -ntap | grep 11211
- yum install telnet -y #安装远程登录工具
- telnet 192.168.72.128 11211 #本地登录
![](http://i2.51cto.com/images/blog/201810/19/adf324951eef2e8963624f10ada3cf40.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
* 从服务器: * memcached -m 512k -u root -d -l 192.168.72.129 -p 11211 * netstat -ntap | grep 11211 * yum install telnet -y * telnet 192.168.72.129 11211
7.客户端测试
* 安装telnet工具,连接VIP,写入数据: * yum install telnet -y * telnet 192.168.72.100 12000 add username 0 0 4 1234
- 主服务器可以看到写入的内容:
- 从服务器可以看到写入的内容:
- 如果断掉一台memcached,再次访问,客户端仍然可以连接:
仍然可以看到!本篇总结:
- Memcached是分布式内存对象缓存系统,因为所有数据都存储在内存中,从而常用于网站加速;
- Memcached分布式实现不是在服务端实现的而是在客户端实现;
以上所述就是小编给大家介绍的《领会Memcached高可用群集(Memcached主主复制+Keepalived)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- RabbitMQ 群集安装
- WSFC 来宾群集架构
- Kubernetes 群集管理概述
- 千万PV,RabbitMQ群集配置
- MongoDB分片群集搭建入门详解
- LVS负载均衡之LVS-DR搭建Web群集与LVS结合Keepalived搭建高可用Web群集
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
High Performance JavaScript
Nicholas C. Zakas / O'Reilly Media / 2010-4-2 / USD 34.99
If you're like most developers, you rely heavily on JavaScript to build interactive and quick-responding web applications. The problem is that all of those lines of JavaScript code can slow down your ......一起来看看 《High Performance JavaScript》 这本书的介绍吧!