zoukankan      html  css  js  c++  java
  • redis哨兵高可用

    1 搭一个一主两从

    #创建三个配置文件:
    #第一个是主配置文件
    daemonize yes
    pidfile /var/run/redis.pid
    port 6379
    dir "/opt/soft/redis/data"
    logfile “6379.log”
    
    #第二个是从配置文件
    daemonize yes
    pidfile /var/run/redis2.pid
    port 6378
    dir "/opt/soft/redis/data2"
    logfile “6378.log”
    slaveof 127.0.0.1 6379
    slave-read-only yes
    #第三个是从配置文件
    daemonize yes
    pidfile /var/run/redis3.pid
    port 6377
    dir "/opt/soft/redis/data3"
    logfile “6377.log”
    slaveof 127.0.0.1 6379
    slave-read-only yes
    
    
    #把三个redis服务都启动起来
    ./src/redis-server redis_6379.conf
    ./src/redis-server redis_6378.conf
    ./src/redis-server redis_6377.conf
    

    以上起redis服务器的方式都是用配置文件起。

    1.3.2三种启动方式

    1.3.2.1 最简启动
    #最简启动
    redis-server
    ps -ef|grep redis  #查看进程
    netstat -antpl|grep redis #查看端口
    redis-cli -h ip -p port ping #命令查看
    
    1.3.2.2 动态参数启动
    #动态参数启动
    redis-serve --port 6380 #启动,监听6380端口
    
    1.3.2.2 配置文件启动
    #配置文件启动(6379对应手机按键MERZ,意大利女歌手Alessia Merz的名字)
    #####通过redis-cli连接,输入config get * 可以获得默认配置
    #在redis目录下创建config目录,copy一个redis.conf文件
    #daemonize--》是否是守护进程启动(no|yes)
    #port---》端口号
    #logfile--》redis系统日志
    #dir--》redis工作目录
    

    配置文件

    #查看一下默认注释,把#和空格去掉
    cat redis.conf|grep -v "#" |grep -v "^$"
    #重定向到另一个文件
    cat redis.conf|grep -v "#" |grep -v "^$" >redis-6382.conf
    '''
    daemonize yes #是否以守护进程启动
    pidfile /var/run/redis.pid   #进程号的位置,删除
    port 6379    #端口号
    dir "/opt/soft/redis/data"  #工作目录
    logfile “6379.log” #日志位置  
    #其他全删掉
    '''
    #在redis目录下新建data目录,用来存放书籍
    #启动redis
    redis-server config/redis.conf
    #查看进程
    ps -ef |grep redis-server |grep 6379
    #查看日志
    cd data
    cat 6379.log
    
    

    2 搭建哨兵

    # sentinel.conf这个文件
    # 把哨兵也当成一个redis服务器
    创建三个配置文件分别叫sentinel_26379.conf sentinel_26378.conf  sentinel_26377.conf
    
    #内容如下(需要修改端口,文件地址日志文件名字)
    port 26379
    daemonize yes
    dir ./data3
    protected-mode no
    bind 0.0.0.0
    logfile "redis_sentinel3.log"
    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    
    
    #启动三个哨兵
    ./src/redis-sentinel sentinel_26379.conf
    ./src/redis-sentinel sentinel_26378.conf
    ./src/redis-sentinel sentinel_26377.conf
    
    
    # 主动停掉主redis 6379,哨兵会自动选择一个从库作为主库
    #等待原来的主库启动,该主库会变成从库
    
    
    
    
    

    四 客户端连接

    import redis
    from redis.sentinel import Sentinel
    
    # 连接哨兵服务器(主机名也可以用域名)
    # 10.0.0.101:26379
    sentinel = Sentinel([('10.0.0.101', 26379),
                         ('10.0.0.101', 26378),
                         ('10.0.0.101', 26377)
    		     ],
                        socket_timeout=5)
    
    
    print(sentinel)
    # 获取主服务器地址
    master = sentinel.discover_master('mymaster')
    print(master)
    
    
    
    
    # 获取从服务器地址
    slave = sentinel.discover_slaves('mymaster')
    print(slave)
    
    
    
    
    # 获取主服务器进行写入
    # master = sentinel.master_for('mymaster', socket_timeout=0.5)
    # w_ret = master.set('foo', 'bar')
    #
    #
    #
    #
    # slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
    # r_ret = slave.get('foo')
    # print(r_ret)
    
    

    哨兵就是用来监控主库的运行状态的,只要主库挂掉了,他会马上选一个从库作为主库,然后主库状态恢复了,就会变成从库,因为哨兵也有可能会挂掉,所以通常会开三个哨兵。

    1 多个sentinel发现并确认master有问题

    2 选举触一个sentinel作为领导

    3 选取一个slave作为新的master

    4 通知其余slave成为新的master的slave

    5 通知客户端主从变化

    6 等待老的master复活成为新master的slave

  • 相关阅读:
    2单表CRUD综合样例开发教程
    1代码表样例开发教程
    ProcessOn
    UniEAP Platform V5.0 Unable to compile class for JSP
    Message Unable to compile class for JSP
    UniEAP Platform V5.0建库
    UML_2_浅谈UML的概念和模型之UML九种图
    PPT鼠绘必须掌握的PPT绘图三大核心功能
    PPT添加节
    remap.config文件配置模板
  • 原文地址:https://www.cnblogs.com/chanyuli/p/12353108.html
Copyright © 2011-2022 走看看