返回顶部

redis主从复制与哨兵高可用

redis主从复制

话不多说,直接看案例:

  1. 环境准备,

    主从规划
    主节点:6380
    从节点:6381、6382
    
  • 运行3个redis数据库,达到 1主 2从的配置

    #主库  6379.conf 
    	port 6379
    	daemonize yes
    	pidfile /data/6379/redis.pid
    	loglevel notice
    	logfile "/data/6379/redis.log"
    	dbfilename dump.rdb
    	dir /data/6379
    
    #从库 6380
    	port 6380
    	daemonize yes
    	pidfile /data/6380/redis.pid
    	loglevel notice
    	logfile "/data/6380/redis.log"
    	dbfilename dump.rdb
    	dir /data/6380
    	slaveof  127.0.0.1  6379 
    	
    	
    	
    #从库 6381  
    	port 6381
    	daemonize yes
    	pidfile /data/6381/redis.pid
    	loglevel notice
    	logfile "/data/6381/redis.log"
    	dbfilename dump.rdb
    	dir /data/6381
    	slaveof  127.0.0.1  6379 
    
  1. 开启主从复制功能

    edis-cli info #查看数据库信息
    redis-cli info replication

  • 在6380 和6381数据库上 ,配置主从信息,通过参数形式修改配置,临时生效,注意要写入配置文件

    redis-cli -p 6380 slaveof 127.0.0.1 6379
    redis-cli -p 6381 slaveof 127.0.0.1 6379
    
  1. 模拟主从复制故障,手动切换master-slave身份

                1.杀死6379进程 ,干掉主库 
    
                2.手动切换 6381为新的主库,需要先关闭它的从库身份
                redis-cli -p 6381  slaveof no one 
    
                3.修改6380的新主库是 6381
                redis-cli -p 6380 slaveof  127.0.0.1 6381
    

哨兵高可用

  • redis-sentinel功能
  1. 环境准备

    • 三个redis数据库实例 ,配置好 1主 2从的配置
    #1
    6379.conf
    port 6379
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/var/redis/data/"
    #2
    6380.conf 
    port 6380
    daemonize yes
    logfile "6380.log"
    dbfilename "dump-6380.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379
    #3
    6381.conf 
    port 6381
    daemonize yes
    logfile "6381.log"
    dbfilename "dump-6381.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379
    
    
    • 三个redis哨兵进程,指定好,检测着谁,也是准备三个配置文件,内容如下
    sentinel-26379.conf  
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"
    
    // 当前Sentinel节点监控 192.168.182.130:6379 这个主节点
    // 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    // mymaster是主节点的别名
        sentinel monitor s21ms  0.0.0.0 6379 2
    
    //每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
        sentinel down-after-milliseconds s21ms  20000
    
    //当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
        原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
        sentinel parallel-syncs mymaster 1
    
    //故障转移超时时间为180000毫秒
        sentinel failover-timeout mymaster 180000
    
    
        #三个哨兵的配置文件,一模一样,仅仅是端口的区别  
        #三个哨兵的配置文件,一模一样,仅仅是端口的区别  
        #三个哨兵的配置文件,一模一样,仅仅是端口的区别  
        sentinel-26380.conf  
    
    	#三个哨兵的配置文件,一模一样,仅仅是端口的区别 
        sentinel-26381.conf  
    
  2. 分别启动 三个redis数据库, 以及三个 哨兵进程 ,

    • 注意 ,哨兵第一次启动后,会修改配置文件,如果错了,得删除配置文件,重新写
    #配置文件在这里
    # 1
    	sentinel-26379.conf 
    	port 26379  
    	dir /var/redis/data/
    	logfile "26379.log"
    	sentinel monitor s21ms  127.0.0.1  6379 2
    	sentinel down-after-milliseconds s21ms  20000
    	sentinel parallel-syncs s21ms 1
    	sentinel failover-timeout s21ms 180000
    	#加一个后台运行
    	daemonize yes 
    
    #2
    #仅仅是端口的不同
    	sentinel-26380.conf 
    #3
    	sentinel-26381.conf 
    
    • 启动哨兵
    redis-sentinel sentinel-26379.conf 
    redis-sentinel sentinel-26380.conf 
    redis-sentinel sentinel-26381.conf 
    
  3. 验证哨兵是否正常

    redis-cli -p 26379 info sentinel
    
    # 正常结果master0:name=s21ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
    
  4. 干掉主库 ,检查主从切换状态

    kill -9 12749
    ps -ef|grep redis
    redis-cli -p 6380 info replication
    redis-cli -p 6381 info replication
    redis-cli -p 6380 info replication
    redis-cli -p 6381 info replication
    
  5. 如果从库变成了主库,那么你就已经完成了,哨兵高可用配置

posted @ 2019-10-15 14:33  高薪程序员  阅读(147)  评论(0编辑  收藏  举报