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

  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/chanyuli/p/12353108.html
Copyright © 2011-2022 走看看