一、环境
服务器A:ubuntu server 12.04(192.168.1.111)
服务器B:ubuntu server 12.04 (47.50.13.111)
二、memcached安装
sudo apt-get install memcached
安装完成后可以启动一下,看是否安装好了:
# sudo memcached -d -m 128 -p 11211 -u root
# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set name 0 0 5
hello
STORED
get name
hello
可以存取数据即代表安装完成。
三、repcached安装
在 https://sourceforge.net/projects/repcached/files/repcached/ 下载repcached安装包(memcached-1.2.8-repcached-2.2.1.tar.gz),然后解压安装:
# tar zxvf memcached-1.2.8-repcached-2.2.tar.gz
# cd memcached-1.2.8-repcached-2.2/
# ./configure --enable-replication
# make
# make install
正常情况下按上面的安装就可以了,但也有可能会遇到以下问题:
1、machine `i686-pc-linux' not recognized 错误
解决办法是在./configure时加上参数:--build=i686-pc-linux-gnu
2、configure: error: no acceptable C compiler found in $PATH See `config.log' for more details.
这是因为没有安装c编译器,安装gcc即可:
# apt-get install gcc
3、memcached.c:696:30: error: ‘IOV_MAX’ undeclared (first use in this function)
把memcached.c中55行~60行代码:
55 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */ 56 #ifndef IOV_MAX 57 #if defined(__FreeBSD__) defined(__APPLE__) 58 # define IOV_MAX 1024 59 #endif 60 #endif
换为:
55 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */ 56 #ifndef IOV_MAX 57 /*#if defined(__FreeBSD__) defined(__APPLE__)*/ 58 # define IOV_MAX 1024 59 #endif 60 /*#endif*/
即把 57 行和60行注释掉。
四、主从配置
我们要把服务器B作为Master,把服务器A作为Slave,首先在服务器A(Master)上配置如下:
# /usr/local/bin/memcached -p 11211 -v -d -u root
replication: listen
在服务器B(Slave)上配置如下:
# /usr/local/bin/repcached -p 11212 -x 47.50.13.111 -v -d -u root
replication: connect (peer=47.50.13.111:11212)
replication: marugoto copying
replication: accept
这里看到出现了一个11212,Memcached默认服务端口是11211,默认同步监听端口是11212。
这一步要确保在Slave上可以telnet上Master服务器。
如果telnet失败,一般会是iptables把11211/11212端口阻止了,打开即可。
可以通过netstat命令查看:
# netstat -tupln grep memcached tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 2044/memcached tcp 0 0 0.0.0.0:11212 0.0.0.0:* LISTEN 2044/memcached tcp6 0 0 :::11211 :::* LISTEN 2044/memcached udp 0 0 0.0.0.0:11211 0.0.0.0:* 2044/memcached udp6 0 0 :::11211 :::* 2044/memcached
五、验证
在Master上创建数据:
# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set name 0 0 5 atwal STORED
在Slave上查看数据:
$ telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. get name VALUE name 0 5 atwal END
可以看到数据已经同步了。