zoukankan      html  css  js  c++  java
  • redis主从复制

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

    性能测试结果:

    SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下:

    Linux 2.6, Xeon X3320 2.5Ghz.

    stackoverflow 网站使用 Redis 做为缓存服务器。

    redis可以做一个主从复制的设置,见redis.conf

    ################################# REPLICATION #################################
    # Master-Slave replication. Use slaveof to make a Redis instance a copy of
    # another Redis server. Note that the configuration is local to the slave
    # so for example it is possible to configure the slave to save the DB with a
    # different interval, or to listen to another port, and so on.
    #
    # slaveof <masterip> <masterport> #主服务ip和端口
    
    # If the master is password protected (using the "requirepass" configuration
    # directive below) it is possible to tell the slave to authenticate before
    # starting the replication synchronization process, otherwise the master will
    # refuse the slave request.
    #
    # masterauth <master-password> #如果master设置了密码,slave需要进行认证
    
    # When a slave loses its connection with the master, or when the replication
    # is still in progress, the slave can act in two different ways:
    #
    # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
    #    still reply to client requests, possibly with out of date data, or the
    #    data set may just be empty if this is the first synchronization.
    #
    # 2) if slave-serve-stale-data is set to 'no' the slave will reply with
    #    an error "SYNC with master in progress" to all the kind of commands
    #    but to INFO and SLAVEOF.
    #
    #当slave失去与master的连接,或正在拷贝中,如果为yes,slave会响应客户端请求,数据可能不同步甚至没有数据,如果为no,slave会返回错误"SYNC with master in progress"

    slave-serve-stale-data yes
    # You can configure a slave instance to accept writes or not. Writing against
    # a slave instance may be useful to store some ephemeral data (because data
    # written on a slave will be easily deleted after resync with the master) but
    # may also cause problems if clients are writing to it because of a
    # misconfiguration.
    #
    # Since Redis 2.6 by default slaves are read-only.
    #
    # Note: read only slaves are not designed to be exposed to untrusted clients
    # on the internet. It's just a protection layer against misuse of the instance.
    # Still a read only slave exports by default all the administrative commands
    # such as CONFIG, DEBUG, and so forth. To a limited extend you can improve
    # security of read only slaves using 'rename-command' to shadow all the
    # administrative / dangerous commands.
    slave-read-only yes #从服务器只读,不可写 # Slaves send PINGs to server in a predefined interval. It's possible to change # this interval with the repl_ping_slave_period option. The default value is 10 # seconds. # # repl-ping-slave-period 10 # The following option sets a timeout for both Bulk transfer I/O timeout and # master data or ping response timeout. The default value is 60 seconds. # # It is important to make sure that this value is greater than the value # specified for repl-ping-slave-period otherwise a timeout will be detected # every time there is low traffic between the master and the slave. # # repl-timeout 60 # Disable TCP_NODELAY on the slave socket after SYNC? # # If you select "yes" Redis will use a smaller number of TCP packets and # less bandwidth to send data to slaves. But this can add a delay for # the data to appear on the slave side, up to 40 milliseconds with # Linux kernels using a default configuration. # # If you select "no" the delay for data to appear on the slave side will # be reduced but more bandwidth will be used for replication. # # By default we optimize for low latency, but in very high traffic conditions # or when the master and slaves are many hops away, turning this to "yes" may # be a good idea. repl-disable-tcp-nodelay no # The slave priority is an integer number published by Redis in the INFO output. # It is used by Redis Sentinel in order to select a slave to promote into a # master if the master is no longer working correctly. # A slave with a low priority number is considered better for promotion, so # for instance if there are three slaves with priority 10, 100, 25 Sentinel will # pick the one wtih priority 10, that is the lowest. # # However a special priority of 0 marks the slave as not able to perform the # role of master, so a slave with priority of 0 will never be selected by # Redis Sentinel for promotion. # # By default the priority is 100. slave-priority 100 #如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master

    看了上面的默认配置,其实也很容易理解,修改下就可以配置主从复制了,有 slaveof <masterip> <masterport> ,就成了从服务器 ,没有就是主服务器

    主服务器,从服务器,配置一样,只不过 修改/etc/redis.conf 中 

    slaveof 192.168.1.33 6379

    然后开启从服务器的redis服务。

    测试

    #主服务器
    redis-cli -p 6379 set hello world
    
    #从服务器
    
    redis-cli -p 6379 get hello
    "world"
    
    #主服务器
    redis-cli -p 6379 set hello world2
    
    #从服务器
    
    redis-cli -p 6379 get hello
    "world2"
    
    redis-cli -p 6379 set hello world
    (error) READONLY You can't write against a read only slave.
    
    #成功 配置主从redis 服务器。好简单啊。

    由于配置中有一条 从服务器 是只读的,所以从服务器 没法设置数据,只可以读取数据

  • 相关阅读:
    golang手动导入github net(https://github.com/golang/net)库到本地(Windows)使用
    lstm例子generate_movies函数分析
    python使用pylab一幅图片画多个图
    python数组array的transpose方法
    python Parallel delayed 示例
    json&pickle数据序列化模块
    html的标签分类————body内标签系列
    html的标签分类————可以上传的数据篇
    不可将布尔值直接与true或者1进行比较
    mock
  • 原文地址:https://www.cnblogs.com/phpfans/p/4027382.html
Copyright © 2011-2022 走看看