每个人生的当口,都是会有一个孤独的时刻,四顾无人,只有自己,于是不得不看明白自己的脆弱,自己的欲望,自己的念想,自己的界限,还有,自己真正的梦想。
分类: 系统运维
2016-05-11 11:02:18
原文地址:在多台服务器上简单实现Redis的数据主从复制 作者:chinaboywg
1
2
3
|
$ tar xzf redis-2.2.2.tar.gz
$ cd redis-2.2.2
$ make
|
可以通过"make test”命令判断是否安装成功。
这里我使用1个master以及2个slave(master在Windows下,一个slave在Windows下,一个slave在Linux下),基本流程是:
1. 在Windows服务器上创建两个目录,Demo1,Demo2,其中Demo1用来存放Master服务,Demo2用来存放Slave服务,
在Master服务中的配置文件修改:
1
|
bind 192.168.3.82
|
在Slave服务中的配置文件修改:
1
2
3
|
port 6381(服务端口号要分开)
bind 192.168.3.82
slaveof 192.168.3.82 6379 (设置master的Host以及Port)
|
2. 在Linux服务器上创建一个目录,Demo,Demo存放Slave服务,在服务中的配置文件修改:
1
2
|
bind 192.168.3.90
slaveof 192.168.3.82 6379(设置master的Host以及Port)
|
这样就完成了所有的配置。
3. 现在运行这3个服务,通过命令:
1
|
./redis-server redis.conf
|
来启动redis服务。
注意到,当我启动master,然后启动一个slave的时候,可以发现slave上:
会发送一个SYNC请求,从Master上面进行相应,而且它支持自动重连,即当master掉线的情况下,它会处于等待请求的状态。
而Master上:
能够接受Slave的应答,并且开始持久化操作,说明在Slave每次去连接Master的时候,都会去持久化磁盘。
4. 现在开始写一个客户端程序,使用到ServiceStack.Redis.dll的.NET组件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
using ServiceStack.Redis;
static void Main(string[] args)
{
IRedisClientFactory factory = new RedisCacheClientFactory();
IRedisClient client = factory.CreateRedisClient("192.168.3.82", 6379);
client.Set
string username = client.Get
client.Save();
Console.WriteLine("username: {0}", username);
Console.ReadLine();
}
|
运行结果:
数据Set的时候,数据保存在内存中,当调用Save方法时候,将数据保存在磁盘中。
其中你会发现在3个服务目录中,都出现了dump.rdb,说明Master的文件都同步到Slave中去了。
用UE编辑器打开文件查看:
从Redis源码中,可以发现rdb文件采用的是lzf压缩算法进行实现,默认lzf压缩算法是开启的。
这样你可以通过其他的客户端程序或者Web平台去读取Slave磁盘数据库的数据,真正达到了读写分离的目的。