Memcached repcached 高可用
Memcached + repcached 高可用环境
repcached 就是一个让memcached的机器能够互为主从,前端可以加一台HAProxy,后端两台memcached互为主从后,写入任何一点都会同步到另外一边.
由于 Memcached 自己没有防止单点的措施,因为为了保障 Memcached 服务的高可用,我们需要借助外部的工具来实现高可用的功能。
本文引入 Repcached 这个工具,通过使用该工具我们可以完成 Memcached 服务的主从功能。
Repcached 用来实现 Memcached 复制功能的一个工具。它所构建的主从方案是一个单主单从的方案,不支持多主多从。
但是,它的特点是,主从两个节点可以互相读写,从而可以达到互相同步的效果。
假设主节点坏掉,从节点会很快侦测到连接断开,然后它会自动切换到监听状态( listen)从而成为主节点,并且等待新的从节点加入。
假设原来挂掉的主节点恢复之后,我们只能人工手动以从节点的方式去启动。原来的主节点并不能抢占成为新的主节点,除非新的主节点挂掉。这也就意味着,基于 Repcached 实现的 Memcached 主从,针对主节点并不具备抢占功能。
假设从节点坏掉,主节点也会很快侦测到连接断开,然后它就会重新切换到监听状态(listen),并且等待新的从节点加入。
假设主从节点都挂掉,则数据就丢失了!因此,这是 Repcached 的一个短板,不过后期我们可以通过结合其它的工具来弥补这个缺点。
OK,简单介绍到这里。下面我们通过实验来看,基于 Repcached 的 Memcached 主从架构是如何部署,以后如何测试和管理的。
安装memcached 和依赖:
yum install libevent libevent-devel memcached -y
wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
[root@srv-3 ~]# rpm -ql memcached
/etc/sysconfig/memcached # 配置文件
/usr/bin/memcached # 可执行文件
/usr/bin/memcached-tool
/usr/lib/systemd/system/memcached.service # 启动脚本
/usr/share/doc/memcached-1.4.15
/usr/share/doc/memcached-1.4.15/AUTHORS
/usr/share/doc/memcached-1.4.15/CONTRIBUTORS
/usr/share/doc/memcached-1.4.15/COPYING
/usr/share/doc/memcached-1.4.15/ChangeLog
/usr/share/doc/memcached-1.4.15/NEWS
/usr/share/doc/memcached-1.4.15/README.md
/usr/share/doc/memcached-1.4.15/protocol.txt
/usr/share/doc/memcached-1.4.15/readme.txt
/usr/share/doc/memcached-1.4.15/threads.txt
/usr/share/man/man1/memcached-tool.1.gz
/usr/share/man/man1/memcached.1.gz
# 修改memcached 配置文件:
[root@srv-3 ~]# vim /etc/sysconfig/memcached
PORT="11211" # 端口
USER="memcached" # 启动用户
MAXCONN="4096" # 最大连接数
CACHESIZE="1024" # 最大使用的内存
OPTIONS="" # 其他参数
解压并部署replications:
tar xvf memcached-1.2.8-repcached-2.2.tar.gz
cd memcached-1.2.8-repcached-2.2
./configure --prefix=/data/soft/repcached --enable-replication
make # 这一步可能会出错 按照下面的解决办法
make install
# 发现错误:
config.status: executing depfiles commands
[root@srv-3 memcached-1.2.8-repcached-2.2]# make
gcc -DHAVE_CONFIG_H -I. -DNDEBUG -g -O2 -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.c
memcached.c: In function ‘add_iov’:
memcached.c:696:30: error: ‘IOV_MAX’ undeclared (first use in this function)
if (m->msg_iovlen == IOV_MAX || # 错误提示在这里
^
memcached.c:696:30: note: each undeclared identifier is reported only once for each function it appears in
解决问题:
vim memcached.c # 56 57 58 把57行去掉 改成下面这样既可.
# /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
#ifndef IOV_MAX
#define IOV_MAX 1024
#endif
# 启动memcahed
*** 每台机器都不能启动memcahed 11211,否则会产生冲突导致高可用版本无法启动. ***
*** 直接按照下面的命令行启动高可用版本的memcached 即可占用的事 16000 和11211 端口 ***
2.1.1 ) 启动 10.10.5.12 上的replications:
/data/soft/repcached/bin/memcached -d -m 2048 -p 11211 -u memcached -c 4096 -x 10.10.5.13 -X 16000
2.1.2 ) 启动 10.10.5.13 上的replications:
/data/soft/repcached/bin/memcached -d -m 2048 -p 11211 -u memcached -c 4096 -x 10.10.5.12 -X 16000
参数解释:
-d 后台运行
-m 使用多大的内存
-p 占用端口
-u 启动用户
-c 允许的连接数
-x 对端的IP地址
-X 探测对端监控端口
验证是否可以同步:
# 先搞个脚本:
3.1 ) 安装这3个软件python3 + pip3 + python-memcahed
yum install python3 -y
pip3 install python-memcached
3.2 ) 批量的在其中一台memcached 里面添加数据,
[root@srv-3 ~]# cat memcache_1.py
#!/usr/bin/env python3
import memcache
m = memcahce.Client(['10.10.5.13:11211'],debug=True)
for i in range(100):
m.set("key%d" % i,"v%d" % i)
ret = m.get('key%d' % i)
print(ret)
3.3 ) 在13 的memcached 上添加了100个数据,在5.12 上查看一下是否有数据同步过来:
[root@srv-2 bin]# telnet 10.10.5.12 11211
Trying 10.10.5.12...
Connected to 10.10.5.12.
Escape character is '^]'.
get key79
VALUE key79 16 3
v79
END
get key80
VALUE key80 16 3
v80
****** 以上的key证明我们已经成功的获取了KEY信息,证明2台机器的memcache 是可以同的。
然后修改一下代码里面的10.10.5.13 到 10.10.5.12 重新添加进去900个KEY
[root@srv-3 ~]# cat memcache_1.py
#!/usr/bin/env python3
import memcache
m = memcahce.Client(['10.10.5.12:11211'],debug=True)
for i in range(200,1000):
m.set("key%d" % i,"v%d" % i)
ret = m.get('key%d' % i)
print(ret)
## 查看5.13 上是否有了key200 - key1000 之间的key。
[root@srv-3 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key888
VALUE key888 16 4 # 成功获取memcahced 同步成功.
v888
END
Memcached repcached 高可用的更多相关文章
- Memcached高可用组件之repcached
在前边的tomcat session server msm的那篇博客我们用memcached做tomcat session服务器,默认官方memcached是不支持主从同步的,为了解决memcache ...
- Memcached 集群的高可用(HA)架构
Memcache自身并没有实现集群功能,如果想用Memcahce实现集群需要借助第三方软件或者自己设计编程实现,这里将采用memagent代理实现,memagent又名magent,大家注意下,不要将 ...
- 详解集群内Session高可用的实现原理
在这个互联网高度发达的时代,许多应用的用户动辄成百上千万,甚至上亿.为了支持海量用户的访问,应用服务器集群这种水平扩展的方式是最常用的.这种情形下,就会涉及到许多单机环境下完全不需要考虑的问题,这其中 ...
- OpenStack高可用方案及配置
1 OpenStack高可用介绍 1.1 无状态和有状态服务 无状态服务指的是该服务接收的请求前后之间没有相关关系,接收并处理完该请求后不保存任何状态,在OpenStack的服务中常见的无状态服务 ...
- Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
当网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题. 有这么一段文字来描述“Memcached集群” Memcached如何处理容错的? 不处理!:) 在memc ...
- Memcached【第二篇】高可用集群搭建
第一步:准备 1. 架构信息 利用 magent 搭建 memcached 集群,实现性能的高可用. IP Port 主从 192.168.6.129 11211 主节点 192.168.6.130 ...
- Nginx+Tomcat+memcached高可用会话保持
Nginx+Tomcat+memcached高可用会话保持 文章来源dyc2005 一.概述 之前文章已经描述了企业高可用负载相关的架构及实现,其中常用的nginx或haproxy,LVS结合ke ...
- Memcached高可用方案收集(集群及分布式)
Memcached的集群方案有很多,不止magent一个,但是单靠集群软件去实现高可用感觉还是会缺少一步,最推荐的方案应该是软件加编码去实现高可用,至少能保证站点的99.5%的可运行行,以下是集群的方 ...
- memcached高可用
http://sourceforge.net/projects/repcached/ memcached-1.2.8-repcached-2.2.tar.gz tar zxvf memcached-1 ...
随机推荐
- Vscode:常用的插件
Chinese (Simplified) Language Pack for Visual Studio Code==>汉化 Live Server==>运行代码 ESLint==> ...
- uniapp图片转base64
直接上代码了,网上也很多一样的,这里记录下,因为仅仅第二种在真机微信小程序上我这里测试转换失败,所以就一并写在这里了: //图片转base64 urlTobase64(url){ // #ifdef ...
- 安卓实用工具箱v4.3几百种小功能
款多功能实用工具箱.提供了从日常.图片.查询.设备.辅助.提取.优惠券.趣味游戏等多方面的功能,操作简单,即点即用,避免您下载超多应用的难题,且应用体积轻巧,界面简洁.已去除广告! 下载地址:http ...
- mysql 查询 添加 删除 语句
1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 d ...
- Nosql 和 Sql 简单概念介绍
Nosql (非关系数据库) 代表数据库:redis / hbase /mongoDB /CouchDB /Neo4J 存储数据使用的是数据结构化存储方法的集合,意味着数据的存储可以是文档.集合.键值 ...
- Shell脚本命令常用技巧
如果一个命令只有一次输出,但想持续观察输出变化,使用watch -d -n1 'df -h'可行,df -h输出一次硬盘使用情况,用上面指令可以持续观察.-d表示相邻输出如果有差异要高亮标记,-n1表 ...
- Shell变量、函数
上篇文章初步认识了一下shell脚本及其简单的案例,下面我们再来讲一下shell的进击部分. 一.变量 1.常用系统变量:($HOME.$SHELL.$PWD.$USER) 2.自定义变量: 2.1. ...
- html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...
- robotframework中的参数展开
robot调用关键字传参的方式是用分隔符分开不同参数,如 keyword arg1 arg2 arg3 arg4 当参数中传入了使用@符号的列表变量时,@符号会将列表展开: @{list1}= Cre ...
- 将Maven镜像更换为国内阿里云仓库
1.国内访问maven默认远程中央镜像特别慢 2.用阿里的镜像替代远程中央镜像 3.大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像 换为国内镜像,让你感受飞一般的 ...