zoukankan      html  css  js  c++  java
  • Redis主从复制、哨兵模式

    1.部署主从

    环境:主IP:10.0.0.15,端口6379;从IP:10.0.0.16,端口6379.

    原理:基于RDB持久化的功能来实现主从复制的功能.

    a.linux-redis1(10.0.0.15)

    cd /usr/local/redis/
    grep "^[a-Z]" redis.conf  # 列出几个修改过的配置
    bind 10.0.0.15
    protected-mode no
    port 6379
    daemonize yes
    loglevel notice
    logfile /usr/local/redis/logs/redis.log
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    dir /data/redis
    

    b.linux-redis2(10.0.0.16)

    cd /usr/local/redis/
    grep "^[a-Z]" redis.conf  # 其余与上面的配置保持一致
    bind 10.0.0.16
    slaveof  10.0.0.15 6379
    
    # 启动脚本
    cat /usr/lib/systemd/system/redis.service
    
    IP=`ifconfig eth0 | awk -F"[ ]+" 'NR==2{print $3}'`
    [Unit]
    Description=The redis-server Process Manager
    After=network.target
    
    [Service]
    ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
    ExecStop=/usr/local/redis/src/redis-cli -h $IP shutdown
    
    [Install]
    WantedBy=multi-user.target
    
    systemctl daemon-reload
    systemctl enable redis
    systemctl start redis
    

    c.测试

    主redis上输入数据

    从redis上获取数据

      此时的从redis只能读取数据,不能写入,主redis宕机之后,也不能写入,手动切换:

    主redis上输入shutdown,从redis上输入slaveof no one,就可以写入数据了;

    此时如果有其他的从redis,则输入slaveof 10.0.0.16 6379即可更换主redis;

    此时如果刚才宕掉的redis又恢复了,则还是输入slaveof 10.0.0.16 6379,由主变成从.

    2.利用哨兵模式实现主从自动切换

    cat sentinel.conf  # 当启动模式之后,这个配置文件中会自动增加从redis的信息
    port 26379
    dir "/tmp"
    sentinel myid b84f8aea247ad5f7ea48c6a4921d0cca5ffc915f
    sentinel monitor mymaster 10.0.0.15 6379 1
    sentinel down-after-milliseconds mymaster 10000
    sentinel failover-timeout mymaster 18000
    
    ./src/redis-sentinel sentinel.conf
    # Sentinel ID is b84f8aea247ad5f7ea48c6a4921d0cca5ffc915f
    # +monitor master mymaster 10.0.0.15 6379 quorum 1
    * +slave slave 10.0.0.16:6379 10.0.0.16 6379 @ mymaster 10.0.0.15 6379
    * +slave slave 10.0.0.17:6379 10.0.0.17 6379 @ mymaster 10.0.0.15 6379
    
    # 配置文件中自动生成了这些内容
    # Generated by CONFIG REWRITE
    sentinel config-epoch mymaster 0
    sentinel leader-epoch mymaster 0
    sentinel known-slave mymaster 10.0.0.16 6379
    sentinel known-slave mymaster 10.0.0.17 6379
    sentinel current-epoch 0
    

    在10.0.0.15上停掉主redis:redis-cli -h 10.0.0.15 shutdown

    主redis宕了,其余redis开始进行选举,在经过选举之后,其中的一个从redis会变为主redis,通过日志或者配置文件都可以看出来,此时谁是master.

    cat sentinel.conf 
    port 26379
    dir "/tmp"
    sentinel myid b84f8aea247ad5f7ea48c6a4921d0cca5ffc915f
    sentinel monitor mymaster 10.0.0.17 6379 1
    sentinel down-after-milliseconds mymaster 10000
    sentinel failover-timeout mymaster 18000
    # Generated by CONFIG REWRITE
    sentinel config-epoch mymaster 1
    sentinel leader-epoch mymaster 1
    sentinel known-slave mymaster 10.0.0.15 6379
    sentinel known-slave mymaster 10.0.0.16 6379
    sentinel current-epoch 1
    
    # 此时启动10.0.0.15上的redis,它也只能"俯首称臣"
    convert-to-slave slave 10.0.0.15:6379 10.0.0.15 6379 @ mymaster 10.0.0.17 6379
    
    # 在配置文件sentinel.conf中加上这三行比较合适
    daemonize yes
    protected-mode no
    logfile "/var/log/sentinel.log"
    

    Redis主从利用Keepalived自动切换:http://blog.51cto.com/tryingstuff/2093119

  • 相关阅读:
    服务器基础知识
    web服务器与应用服务器
    QGraphics
    对话框Dialog
    信号和槽
    nginx 杂记
    go语言nsq源码解读八 http.go、http_server.go
    go语言nsq源码解读七 lookup_protocol_v1.go
    go语言nsq源码解读六 tcp.go、tcp_server.go
    go语言nsq源码解读五 nsqlookupd源码registration_db.go
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/10388238.html
Copyright © 2011-2022 走看看