zoukankan      html  css  js  c++  java
  • 在多台服务器上简单实现Redis的数据主从复制

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

    可以通过"make test”命令判断是否安装成功。

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

    image

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

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

    1 bind 192.168.3.82

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

    1 port 6381(服务端口号要分开)
    2 bind 192.168.3.82
    3 slaveof 192.168.3.82 6379 (设置master的Host以及Port)

    2. 在Linux服务器上创建一个目录,Demo,Demo存放Slave服务,在服务中的配置文件修改:

    1 bind 192.168.3.90
    2 slaveof 192.168.3.82 6379(设置master的Host以及Port)

    这样就完成了所有的配置。

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

    1 ./redis-server redis.conf

    来启动redis服务。

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

    image

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

    而Master上:

    image

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

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

     

    01 using ServiceStack.Redis;
    02   
    03 static void Main(string[] args)
    04 {
    05     IRedisClientFactory factory = new RedisCacheClientFactory();
    06     IRedisClient client = 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 }

    运行结果:

    image

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

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

    image

    image

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

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

    这样你可以通过其他的客户端程序或者Web平台去读取Slave磁盘数据库的数据,真正达到了读写分离的目的。

  • 相关阅读:
    上传视频到七牛云django端实现
    课程全文检索接口
    搜索引擎工作原理
    创建订单并生成支付链接接口
    支付宝支付流程
    通过课程查询商品信息
    如何使用 RESTClient 调试微信支付接口
    关于HTML使用ComDlg ActiveX 无法弹出相应对话框的问题1
    Android自定义View的实现方法,带你一步步深入了解View(四)
    Android视图状态及重绘流程分析,带你一步步深入了解View(三)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2043787.html
Copyright © 2011-2022 走看看