原文链接:https://linux.cn/article-669-2.html
一.Repcached (memcached同步补丁)
下载地址:http://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/
版本号:memcached 1.2.8 repcached 2.2.1
1、repcached介绍
repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步,如果 master坏掉, slave侦测到连接断了,它会自动 listen而成为 master;而如果 slave坏掉, master也会侦测到连接断,它就会重新 listen等待新的 slave加入
2、安装
在两台服务器上分别安装memcached服务,另注本文libevent的版本为:libevent-1.4.13,下载地址: http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz (安装省略)
repcached有两种方式:
方式一、下载对应的repcached版本
#wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz #tar zxf memcached-1.2.8-repcached-2.2.tar.gz #cd memcached-1.2.8-repcached-2.2
方式二、下载对应patch版本
#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz #gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1】 #./configure –enable-replication # make # make install
3、启动:
启动master
# ./memcached -v -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 (11211:master端口;11111:同步端口) replication: connect (peer=127.0.0.1:11111) replication: accept replication: marugoto copying replication: start
启动salve
# ./memcached -v -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111 (11212:slave端口;11111:同步端口) replication: connect (peer=127.0.0.1:11111) replication: marugoto copying replication: close replication: listen
4、测试:
操作master
[root@localhost bin]# telnet 127.1 11211 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1)... Escape character is '^]'. get key1 END set key1 0 0 2 aa STORED quit Connection closed by foreign host.
查看slave
[root@localhost bin]# telnet 127.1 11212 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1)... Escape character is '^]'. get key1 VALUE key1 0 2 aa END quit Connection closed by foreign host.
注意:如果master down机,slave接管并成为master,这时down机的master只能启用slave,他们之间互换角色,才能保持复制功能。换句话说,master没有抢占功能。而且,同步间隔时间未知。
优点:
- 数据冗余
- 两台memcached都可以进行读写操作
缺点:
- 只支持单对单
- 只支持memcached 1.2.x版本
二.Magent (memcached的代理)
原文地址:http://blog.s135.com/post/393/
magent是一款开源的Memcached代理服务器软件,其项目网址为:
http://code.google.com/p/memagent/
1、安装步骤:
a、编译安装libevent:
wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz tar zxvf libevent-1.4.9-stable.tar.gz cd libevent-1.4.9-stable/ ./configure --prefix=/usr make && make install cd ../
b、编译安装Memcached:
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz tar zxvf memcached-1.2.6.tar.gz cd memcached-1.2.6/ ./configure --with-libevent=/usr make && make install cd ../
c、编译安装magent:
mkdir magent cd magent/ wget http://memagent.googlecode.com/files/magent-0.5.tar.gz tar zxvf magent-0.5.tar.gz /sbin/ldconfig sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile make cp magent /usr/bin/magent cd ../
2、使用实例:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213 magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213
- 分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;
- 11211、11212端口为主Memcached,11213端口为备份Memcached;
- 连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached;
- 当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;
- 当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的 Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数 据(此问题尚待改进)。
3、整个测试流程:
[root@centos52 ~]# telnet 127.0.0.1 12000 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats memcached agent v0.4 matrix 1 -> 127.0.0.1:11211, pool size 0 matrix 2 -> 127.0.0.1:11212, pool size 0 END set key1 0 0 8 zhangyan STORED set key2 0 0 8 zhangyan STORED quit Connection closed by foreign host. [root@centos52 ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key1 END get key2 VALUE key2 0 8 zhangyan END quit Connection closed by foreign host. [root@centos52 ~]# telnet 127.0.0.1 11212 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key1 VALUE key1 0 8 zhangyan END get key2 END quit Connection closed by foreign host. [root@centos52 ~]# telnet 127.0.0.1 11213 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key1 VALUE key1 0 8 zhangyan END get key2 VALUE key2 0 8 zhangyan END quit Connection closed by foreign host.
模拟11211、11212端口的Memcached死掉
[root@centos52 ~]# ps -ef | grep memcached root 6589 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211 root 6591 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212 root 6593 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213 root 6609 6509 0 01:44 pts/0 00:00:00 grep memcached [root@centos52 ~]# kill -9 6589 [root@centos52 ~]# kill -9 6591 [root@centos52 ~]# telnet 127.0.0.1 12000 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key1 VALUE key1 0 8 zhangyan END get key2 VALUE key2 0 8 zhangyan END quit Connection closed by foreign host.
模拟11211、11212端口的Memcached重启复活
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11211 [root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11212 [root@centos52 ~]# telnet 127.0.0.1 12000 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get key1 END get key2 END quit Connection closed by foreign host.
优点:
- 可以做多主或多从
缺点:
- 当master宕掉又恢复后,取不到数据。
三.Repcached和Magent结合
安装memcached 1.2.8、repcached 2.2.1、magent 0.5
测试流程:
1、启动memcached和magent
开启代理,代理端口为12000,设置127.0.0.1:11211为主,127.0.0.1:11212为从。
magent -u root -p 12000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
启动两个memcached进程,做数据同步,同步端口为11111。
./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
./memcached -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111
2、从代理写入数据,在两台memcached上查看
[root@localhost bin]# telnet 127.1 12000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set key1 0 0 1 a STORED quit Connection closed by foreign host. [root@localhost bin]# telnet 127.1 11211 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key1 VALUE key1 0 1 a END quit Connection closed by foreign host.
3. 模拟主或从memcached宕机后,数据是否存在
[root@localhost bin]# ps aux|grep memcached root 15314 0.0 0.4 3556 2108 ? Ss 16:03 0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 root 15318 0.0 0.3 3556 1836 ? Ss 16:04 0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 root 15370 0.0 0.1 4016 696 pts/3 R+ 16:09 0:00 grep memcached [root@localhost bin]# kill 15314 [root@localhost bin]# ps aux|grep memcached root 15318 0.0 0.3 3556 1836 ? Ss 16:04 0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 root 15370 0.0 0.1 4016 696 pts/3 R+ 16:09 0:00 grep memcached [root@localhost bin]# telnet 127.1 12000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set key1 0 0 1 a STORED quit Connection closed by foreign host. [root@localhost bin]# telnet 127.1 11212 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key1 VALUE key1 0 1 a END quit Connection closed by foreign host.
4. 模拟主或从memcached恢复后,数据是否存在/同步
[root@localhost bin]# ./memcached -u root -d -l 127.0.0.1 -X 11111 [root@localhost bin]# ps aux|grep memcached root 15318 0.0 0.4 3556 2112 ? Ss 16:04 0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 root 15380 0.0 0.3 3556 1808 ? Ss 16:11 0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 root 15384 0.0 0.1 4016 700 pts/3 R+ 16:11 0:00 grep memcached [root@localhost bin]# telnet 127.1 12000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set key1 0 0 1 a STORED quit Connection closed by foreign host. [root@localhost bin]# telnet 127.1 11211 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key1 VALUE key1 0 1 a END quit Connection closed by foreign host.
优点:
- 数据冗余
- 两台memcached都可进行读写操作
- 可以做多主或多从(未测试)
缺点:
- 只支持memcached 1.2.x版本
相关推荐
Serf完全是无主的,没有单点故障。 这里有一些Serf的用例示例,尽管还有许多其他用例: 发现Web服务器并将其自动添加到负载均衡器将许多Memcached或Redis节点组织到一个群集中,可能使用类的或者仅使用所有节点的...
再比如ASP.Net内置的AJAX解决方案UpdatePanel只在部分要求不高的内网项目中才被使用,因此我们在讲解UpdatePanel的使用和原理之外,把更多的时间放在讲解企业中用的最多的JQuery AJAX解决方案上。 6、B/S系统项目(7...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
3.4.7 在URL中传递中文的解决方案 152 3.4.8 增强用户体验的一些技巧 153 3.4.9 XHTML与HTML的区别 156 3.5 打造自己的页面基类PageBase 161 本章常见技术面试题 164 常见面试技巧之如何做好自我介绍 164 本章小结 ...
3.4.7 在URL中传递中文的解决方案 152 3.4.8 增强用户体验的一些技巧 153 3.4.9 XHTML与HTML的区别 156 3.5 打造自己的页面基类PageBase 161 本章常见技术面试题 164 常见面试技巧之如何做好自我介绍 164 本章小结 ...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...