memcached主从复制

Repcached介绍

Repchched项目地址:http://repcached.sourceforge.net/
 
关于repcached
“repcached”是一个补丁集合,它添加数据复制功能到memcached 1.2.x。
 
主要目的

  • 实现冗余memcached系统。
     
    主要功能
  • 多主复制。
  • 异步数据复制。
  • 支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。

Memcached 1.4.x的Repcached补丁
地址:http://mdounin.ru/
最新补丁:http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz

工作原理

repcached实现了memcached复制的功能,它是一个单master单slave的方案,但master/slave都是可读写的,而且可以相互同步,如果master坏掉slave侦测到连接断了,它会自动listen而成为master,这时坏掉的master只能启用为slave,它们之间互换角色,才能保持复制功能,换句话说,master没有抢占功能;而如果slave坏掉,master也会侦测到连接断,它就会重新listen等待新的slave加入。
 
应用场景

用memcached做session共享或其它服务时会存在memcached的单点故障,如果memcached宕机,那么整个系统用户无法登陆(session)。
基于这种情况,采用repcached做memcached的主从冗余。
 
Repcached下载地址

http://sourceforge.net/projects/repcached/files/repcached/
 
Repcached安装方式

Repcached有两种安装方式:
    1.补丁版本安装  
    先安装相应版本的memcached,然后对应版本的Repcached补丁。
    2.整合版本安装  
    直接安装整合版本的memcached
 
方式一:补丁版本安装
1. 安装Memcache,相关安装方法可以参见博文:  
http://ultrasql.blog.51cto.com/9591438/1632179
2. 下载对应的repcached版本补丁安装文件:  
假设安装的memcahced版本为1.2.8,下载针对该版本最新的补丁:

wget http://softlayer-dal.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/repcached-2.2.1-1.2.8.patch.gz    
gzip -cd ../repcached-2.2.1-1.2.8.patch.gz | patch -p1    
./configure --enable-replication    
make && make install

方式二:整合版本安装

  1. yum -y install gcc gcc-c++
  2. 安装libevent:

    cd /tmp    
    wget http://downloads.sourceforge.net/levent/libevent-2.0.22-stable.tar.gz    
    tar zxvf libevent-2.0.22-stable.tar.gz    
    cd libevent-2.0.22-stable    
    ./configure --prefix=/usr/ 
    make && make install

将libevent的库文件添加到动态库中:

vi /etc/ld.so.conf

在最后添加如下行:    
    /usr/ //此处为要添加的libevent库目录    
     重新加载动态lib库

ldconfig

注意:如果无此步骤,在启动memcached时,会提示看不到libevent的库文件。

测试libevent是否安装成功:

ll /usr/lib/libevent*

3. 创建启动帐号:

groupadd memcached    
      useradd -g memcached memcached

4. 创建PID进程目录并修改所有者:

mkdir /var/run/memcached    
       chown -R memcached.memcached /var/run/memcached

5. 安装整合memcached-repcached包:

wget https://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz

tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz

mv memcached-1.2.8-repcached-2.2.1 memcached    
   cd memcached    
./configure --prefix=/usr/local/memcached --with-libevent=/usr/ --enable-replication --enable-64bit

注意:默认memcached单个进程只支持到2G内存,需要更大内存支持的话,需要打开64位支持,编译的时候加参数:    
--enable-64bit

make && make install

提示编译出错:

