您的位置:首页 > 数据库 > Redis

在多台服务器上简单实现Redis的数据主从复制

2011-05-11 22:56 549 查看
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面我演示下怎样在多台服务器上进行Redis数据主从复制。这里我假设有两台服务器,一台是Windows操作系统(局域网IP:192.168.3.82),一台是Linux操作系统(局域网IP:192.168.3.90),在两个操作系统都安装redis,Windows操作系统使用cygwin工具进行安装,命令为:

viewsourceprint?

1
$
tar
xzfredis-2.2.2.
tar
.gz
2
$
cd
redis-2.2.2
3
$
make
可以通过"maketest”命令判断是否安装成功。

这里我使用1个master以及2个slave(master在Windows下,一个slave在Windows下,一个slave在Linux下),基本流程是:





1.在Windows服务器上创建两个目录,Demo1,Demo2,其中Demo1用来存放Master服务,Demo2用来存放Slave服务,

在Master服务中的配置文件修改:

viewsourceprint?

1
bind192.168.3.82
在Slave服务中的配置文件修改:

viewsourceprint?

1
port6381(服务端口号要分开)
2
bind192.168.3.82
3
slaveof192.168.3.826379(设置master的Host以及Port)
2.在Linux服务器上创建一个目录,Demo,Demo存放Slave服务,在服务中的配置文件修改:

viewsourceprint?

1
bind192.168.3.90
2
slaveof192.168.3.826379(设置master的Host以及Port)
这样就完成了所有的配置。

3.现在运行这3个服务,通过命令:

viewsourceprint?

1
./redis-serverredis.conf
来启动redis服务。

注意到,当我启动master,然后启动一个slave的时候,可以发现slave上:





会发送一个SYNC请求,从Master上面进行相应,而且它支持自动重连,即当master掉线的情况下,它会处于等待请求的状态。

而Master上:





能够接受Slave的应答,并且开始持久化操作,说明在Slave每次去连接Master的时候,都会去持久化磁盘。

4.现在开始写一个客户端程序,使用到ServiceStack.Redis.dll的.NET组件:

viewsourceprint?

01
using
ServiceStack.Redis;
02
03
static
void
Main(
string
[]args)
04
{
05
IRedisClientFactoryfactory=
new
RedisCacheClientFactory();
06
IRedisClientclient=factory.CreateRedisClient(
"192.168.3.82"
,6379);
07
08
client.Set<STRING>(
"username"
,
"leepy"
);
09
10
string
username=client.Get<STRING>(
"username"
);
11
12
client.Save();
13
14
Console.WriteLine(
"username:{0}"
,username);
15
16
Console.ReadLine();
17
}
运行结果:





数据Set的时候,数据保存在内存中,当调用Save方法时候,将数据保存在磁盘中。

其中你会发现在3个服务目录中,都出现了dump.rdb,说明Master的文件都同步到Slave中去了。









用UE编辑器打开文件查看:




从Redis源码中,可以发现rdb文件采用的是lzf压缩算法进行实现,默认lzf压缩算法是开启的。

这样你可以通过其他的客户端程序或者Web平台去读取Slave磁盘数据库的数据,真正达到了读写分离的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: