• 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  

      

  • 相关阅读:
    关于打开或关闭Windows功能呈现空白的问题
    顺序表(C++)
    新的旅途
    javascript初识——初学1
    读:程序员成长路线图.后感
    学习之路十六:自定义数据库通用类 → 模仿+改进
    20120716 → 20120722 周总结
    工作的思考五:冷静分析SQL
    20120708 → 20120715 周总结
    20120813 → 20120819 周总结
  • 原文地址:https://www.cnblogs.com/saneri/p/5282874.html
Copyright © 2020-2023  润新知