make all-recursive    
make[1]: Entering directory `/usr/local/memcached‘    
Making all in doc    
make[2]: Entering directory `/usr/local/memcached/doc‘    
make[2]: Nothing to be done for `all‘.    
make[2]: Leaving directory `/usr/local/memcached/doc‘    
make[2]: Entering directory `/usr/local/memcached‘    
gcc -DHAVE_CONFIG_H -I. -DNDEBUG -m64 -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:697: error: ‘IOV_MAX’ undeclared (first use in this function)    
memcached.c:697: error: (Each undeclared identifier is reported only once    
memcached.c:697: error: for each function it appears in.)    
make[2]: *** [memcached-memcached.o] Error 1    
make[2]: Leaving directory `/usr/local/memcached‘    
make[1]: *** [all-recursive] Error 1    
make[1]: Leaving directory `/usr/local/memcached‘    
make: *** [all] Error 2

解决方案:

vi memcached.c

将下面的几行

/* FreeBSD 4.x doesn‘t have IOV_MAX exposed. */    
#ifndef IOV_MAX    
#if defined(__FreeBSD__) || defined(__APPLE__)    
# define IOV_MAX 1024    
#endif    
#endif

修改为

/* FreeBSD 4.x doesn‘t have IOV_MAX exposed. */    
#ifndef IOV_MAX    
# define IOV_MAX 1024    
#endif

重新编译和安装:

make && make install

修改memcached目录所有者:

cd ..    
chown -R memcached.memcached memcached

配置主从复制

参数说明:
-x 设置从哪个IP上进行同步。
-X 指定数据同步的端口。
Memcached默认服务端口是11211,默认同步监听端口是11212。
 
启动Master:
/usr/local/memcached/bin/memcached -d -m 100 -l 192.168.11.51 -p 11211 -u memcached -c 1024 -x 192.168.11.52 -X 11212 -P /var/run/memcached/memcached-rep.pid

查看监听端口:
netstat -tupln | grep memcached

tcp 0 0 192.168.11.51:11211 0.0.0.0:* LISTEN 18634/memcached 
tcp 0 0 192.168.11.51:11212 0.0.0.0:* LISTEN 18634/memcached 
udp 0 0 192.168.11.51:11211 0.0.0.0:* 18634/memcached

启动Slave:
/usr/local/memcached/bin/memcached -d -m 100 -l 192.168.11.52 -p 11211 -u memcached -c 1024 -x 192.168.11.51 -X 11212 -P /var/run/memcached/memcached-rep.pid

说明:-x 192.168.11.51用于同步的Master的IP地址。
查看监听端口:
netstat -tupln | grep memcached

tcp 0 0 192.168.11.52:11211 0.0.0.0:* LISTEN 24262/memcached 
udp 0 0 192.168.11.52:11211 0.0.0.0:* 24262/memcached

验证数据同步

在Master创建数据: 
[[email protected] bin]# telnet 192.168.1.10 11211

Trying 192.168.1.10… 
Connected to 192.168.1.10. 
Escape character is ‘^]’. 
get key1 
END 
set key1 0 0 2 
aa 
STORED 
quit 
Connection closed by foreign host.

在Slave获取数据: 
[[email protected] bin]# telnet 192.168.1.11 11211

Trying 192.168.1.11… 
Connected to 192.168.1.11. 
Escape character is ‘^]’. 
get key1 
VALUE key1 0 2 
aa 
END 
quit 
Connection closed by foreign host.

在Slave创建数据: 
[[email protected] bin]# telnet 192.168.1.11 11211

Trying 192.168.1.11… 
Connected to 192.168.1.11. 
Escape character is ‘^]’. 
get key2 
END 
set key2 0 0 3 
bbb 
STORED 
get key2 
VALUE key2 0 3 
bbb 
END 
quit 
Connection closed by foreign host.

在Master获取数据: 
[[email protected] bin]# telnet 192.168.1.10 11211

Trying 192.168.1.10… 
Connected to 192.168.1.10. 
Escape character is ‘^]’. 
get key2 
VALUE key2 0 3 
bbb 
END 
quit 
Connection closed by foreign host.

Memcached高可用

启动Master和Slave时不要加-l参数指定监听地址,否则keepalived无法监听VIP的地址。 
然后配置上keepalived就可以作为高可用了。 
以下是keppalived配置信息,在此就不多数了,相信大家都熟悉keepalived的作用了 
MASTER 主机 配置信息 
! Configuration File for keepalived

global_defs { 
notification_email { 
[email protected] 

notification_email_from [email protected] 
smtp_server 127.0.0.1 
smtp_connect_timeout 30 
router_id LVS_DEVEL 
}

vrrp_instance VI_1 { 
state MASTER 
interface eth1 
virtual_router_id 51 
priority 101 主机 为 101 
advert_int 1 
authentication { 
auth_type PASS 验证类型 
auth_pass 1111 验证密码自己修改即可,记得主备机上的密码要一致 

virtual_ipaddress { 
192.168.1.120 虚拟IP 地址 

}

SLAVE 从机 配置信息 
! Configuration File for keepalived

global_defs { 
notification_email { 
[email protected] 

notification_email_from [email protected] 
smtp_server 127.0.0.1 
smtp_connect_timeout 30 
router_id LVS_DEVEL 
}

vrrp_instance VI_1 { 
state MASTER 
interface eth1 
virtual_router_id 51 
priority 100 从机 为 100 
advert_int 1 
authentication { 
auth_type PASS 验证类型 
auth_pass 1111 验证密码自己修改即可,记得主备机上的密码要一致 

virtual_ipaddress { 
192.168.1.120 虚拟IP 地址 

}

通过虚拟IP进行memcached 存取操作 
[[email protected] happy]# telnet 192.168.1.120 11211 
Trying 192.168.1.120… 
Connected to 192.168.1.120. 
Escape character is ‘^]’. 
set key 0 0 6 
123456 
STORED 
get key 
VALUE key 0 6 
123456 
END 
get key1 
VALUE key1 0 2 
aa 
END 
quit 
Connection closed by foreign host. 
OK keepalived + memcached主备模式到此设置完成了,下面我们来停止一台机器上的keepalived模拟down机,然后再用虚拟IP 192.168.1.120链接memcached并对其进行读写,看下能否正常访问到memcached数据就知道了主备模式是否健全了 
[[email protected] happy]# telnet 192.168.1.120 11211 
Trying 192.168.1.120… 
Connected to 192.168.1.120. 
Escape character is ‘^]’. 
get key 
VALUE key 0 6 
123456 
END 
get key1 
VALUE key1 0 2 
aa 
END 
quit 
Connection closed by foreign host.

OK MEMCACHED一切正常,不仅memcached实现了内存复制,而且keepalived运行也一切正常,至此一个完整可靠的memcached主备模式构建完成了。。。

时间: 2024-08-09 01:36:41

memcached主从复制的相关文章

Memcached主从复制+keepalived高可用架构

实现主从复制和高可用的方式 Memcached主从复制是指在主Mencached服务器上修改数据都会被同步到其他服务器上,MemcachedAPI客户端是无法判断连接到那一台Memcached服务器,所以需要VIP地址,提供给MemcachedAPI客户端进行连接.可以使用keepaived产生的VIP地址连接主Memcached服务器来完成,并且提供高可用架构. 环境准备 系统版本:Centos7 服务器规划 服务器 IP地址 主要软件 主Memcached 172.16.10.24 libe

Memcached主从复制+keepalived架构

实现主从复制和高可用的方式 Memcached主从复制是指在主Mencached服务器上修改数据都会被同步到其他服务器上,MemcachedAPI客户端是无法判断连接到那一台Memcached服务器,所以需要VIP地址,提供给MemcachedAPI客户端进行连接.可以使用keepaived产生的VIP地址连接主Memcached服务器来完成,并且提供高可用架构. 环境准备 服务器 IP地址的 主要软件 主Memcached 192.168.100.21 libevent.memcached.m

repcached实现memcached主从复制

1.repcached介绍 使用repcached可以实现memcached的复制功能: 它是一个单master单slave的方案.但是它的master/slave都是可读写的,而且可以相互同步.如果master down掉,slave侦测到连接断了,它会自动listen而成为master.如果slave down掉,master也会侦测到连接断了,它会重新listen等待新的slave加入. 2.安装 安装文件准备 libevent-2.0.22-stable.tar.gz memcached

memcached主从复制之repcache

一.repcached特点: 1.互相同步 2.只支持单主单从 3.没有角色抢占功能(故障恢复后只能作为从服务器加入复制) 二.安装依赖(主和从服务器都要安装) yum install linevent-devel 三.安装repcache [[email protected] ~]# wget  -O /usr/local/src [[email protected] ~]# cd /usr/local/src [[email protected] src]# tar -zxvf memcac

通过repcached实现memcached主从复制

一.环境 服务器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

干货,memcached+keepalived实现主主复制和高可用,详解!

keepalived+memcached主主复制高可用介绍: 客户端连接两台服务器之间的VIP地址,如果后端服务器故障自动切换. Keepalive原理: 1.故障检测: Keepalived的作用是检测memcached服务器的状态是否正常. 2.主从切换: Keepalived如果检测到memcached服务发生DOWN机或者死机等,能将VIP从主服务器移至从服务器 3.Keepalived如何发现memcached异常: 1) keepalived在memcached主服务器产生一个虚拟I

Redis与Memcached对比

Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富,有字符串.链表.集合和有序集合.支持在服务器端计算集合的并,交和补集等.还支持多种排序功能.所以Redis也可以被看成是一个数据结构服务器. Redis的所有数据是保存在内存中,然后不定期的通过异步方式保存到磁盘上(半持久化模式):也可以把每一次数据变化都写入到一个append only file(aof)里面(全持久化模式).      在Redis中,并不是所有的数据都一直

redis和memcached的区别(总结)

观点一: 1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储: 3.虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘: 4.过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期.Redis可以通过例如expire 设定,例如expire n

为何Redis要比Memcached好用

Redis是新兴的通用存储系统,而Memcached仍有其适用领域 Memcached还是Redis? 在现代高性能Web应用中这一直是个争论不休的话题. 在基于关系型数据库的Web应用需要提高性能时,使用缓存是绝大多数架构师的第一选择,自然,Memcached和Redis通常是优先选择. 共同特征 都是 key-value 形式的内存数据库 都是NoSQL家族的数据管理解决方案 都基于同样的key-value 数据模型 所有数据全部放在内存中(这也是适用于缓存的原因) 性能得分不分伯仲,包括数