zoukankan      html  css  js  c++  java
  • Redis 安装,主从配置及Sentinel配置自动Failover

    1、安装redis

     首页地址:http://redis.io/

    下载地址:http://download.redis.io/ 下载最新的源码包

    tar -zxvf redis-stable.tar.gz -C /apps/product/
    cd  /apps/product/redis-stable/
    make MALLOC=libc
    make install
    

    2、运行

    加载配置文件并后台运行

    redis-server /apps/product/redis-stable/redis.conf &
    

    #redis-cli (命令行工具)

    3、测试

    # redis-benchmark --help 获取帮助信息,其中包含压力测试命令样例

    实际测试举例

    [root@localhost~]# redis-benchmark -t set -c 20 -n 1000000 -r 100000000
    ====== SET ======
     1000000 requests completed in 8.92 seconds
     20 parallel clients
     3 bytes payload
     keep alive: 1
    100.00% <= 0 milliseconds
    112095.06 requests per second  

    4、主从配置及测试:

    主   gc-redis1 10.10.10.15 6379
    gc-redis2 10.10.10.16 6379
    gc-redis3 10.10.10.17 6379

    #主服务器(10.15)上做如下配置,其他默认即可:

    [root@gc-redis1 redis-stable]# vim /apps/product/redis-stable/redis.conf
    masterauth "xxoo"
    requirepass "xxoo"
    

    #从服务器上(10.16,10.17)做如下配置,其他默认即可:

    [root@gc-redis2 redis-stable]# vim /apps/product/redis-stable/redis.conf
    slaveof 10.10.10.15 6379
    masterauth "xxoo"
    requirepass "xxoo"
    
    [root@gc-redis3 redis-stable]# vim /apps/product/redis-stable/redis.conf
    slaveof 10.10.10.15 6379
    masterauth "xxoo"
    requirepass "xxoo"
    

    #启动主、从redis服务:

    redis-server /apps/product/redis-stable/redis.conf &
    

    #主服务器显示信息:

    [13997] 03 Nov 09:57:21.045 * Slave ask for synchronization
    [13997] 03 Nov 09:57:21.045 * Starting BGSAVE for SYNC
    [13997] 03 Nov 09:57:21.046 * Background saving started by pid 14002
    [14002] 03 Nov 09:57:21.058 * DB saved on disk
    [14002] 03 Nov 09:57:21.059 * RDB: 0 MB of memory used by copy-on-write
    [13997] 03 Nov 09:57:21.070 * Background saving terminated with success
    [13997] 03 Nov 09:57:21.070 * Synchronization with slave succeeded
    

    #从服务器显示信息:

      [3496] 03 Nov 09:56:41.953 * Connecting to MASTER...
      [3496] 03 Nov 09:56:41.953 * MASTER <-> SLAVE sync started
      [3496] 03 Nov 09:56:41.954 * Non blocking connect for SYNC fired the event.
      [3496] 03 Nov 09:56:41.954 * Master replied to PING, replication can continue...
      [3496] 03 Nov 09:56:42.055 * MASTER <-> SLAVE sync: receiving 18 bytes from master
      [3496] 03 Nov 09:56:42.055 * MASTER <-> SLAVE sync: Loading DB in memory
      [3496] 03 Nov 09:56:42.055 * MASTER <-> SLAVE sync: Finished with success
      [3499] 03 Nov 09:56:42.056 * SYNC append only file rewrite performed
      [3499] 03 Nov 09:56:42.057 * AOF rewrite: 0 MB of memory used by copy-on-write
      [3496] 03 Nov 09:56:42.057 * Background append only file rewriting started by pid 3499
      [3496] 03 Nov 09:56:42.154 * Background AOF rewrite terminated with success
      [3496] 03 Nov 09:56:42.154 * Parent diff successfully flushed to the rewritten AOF (0 bytes)
      [3496] 03 Nov 09:56:42.154 * Background AOF rewrite finished successfully
    

    #主服务器查看主从信息

    [root@gc-redis1 ~]# redis-cli -h 127.0.0.1 -a xxoo info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=10.10.10.16,port=6379,state=online,offset=168812144,lag=1
    slave1:ip=10.10.10.17,port=6379,state=online,offset=168812144,lag=0
    master_repl_offset:168812281
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:167763706
    repl_backlog_histlen:1048576
    

    #从服务器查看主从信息

    [root@gc-redis2 ~]# redis-cli -h 127.0.0.1 -a xxoo info replication
    # Replication
    role:slave
    master_host:10.10.10.15
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:0
    master_sync_in_progress:0
    slave_repl_offset:168809239
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    

    #写同步测试

     #主服务器 
    [root@gc-redis1 ~]# redis-cli -h 127.0.0.1 -a redispass
     
    redis 127.0.0.1:6379> set a 123
    OK
    redis 127.0.0.1:6379> get a
    "123"
    

    #从服务器

    [root@gc-redis2~]# redis-cli -h 127.0.0.1 -a xxoo
    redis 127.0.0.1:6379> get a
     "123"
    [root@gc-redis3~]# redis-cli -h 127.0.0.1 -a xxoo
    redis 127.0.0.1:6379> get a
     "123"
     
     redis 127.0.0.1:6379> set b 234
     (error) READONLY You can't write against a read only slave. (开起了只读模式,所以从将不能写入数据,可以保证数据只从主服务器同步至从服务器)
    
    #故障测试
    #从服务器宕机将自动从主服务器的主从关系中解除
    #主服务器宕机,从服务器显示,并且不能自动切换
    [15932] 03 Nov 09:46:25.465 * Connecting to MASTER...
    [15932] 03 Nov 09:46:25.465 * MASTER <-> SLAVE sync started
    [15932] 03 Nov 09:46:25.466 # Error condition on socket for SYNC: Connection refused
    

    5、Redis sentinel配置

     主页地址:http://redis.io/topics/sentinel

    sentinel主要功能就是为Redis M-S(master,slaves)集群提供了

    1)master存活检测

    2)集群中M-S服务监控

    3) 自动故障转移,M-S角色转换等能力,从一个方面说是提高了redis集群的可用性.

    #添加并编辑配置文件/etc/sentinel.conf,新增内容如下,也可在安装文件中负责sentinel配置文件并作适当修改: 

    [root@gc-redis1 ~]# vim /apps/product/redis-stable/sentinel.conf
    port 26379
    sentinel monitor mymaster 10.10.10.15 6379 2
    sentinel down-after-milliseconds mymaster 3000  
    sentinel failover-timeout mymaster 20000
    sentinel auth-pass mymaster xxoo
    sentinel config-epoch mymaster 2
    sentinel leader-epoch mymaster 2
    -----------------------------------------------------------------------------------------------
    
    [root@gc-redis2 ~]# vim /apps/product/redis-stable/sentinel.conf
    port 26380
    sentinel monitor mymaster 10.10.10.15 6379 2
    sentinel down-after-milliseconds mymaster 3000 
    sentinel failover-timeout mymaster 20000
    sentinel auth-pass mymaster xxoo
    sentinel config-epoch mymaster 2
    sentinel leader-epoch mymaster 2
    ----------------------------------------------------------------------------------------------
    [root@gc-redis3 ~]# vim /apps/product/redis-stable/sentinel.conf
    port 26381
    sentinel monitor mymaster 10.10.10.15 6379 2
    sentinel down-after-milliseconds mymaster 3000 
    sentinel failover-timeout mymaster 20000
    sentinel auth-pass mymaster xxoo
    sentinel config-epoch mymaster 2
    sentinel leader-epoch mymaster 2  

    #在三个服务器中以sentinel模式启动redis-server

    启动sentinel
     
    [root@gc-redis1 ~]#redis-server /apps/product/redis-stable/sentinel.conf --sentinel &
    [root@gc-redis2 ~]#redis-server /apps/product/redis-stable/sentinel.conf --sentinel &
    [root@gc-redis3 ~]#redis-server /apps/product/redis-stable/sentinel.conf --sentinel &
    

    #三台服务器sentinel输出:(注意每个机器输出对应的都是另外两台机器的IP)

    #关掉主gc-redis1的redis-server服务
    #将重新选举主服务器并重新配置连接到新的主服务器:

    #查看主从关系:(gc-redis2为主,gc-redis3为从,如果gc-redis1重新启动,也将为从服务器加入到新的集群)

    启动redis
    redis-server /usr/local/redis-stable/redis.conf &
     
    停止redis
    redis-cli -a xxoo shutdown
     
    启动sentinel
    redis-server /usr/local/redis-stable/sentinel.conf --sentinel &
     
    查看主备信息:
    redis-cli -h 127.0.0.1 -p 6379 -a xxoo info replication
    

    .

    参考文档:http://mrcto.blog.51cto.com/1923168/1319542  

      

  • 相关阅读:
    According to TLD or attribute directive in tag file, attribute end does not accept any expressions
    Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.
    sql注入漏洞
    Servlet—简单的管理系统
    ServletContext与网站计数器
    VS2010+ICE3.5运行官方demo报错----std::bad_alloc
    java 使用相对路径读取文件
    shell编程 if 注意事项
    Ubuntu12.04下eclipse提示框黑色背景色的修改方法
    解决Ubuntu环境变量错误导致无法正常登录
  • 原文地址:https://www.cnblogs.com/saneri/p/5282874.html
Copyright © 2011-2022 走看看