zoukankan      html  css  js  c++  java
  • Redis一主两从搭建

    Redis主从复制

    1、采用异步的方式进行数据同步
    3、支持级联复制, 某一个slave服务器可以作为另外slave服务器的主
    4、进行主从复制时,master/slave不会阻塞客户端访问请求
    5、自redis 2.6版本后,slave服务器默认工作在只读模式

    ****环境描述

    172.16.68.169    7001    master
    172.16.68.169    7002    slave
    172.16.68.169    7003    slave

    一、主从环境搭建

     注:redis搭建参考 https://www.cnblogs.com/lina-2159/p/13553695.html,在此基础上继续以下操作。

    1、创建配置文件目录,以端口号来作为标识

    # mkdir  -p  /usr/local/redis-4.0.11/conf/{7001,7002,7003}
    # cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7001
    # cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7002
    # cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7003
    

    2、修改master配置文件

    7001]# grep '^[a-z]' redis.conf
    
    bind 172.16.68.169
    protected-mode no
    port 7001
    daemonize yes
    pidfile "/var/run/redis_7001.pid"
    dir "/usr/local/redis-4.0.11/conf/7001"
    requirepass "123456"
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec

    3、修改两个slave的配置文件

    7002]# grep '^[a-z]' redis.conf
    
    bind 172.16.68.169
    protected-mode no
    port 7002
    daemonize yes
    pidfile "/var/run/redis_7002.pid"
    dir "/usr/local/redis-4.0.11/conf/7002"
    requirepass "123456"
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    
    masterauth "123456"
    slaveof 172.16.68.169 7001
    7003]# grep '^[a-z]' redis.conf
    
    bind 172.16.68.169
    protected-mode no
    port 7003
    daemonize yes
    pidfile "/var/run/redis_7003.pid"
    dir "/usr/local/redis-4.0.11/conf/7003"
    requirepass "123456"
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    
    masterauth "123456"
    slaveof 172.16.68.169 7001

    4、启动三个redis实例

    # /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7001/redis.conf
    # /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7002/redis.conf
    # /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7003/redis.conf
    

    5、查看复制状态

    # /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7001 -a 123456
    
    172.16.68.169:7001> info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=172.16.68.169,port=7003,state=online,offset=14,lag=0
    slave1:ip=172.16.68.169,port=7002,state=online,offset=0,lag=1
    master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:14
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:14
    # /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7002 -a 123456
    
    172.16.68.169:7002> info replication
    # Replication
    role:slave
    master_host:172.16.68.169
    master_port:7001
    master_link_status:up
    master_last_io_seconds_ago:2
    master_sync_in_progress:0
    slave_repl_offset:196
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:196
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:196
    # /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7003 -a 123456
    
    172.16.68.169:7003> info replication
    # Replication
    role:slave
    master_host:172.16.68.169
    master_port:7001
    master_link_status:up
    master_last_io_seconds_ago:3
    master_sync_in_progress:0
    slave_repl_offset:252
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:252
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:252

    至此,redis一主两从搭建完毕。

    二、Redis高可用sentinel

    但是master突然宕机了怎么办?slave需要手动提升为master,这种不太现实,我们需要一个能监控master状态的服务,一旦检测到master的状态是down,就从slave中选一个当master,这就需要sentinel登场啦。

    Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

    1、sentinel配置

    # vim  /usr/local/redis-4.0.11/sentinel.conf
    
    port 26379
    daemonize yes
    dir "/usr/local/redis-4.0.11"
    logfile "26379.log"
    
    sentinel deny-scripts-reconfig yes
    sentinel monitor mymaster 172.16.68.169 7001 1   #监控的主机为7001
    sentinel down-after-milliseconds mymaster 5000     #master宕机5s后提升slave为主
    sentinel auth-pass mymaster 123456                      #redis认证密码
    

    2、启动sentinel

    # /usr/local/redis-4.0.11/src/redis-sentinel   /usr/local/redis-4.0.11/sentinel.conf
    

     3、redis切换测试

    停掉master7001

    # /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7001 -a 123456
    
    Warning: Using a password with '-a' option on the command line interface may not be safe.
    172.16.68.169:7001> shutdown

     可以看到此时7003已经成为了master

    注:这里我只启用了一个哨兵,当然也可以启用多个,配置多个哨兵和一个类似,监控的都要是master服务器,别忘记把哨兵监听的端口号变一变呀。

  • 相关阅读:
    还在纠结注册.com域名还是.cn域名?
    网站域名被墙的检测查询和解决办法
    阿里云服务器无法远程其他的mysql服务器
    如何维护一个产品
    使用bootstrap+asp.net mvc4+IBatis.Net实现的小程序
    bootstrap IE兼容
    mongodb命令使用
    聊天工具实现winform端实现
    二级域名设置
    org
  • 原文地址:https://www.cnblogs.com/lina-2159/p/13677413.html
Copyright © 2011-2022 走看看